Gemini Robotics-ER 1.5

Gemini Robotics-ER 1.5, Gemini'ın yapay ajan özelliklerini robotik alanına taşıyan bir görsel-dil modelidir (VLM). Fiziksel dünyada gelişmiş akıl yürütme için tasarlanmıştır. Robotların karmaşık görsel verileri yorumlamasına, uzamsal akıl yürütme yapmasına ve doğal dil komutlarından eylemler planlamasına olanak tanır.

Temel özellikler ve avantajlar:

  • Gelişmiş özerklik: Robotlar, açık uçlu ortamlardaki değişikliklere akıl yürüterek, uyum sağlayarak ve yanıt vererek tepki verebilir.
  • Doğal dil etkileşimi: Doğal dil kullanarak karmaşık görev atamaları yapmayı mümkün kılarak robotların kullanımını kolaylaştırır.
  • Görev düzenleme: Doğal dil komutlarını alt görevlere ayırır ve uzun vadeli görevleri tamamlamak için mevcut robot denetleyicileri ve davranışlarıyla entegre olur.
  • Çok yönlü özellikler: Nesneleri bulup tanımlar, nesne ilişkilerini anlar, tutma ve yörünge planları yapar ve dinamik sahneleri yorumlar.

Bu belgede, modelin ne yaptığı açıklanmakta ve modelin örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığıyla örnekler aracılığı

Hemen kullanmaya başlamak isterseniz modeli Google AI Studio'da deneyebilirsiniz.

Google AI Studio'da deneyin

Güvenlik

Gemini Robotics-ER 1.5 güvenliği göz önünde bulundurularak geliştirilmiş olsa da robotun çevresinde güvenli bir ortam sağlamak sizin sorumluluğunuzdadır. Üretken yapay zeka modelleri hata yapabilir ve fiziksel robotlar hasara neden olabilir. Güvenlik önceliğimizdir. Üretken yapay zeka modellerinin gerçek dünyadaki robotik uygulamalarda güvenli bir şekilde kullanılmasını sağlamak, araştırmalarımızın aktif ve kritik bir alanıdır. Daha fazla bilgi edinmek için Google DeepMind robotik güvenlik sayfasını ziyaret edin.

Başlangıç: Bir sahnedeki nesneleri bulma

Aşağıdaki örnekte, robotik alanında yaygın bir kullanım alanı gösterilmektedir. Bu örnekte, generateContent yöntemi kullanılarak bir resmin ve metin isteminin modele nasıl iletileceği gösterilmektedir. Böylece, tanımlanan nesnelerin listesi ve ilgili 2D noktaları elde edilebilir. Model, bir resimde tanımladığı öğeler için puan döndürür. Bu öğelerin normalleştirilmiş 2D koordinatlarını ve etiketlerini döndürür.

Bu çıkışı bir robotik API ile kullanabilir veya bir robotun gerçekleştireceği işlemleri oluşturmak için bir Vision-Language-Action (VLA) modeli ya da diğer üçüncü taraf kullanıcı tanımlı işlevleri çağırabilirsiniz.

Python

from google import genai
from google.genai import types

import IPython
from PIL import Image

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
PROMPT = """
          Point to no more than 10 items in the image. The label returned
          should be an identifying name for the object detected.
          The answer should follow the json format: [{"point": <point>,
          "label": <label1>}, ...]. The points are in [y, x] format
          normalized to 0-1000.
        """
client = genai.Client()

# Load your image
img = Image.open("my-image.png")
img = img.resize((800, int(800 * img.size[1] / img.size[0])), Image.Resampling.LANCZOS) # Resizing to speed-up rendering

image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        img,
        PROMPT
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        thinking_config=types.ThinkingConfig(thinking_budget=0)
    )
)

print(image_response.text)

REST

# First, ensure you have the image file locally.
# Encode the image to base64
IMAGE_BASE64=$(base64 -w 0 my-image.png)

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-robotics-er-1.5-preview:generateContent \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": "'"${IMAGE_BASE64}"'"
            }
          },
          {
            "text": "Point to no more than 10 items in the image. The label returned should be an identifying name for the object detected. The answer should follow the json format: [{\"point\": [y, x], \"label\": <label1>}, ...]. The points are in [y, x] format normalized to 0-1000."
          }
        ]
      }
    ],
    "generationConfig": {
      "temperature": 0.5,
      "thinkingConfig": {
        "thinkingBudget": 0
      }
    }
  }'

Çıktı, her biri point (normalleştirilmiş [y, x] koordinatları) ve nesneyi tanımlayan bir label içeren nesnelerden oluşan bir JSON dizisi olacaktır.

JSON

[
  {"point": [376, 508], "label": "small banana"},
  {"point": [287, 609], "label": "larger banana"},
  {"point": [223, 303], "label": "pink starfruit"},
  {"point": [435, 172], "label": "paper bag"},
  {"point": [270, 786], "label": "green plastic bowl"},
  {"point": [488, 775], "label": "metal measuring cup"},
  {"point": [673, 580], "label": "dark blue bowl"},
  {"point": [471, 353], "label": "light blue bowl"},
  {"point": [492, 497], "label": "bread"},
  {"point": [525, 429], "label": "lime"}
]

Aşağıdaki resimde, bu noktaların nasıl gösterilebileceğine dair bir örnek verilmiştir:

Resimdeki nesnelerin noktalarını gösteren bir örnek

İşleyiş şekli

Gemini Robotics-ER 1.5, robotlarınızın uzamsal anlayışı kullanarak fiziksel dünyada bağlam oluşturmasına ve çalışmasına olanak tanır. Resim/video/ses girişi ve doğal dil istemlerini kullanarak:

  • Nesneleri ve sahne bağlamını anlama: Nesneleri ve sahneyle ilişkilerini (kullanım olanakları dahil) tanımlar.
  • Görev talimatlarını anlama: Doğal dilde verilen görevleri yorumlar (ör. "muzun yerini bul").
  • Uzamsal ve zamansal olarak akıl yürütme: Eylem dizilerini ve nesnelerin zaman içinde bir sahneyle nasıl etkileşimde bulunduğunu anlama.
  • Yapılandırılmış çıkış sağlama: Nesne konumlarını temsil eden koordinatları (noktalar veya sınırlayıcı kutular) döndürür.

Bu sayede robotlar, çevrelerini programatik olarak "görebilir" ve "anlayabilir".

Gemini Robotics-ER 1.5 aynı zamanda agentic'tir. Bu nedenle, uzun vadeli görevleri yönetmek için karmaşık görevleri ("elmaları kaseye koy" gibi) alt görevlere ayırabilir:

  • Alt görevleri sıralama: Komutları mantıksal bir adım dizisine ayırır.
  • İşlev çağrıları/Kod yürütme: Mevcut robot işlevlerinizi/araçlarınızı çağırarak veya oluşturulan kodu yürüterek adımları uygular.

Gemini ile işlev çağrısının nasıl çalıştığı hakkında daha fazla bilgiyi İşlev Çağrısı sayfasında bulabilirsiniz.

Gemini Robotics-ER 1.5 ile düşünme bütçesini kullanma

Gemini Robotics-ER 1.5, gecikme ve doğruluk arasındaki dengeyi kontrol etmenizi sağlayan esnek bir düşünme bütçesine sahiptir. Nesne algılama gibi mekansal anlama görevlerinde model, küçük bir düşünme bütçesiyle yüksek performans elde edebilir. Sayma ve ağırlık tahmini gibi daha karmaşık akıl yürütme görevleri, daha büyük bir düşünme bütçesinden yararlanır. Bu sayede, daha zorlu görevlerde düşük gecikmeli yanıtlar ile yüksek doğruluklu sonuçlar arasındaki dengeyi sağlayabilirsiniz.

Düşünme bütçeleri hakkında daha fazla bilgi edinmek için Düşünme temel özellikleri sayfasını inceleyin.

Robotik için temsilci tabanlı özellikler

Bu bölümde, Gemini Robotics-ER 1.5'in çeşitli özellikleri açıklanmakta ve modelin robotik algılama, muhakeme ve planlama uygulamalarında nasıl kullanılacağı gösterilmektedir.

Bu bölümdeki örnekler, bir görüntüdeki nesneleri işaretleme ve bulma, yörüngeleri planlama ve uzun vadeli görevleri düzenleme gibi özellikleri gösterir. Basitlik için kod snippet'leri, istemi ve generate_content API'ye yapılan çağrıyı gösterecek şekilde azaltılmıştır. Çalıştırılabilir kodun tamamı ve ek örnekler Robotics cookbook'ta bulunabilir.

Nesneleri işaret etme

Görüntü veya video karelerinde nesneleri işaretleme ve bulma, robotik alanındaki görsel ve dil modellerinin (VLMs) yaygın bir kullanım alanıdır. Aşağıdaki örnekte, modelden bir resimdeki belirli nesneleri bulması ve koordinatlarını resim olarak döndürmesi isteniyor.

Python

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client()

# Load your image and set up your prompt
  with open('path/to/image-with-objects.jpg', 'rb') as f:
      image_bytes = f.read()

queries = [
    "bread",
    "starfruit",
    "banana",
]

prompt = f"""
    Get all points matching the following objects: {', '.join(queries)}. The
    label returned should be an identifying name for the object detected.
    The answer should follow the json format:
    [\{\{"point": <point>, "label": <label1>\}\}, ...]. The points are in
    [y, x] format normalized to 0-1000.
    """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
      thinking_config=types.ThinkingConfig(thinking_budget=0)
  )
)

print(image_response.text)

Çıktı, başlangıç örneğine benzer şekilde, bulunan nesnelerin koordinatlarını ve etiketlerini içeren bir JSON olacaktır.

[
  {"point": [671, 317], "label": "bread"},
  {"point": [738, 307], "label": "bread"},
  {"point": [702, 237], "label": "bread"},
  {"point": [629, 307], "label": "bread"},
  {"point": [833, 800], "label": "bread"},
  {"point": [609, 663], "label": "banana"},
  {"point": [770, 483], "label": "starfruit"}
]

Bir resimde tanımlanan nesnelerin noktalarını gösteren örnek

Modelden belirli nesneler yerine "meyve" gibi soyut kategorileri yorumlamasını ve resimdeki tüm örnekleri bulmasını istemek için aşağıdaki istemi kullanın.

Python

prompt = f"""
        Get all points for fruit. The label returned should be an identifying
        name for the object detected.
        """ + """The answer should follow the json format:
        [{"point": <point>, "label": <label1>}, ...]. The points are in
        [y, x] format normalized to 0-1000."""

Diğer görüntü işleme teknikleri için görüntü yorumlama sayfasını ziyaret edin.

Videodaki nesneleri izleme

Gemini Robotics-ER 1.5, nesneleri zaman içinde takip etmek için video karelerini de analiz edebilir. Desteklenen video biçimlerinin listesi için Video girişleri bölümüne bakın.

Modelin analiz ettiği her karede belirli nesneleri bulmak için kullanılan temel istem aşağıda verilmiştir:

Python

# Define the objects to find
queries = [
    "pen (on desk)",
    "pen (in robot hand)",
    "laptop (opened)",
    "laptop (closed)",
]

base_prompt = f"""
  Point to the following objects in the provided image: {', '.join(queries)}.
  The answer should follow the json format:
  [\{\{"point": <point>, "label": <label1>\}\}, ...].
  The points are in [y, x] format normalized to 0-1000.
  If no objects are found, return an empty JSON list [].
  """

Çıkışta, video karelerinde takip edilen bir kalem ve dizüstü bilgisayar gösteriliyor.

Bir GIF&#39;teki kareler aracılığıyla izlenen nesneleri gösteren bir örnek

Çalıştırılabilir kodun tamamı için Robotics cookbook'a bakın.

Nesne algılama ve sınırlayıcı kutular

Model, tek noktaların yanı sıra 2D sınırlayıcı kutular da döndürebilir. Bu kutular, bir nesneyi çevreleyen dikdörtgen bir bölge sağlar.

Bu örnekte, bir masadaki tanımlanabilir nesneler için 2 boyutlu sınırlayıcı kutular istenmektedir. Model, çıkışı 25 nesneyle sınırlaması ve birden fazla örneği benzersiz şekilde adlandırması için yönlendiriliyor.

Python

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client()

# Load your image and set up your prompt
  with open('path/to/image-with-objects.jpg', 'rb') as f:
      image_bytes = f.read()

prompt = """
      Return bounding boxes as a JSON array with labels. Never return masks
      or code fencing. Limit to 25 objects. Include as many objects as you
      can identify on the table.
      If an object is present multiple times, name them according to their
      unique characteristic (colors, size, position, unique characteristics, etc..).
      The format should be as follows: [{"box_2d": [ymin, xmin, ymax, xmax],
      "label": <label for the object>}] normalized to 0-1000. The values in
      box_2d must only be integers
      """

  image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
      types.Part.from_bytes(
        data=image_bytes,
        mime_type='image/jpeg',
      ),
      prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        thinking_config=types.ThinkingConfig(thinking_budget=0)
    )
  )

  print(image_response.text)

Aşağıda, modelden döndürülen kutular gösterilmektedir.

Bulunan nesnelerin sınırlayıcı kutularını gösteren bir örnek

Çalıştırılabilir kodun tamamı için Robotics cookbook'a bakın. Görüntü anlama sayfasında ayrıca segmentasyon ve nesne algılama gibi görsel görevlerle ilgili ek örnekler de yer alır.

Sınırlayıcı kutuyla ilgili daha fazla örneği Görüntü anlama sayfasında bulabilirsiniz.

Yörüngeler

Gemini Robotics-ER 1.5, robot hareketini yönlendirmek için yararlı olan bir yörüngeyi tanımlayan nokta dizileri oluşturabilir.

Bu örnekte, başlangıç noktası ve bir dizi ara nokta dahil olmak üzere kırmızı bir kalemi bir düzenleyiciye taşıyacak bir yörünge isteniyor.

Python

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client()

# Load your image and set up your prompt
  with open('path/to/image-with-objects.jpg', 'rb') as f:
      image_bytes = f.read()

points_data = []
prompt = """
        Place a point on the red pen, then 15 points for the trajectory of
        moving the red pen to the top of the organizer on the left.
        The points should be labeled by order of the trajectory, from '0'
        (start point at left hand) to <n> (final point)
        The answer should follow the json format:
        [{"point": <point>, "label": <label1>}, ...].
        The points are in [y, x] format normalized to 0-1000.
        """

  image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
      types.Part.from_bytes(
        data=image_bytes,
        mime_type='image/jpeg',
      ),
      prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
    )
  )

  print(image_response.text)

Yanıt, kırmızı kalemin düzenleyicinin üzerine taşıma görevini tamamlamak için izlemesi gereken yolun yörüngesini açıklayan bir dizi koordinattır:

[
  {"point": [550, 610], "label": "0"},
  {"point": [500, 600], "label": "1"},
  {"point": [450, 590], "label": "2"},
  {"point": [400, 580], "label": "3"},
  {"point": [350, 550], "label": "4"},
  {"point": [300, 520], "label": "5"},
  {"point": [250, 490], "label": "6"},
  {"point": [200, 460], "label": "7"},
  {"point": [180, 430], "label": "8"},
  {"point": [160, 400], "label": "9"},
  {"point": [140, 370], "label": "10"},
  {"point": [120, 340], "label": "11"},
  {"point": [110, 320], "label": "12"},
  {"point": [105, 310], "label": "13"},
  {"point": [100, 305], "label": "14"},
  {"point": [100, 300], "label": "15"}
]

Planlanan yörüngeyi gösteren bir örnek

Düzenleme

Gemini Robotics-ER 1.5, bağlamsal anlayışa dayalı olarak eylemleri tahmin etme veya en uygun konumları belirleme gibi daha üst düzeyde mekansal akıl yürütme işlemleri gerçekleştirebilir.

Dizüstü bilgisayar için yer açma

Bu örnekte, Gemini Robotics-ER'ın bir alan hakkında nasıl akıl yürütebileceği gösterilmektedir. İstemde, başka bir öğe için yer açmak üzere hangi nesnenin taşınması gerektiğini belirlemesi isteniyor.

Python

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client()

# Load your image and set up your prompt
  with open('path/to/image-with-objects.jpg', 'rb') as f:
      image_bytes = f.read()

prompt = """
          Point to the object that I need to remove to make room for my laptop
          The answer should follow the json format: [{"point": <point>,
          "label": <label1>}, ...]. The points are in [y, x] format normalized to 0-1000.
        """

  image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
      types.Part.from_bytes(
        data=image_bytes,
        mime_type='image/jpeg',
      ),
      prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        thinking_config=types.ThinkingConfig(thinking_budget=0)
    )
  )

  print(image_response.text)

Yanıtta, kullanıcının sorusunu yanıtlayan nesnenin 2 boyutlu koordinatı yer alır. Bu örnekte, dizüstü bilgisayara yer açmak için taşınması gereken nesne söz konusudur.

[
  {"point": [672, 301], "label": "The object that I need to remove to make room for my laptop"}
]

Başka bir nesne için hangi nesnenin taşınması gerektiğini gösteren bir örnek

Öğle Yemeği Hazırlama

Model, çok adımlı görevlerle ilgili talimatlar da verebilir ve her adım için ilgili nesneleri gösterebilir. Bu örnekte, modelin bir öğle yemeği çantasını hazırlamak için bir dizi adımı nasıl planladığı gösterilmektedir.

Python

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client()

# Load your image and set up your prompt
  with open('path/to/image-of-lunch.jpg', 'rb') as f:
      image_bytes = f.read()

prompt = """
          Explain how to pack the lunch box and lunch bag. Point to each
          object that you refer to. Each point should be in the format:
          [{"point": [y, x], "label": }], where the coordinates are
          normalized between 0-1000.
        """

  image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
      types.Part.from_bytes(
        data=image_bytes,
        mime_type='image/jpeg',
      ),
      prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        thinking_config=types.ThinkingConfig(thinking_budget=0)
    )
  )

  print(image_response.text)

Bu istemin yanıtı, resim girişinden yola çıkarak öğle yemeği çantasını nasıl hazırlayacağınızla ilgili adım adım talimatlardan oluşur.

Giriş resmi

Beslenme çantası ve içine konulacak öğelerin resmi

Model çıkışı

Based on the image, here is a plan to pack the lunch box and lunch bag:

1.  **Pack the fruit into the lunch box.** Place the [apple](apple), [banana](banana), [red grapes](red grapes), and [green grapes](green grapes) into the [blue lunch box](blue lunch box).
2.  **Add the spoon to the lunch box.** Put the [blue spoon](blue spoon) inside the lunch box as well.
3.  **Close the lunch box.** Secure the lid on the [blue lunch box](blue lunch box).
4.  **Place the lunch box inside the lunch bag.** Put the closed [blue lunch box](blue lunch box) into the [brown lunch bag](brown lunch bag).
5.  **Pack the remaining items into the lunch bag.** Place the [blue snack bar](blue snack bar) and the [brown snack bar](brown snack bar) into the [brown lunch bag](brown lunch bag).

Here is the list of objects and their locations:
*   [{"point": [899, 440], "label": "apple"}]
*   [{"point": [814, 363], "label": "banana"}]
*   [{"point": [727, 470], "label": "red grapes"}]
*   [{"point": [675, 608], "label": "green grapes"}]
*   [{"point": [706, 529], "label": "blue lunch box"}]
*   [{"point": [864, 517], "label": "blue spoon"}]
*   [{"point": [499, 401], "label": "blue snack bar"}]
*   [{"point": [614, 705], "label": "brown snack bar"}]
*   [{"point": [448, 501], "label": "brown lunch bag"}]

Özel bir robot API'sini çağırma

Bu örnekte, özel bir robot API'si ile görev düzenleme gösterilmektedir. Bu kitapta, seçme ve yerleştirme işlemi için tasarlanmış bir sahte API tanıtılmaktadır. Görev, mavi bir bloğu alıp turuncu bir kaseye yerleştirmektir:

Blok ve kase resmi

Bu sayfadaki diğer örneklere benzer şekilde, çalıştırılabilir kodun tamamını Robotics cookbook'ta bulabilirsiniz.

İlk adım, aşağıdaki istemi kullanarak her iki öğeyi de bulmaktır:

Python

prompt = """
            Locate and point to the blue block and the orange bowl. The label
            returned should be an identifying name for the object detected.
            The answer should follow the json format: [{"point": <point>, "label": <label1>}, ...].
            The points are in [y, x] format normalized to 0-1000.
          """

Model yanıtı, bloğun ve kâsenin normalleştirilmiş koordinatlarını içerir:

[
  {"point": [389, 252], "label": "orange bowl"},
  {"point": [727, 659], "label": "blue block"}
]

Bu örnekte aşağıdaki sahte robot API'si kullanılmaktadır:

Python

def move(x, y, high):
  print(f"moving to coordinates: {x}, {y}, {15 if high else 5}")

def setGripperState(opened):
  print("Opening gripper" if opened else "Closing gripper")

def returnToOrigin():
  print("Returning to origin pose")

Bir sonraki adım, işlemi yürütmek için gerekli mantığa sahip bir API işlevleri dizisini çağırmaktır. Aşağıdaki istemde, modelin bu görevi düzenlerken kullanması gereken Robot API'sinin açıklaması yer alıyor.

Python

prompt = f"""
    You are a robotic arm with six degrees-of-freedom. You have the
    following functions available to you:

    def move(x, y, high):
      # moves the arm to the given coordinates. The boolean value 'high' set
      to True means the robot arm should be lifted above the scene for
      avoiding obstacles during motion. 'high' set to False means the robot
      arm should have the gripper placed on the surface for interacting with
      objects.

    def setGripperState(opened):
      # Opens the gripper if opened set to true, otherwise closes the gripper

    def returnToOrigin():
      # Returns the robot to an initial state. Should be called as a cleanup
      operation.

    The origin point for calculating the moves is at normalized point
    y={robot_origin_y}, x={robot_origin_x}. Use this as the new (0,0) for
    calculating moves, allowing x and y to be negative.
    Perform a pick and place operation where you pick up the blue block at
    normalized coordinates ({block_x}, {block_y}) (relative coordinates:
    {block_relative_x}, {block_relative_y}) and place it into the orange
    bowl at normalized coordinates ({bowl_x}, {bowl_y})
    (relative coordinates: {bowl_relative_x}, {bowl_relative_y}).
    Provide the sequence of function calls as a JSON list of objects, where
    each object has a "function" key (the function name) and an "args" key
    (a list of arguments for the function).
    Also, include your reasoning before the JSON output.
    For example:
    Reasoning: To pick up the block, I will first move the arm to a high
    position above the block, open the gripper, move down to the block,
    close the gripper, lift the arm, move to a high position above the bowl,
    move down to the bowl, open the gripper, and then lift the arm back to
    a high position.
"""

Aşağıda, isteme ve sahte robot API'sine dayalı olarak modelin olası bir çıkışı gösterilmektedir. Çıkış, modelin düşünce sürecini ve bunun sonucunda planladığı görevleri içerir. Ayrıca, modelin birlikte sıraladığı robot işlevi çağrılarının çıkışını da gösterir.

Reasoning: To perform the pick and place operation, I will first move the
robotic arm to a high position above the blue block to ensure clearance. Then, I
will open the gripper in preparation for grasping. Next, I will lower the arm to
the surface level to position the gripper around the block and close the gripper
to secure it. After picking up the block, I will lift the arm to clear the
surface and move towards the orange bowl, maintaining a high position to avoid
collisions. Once positioned above the bowl, I will lower the arm to place the
block inside. I will then open the gripper to release the block. Finally, I will
lift the arm out of the bowl and call `returnToOrigin` to reset the robot's
state.

[
  {
    "function": "move",
    "args": [
      163,
      427,
      true
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      true
    ]
  },
  {
    "function": "move",
    "args": [
      163,
      427,
      false
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      false
    ]
  },
  {
    "function": "move",
    "args": [
      163,
      427,
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      false
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      true
    ]
  },
  {
    "function": "returnToOrigin",
    "args": []
  }
]


Executing Function Calls:
moving to coordinates: 163, 427, 15
Opening gripper
moving to coordinates: 163, 427, 5
Closing gripper
moving to coordinates: 163, 427, 15
moving to coordinates: -247, 90, 15
moving to coordinates: -247, 90, 5
Opening gripper
moving to coordinates: -247, 90, 15
Returning to origin pose

Kod yürütme

Gemini Robotics-ER 1.5, daha iyi ayrıntı için bir görüntü bölgesini yakınlaştırma gibi dinamik işlemler gerektiren görevleri gerçekleştirmek üzere Python kodu önerebilir ve yürütebilir.

Bu örnekte, modelin kullanıcının sorusunu yanıtlamak için önce bir resmin belirli bir alanına "yakınlaştırmak" amacıyla kod yürütme aracını kullanmayı nasıl önerdiği ve ardından bu işlemi nasıl gerçekleştirdiği gösterilmektedir.

Python

from google import genai
from google.genai import types

client = genai.Client()

MODEL_ID = "gemini-robotics-er-1.5-preview"

# Load your image and set up your prompt
  with open('path/to/image-of-object.jpg', 'rb') as f:
      image_bytes = f.read()
prompt = """
          What is the air quality reading? Using the code execution feature,
          zoom in on the image to take a closer look.
        """

response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        img,
        prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        tools=[types.Tool(code_execution=types.ToolCodeExecution)]
    )
)

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    if part.executable_code is not None:
        print(part.executable_code.code)
    if part.code_execution_result is not None:
        print(part.code_execution_result.output)

Aşağıda, bu görev için olası bir model yanıtı gösterilmektedir. Çıkışta, ekranı daha iyi okumak için görüntüyü yakınlaştırmaya yönelik kod oluşturulduğu gösteriliyor. Ayrıca kırpma işleminde yaptığı düzenlemelerle ilgili düşünce sürecini de gösterir. Tam örnek çıkış için Robotics cookbook'a bakın.

# Detect relevant objects and output in json format
# [{"box_2d": [379, 407, 481, 553], "label": "display"}]
from PIL import Image

# Open the image
img = Image.open("input_file_0.jpeg")

# Define the coordinates for cropping (normalized to 0-1000)
# Based on visual inspection, the display is roughly centered around [430, 430] to [500, 500] in a 1000x1000 scale.
# Let's try to zoom in on the display area.
# Bounding box for display: [ymin, xmin, ymax, xmax] in pixels.
# From visual inspection of the original image (size 90489 bytes, resolution
unknown but let's assume a standard aspect ratio and roughly 1000x1000 for
relative positioning),
# the display is located at approximately y=380-480, x=410-540.
# Let's define a larger area around it for context.
# Let's say we want to crop from y=350 to y=550 and x=350 to x=650.

...

thought
The crop was too tight and only captured part of the display. Let's adjust the bounding box.
The previous crop was `img.crop((400, 350, 600, 500))`. This means xmin=400, ymin=350, xmax=600, ymax=500.
The display is centered around x=480, y=430.
The previous crop captured the left side of the display.
Let's expand the x range to the right and y range to cover the whole circle.
New bounding box estimate: ymin=370, xmin=400, ymax=500, xmax=600.
Let's try again with a wider crop.
# Detect relevant objects and output in json format
# [{"box_2d": [379, 407, 481, 553], "label": "display"}]
from PIL import Image

# Open the image
img = Image.open("input_file_0.jpeg")

# Define the coordinates for cropping (normalized to 0-1000)
…

The reading of 14 falls into the "Moderate" category.
The prompt asks for the "air quality reading", which can be interpreted as
either the numerical value or the categorical description. Given the numerical
value is explicitly displayed, it's the primary reading.

Let's provide the numerical value as the reading.
The reading is 014.
Based on the display on the air purifier, the air quality reading is **014**.

En iyi uygulamalar

Robotik uygulamalarınızın performansını ve doğruluğunu optimize etmek için Gemini modeliyle etkili bir şekilde nasıl etkileşim kuracağınızı anlamanız çok önemlidir. Bu bölümde, istem oluşturma, görsel verileri işleme ve görevleri yapılandırma ile ilgili en iyi uygulamalar ve temel stratejiler özetlenmektedir. Bu sayede en güvenilir sonuçlar elde edilebilir.

  1. Açık ve basit bir dil kullanın.

    • Doğal dili kullanın: Gemini modeli, doğal ve sohbet tarzındaki dili anlamak için tasarlanmıştır. İstemlerinizi, semantik olarak net olacak ve bir kişinin doğal olarak talimat vereceği şekilde yapılandırın.

    • Günlük dilde kullanılan terimleri tercih edin: Teknik veya uzmanlık alanına özgü jargon yerine günlük dilde kullanılan terimleri tercih edin. Model, belirli bir terime beklendiği gibi yanıt vermiyorsa terimi daha yaygın bir eş anlamlı kelimeyle yeniden ifade etmeyi deneyin.

  2. Görsel girişi optimize edin.

    • Ayrıntı için yakınlaştırma: Küçük olan veya daha geniş bir çekimde ayırt edilmesi zor olan nesnelerle uğraşırken ilgilenilen nesneyi izole etmek için sınırlayıcı kutu işlevini kullanın. Ardından, resmi bu seçime göre kırpabilir ve daha ayrıntılı bir analiz için yeni, odaklanmış resmi modele gönderebilirsiniz.

    • Işık ve renklerle denemeler yapın: Modelin algısı, zorlu ışık koşullarından ve zayıf renk kontrastından etkilenebilir.

  3. Karmaşık sorunları daha küçük adımlara ayırın. Her küçük adımı ayrı ayrı ele alarak modeli daha hassas ve başarılı bir sonuca yönlendirebilirsiniz.

  4. Uzlaşma yoluyla doğruluğu artırın. Yüksek düzeyde hassasiyet gerektiren görevler için modele aynı istemle birden fazla kez sorgu gönderebilirsiniz. Döndürülen sonuçların ortalamasını alarak genellikle daha doğru ve güvenilir olan bir "uzlaşmaya" varabilirsiniz.

Sınırlamalar

Gemini Robotics-ER 1.5 ile geliştirme yaparken aşağıdaki sınırlamaları göz önünde bulundurun:

  • Önizleme durumu: Model şu anda önizleme aşamasındadır. API'ler ve özellikler değişebilir. Ayrıca, kapsamlı testler yapılmadan üretime kritik uygulamalar için uygun olmayabilir.
  • Gecikme: Karmaşık sorgular, yüksek çözünürlüklü girişler veya kapsamlı thinking_budget, işlem sürelerinin uzamasına neden olabilir.
  • Halüsinasyonlar: Tüm büyük dil modelleri gibi Gemini Robotics-ER 1.5 de zaman zaman "halüsinasyon" görebilir veya yanlış bilgi verebilir. Bu durum özellikle belirsiz istemlerde ya da dağıtım dışı girişlerde görülür.
  • İstem kalitesine bağlılık: Modelin çıktısının kalitesi, giriş isteminin netliğine ve spesifikliğine büyük ölçüde bağlıdır. Belirsiz veya kötü yapılandırılmış istemler, optimum olmayan sonuçlara yol açabilir.
  • Hesaplama maliyeti: Özellikle video girişleriyle veya yüksek thinking_budget ile modelin çalıştırılması, hesaplama kaynaklarını tüketir ve maliyetlere neden olur. Daha fazla bilgi için Düşünme sayfasına bakın.
  • Giriş türleri: Her moddaki sınırlamalarla ilgili ayrıntılar için aşağıdaki konulara bakın.

Gizlilik Uyarısı

Bu belgede referans verilen modellerin ("Robotik Modeller") çalışmak ve donanımınızı talimatlarınıza uygun şekilde hareket ettirmek için video ve ses verilerinden yararlandığını kabul edersiniz. Bu nedenle, Robotik Modelleri, tanımlanabilir kişilerden elde edilen veriler (ör. ses, görüntü ve benzerlik verileri ("Kişisel Veriler")) Robotik Modeller tarafından toplanacak şekilde çalıştırabilirsiniz. Robotik Modelleri Kişisel Veri toplayacak şekilde çalıştırmayı tercih ederseniz, bu Kişisel Verilerin https://ai.google.dev/gemini-api/terms adresinde bulunan Gemini API Ek Hizmet Şartları'nda ("Şartlar") belirtildiği şekilde Google'a sağlanabileceği ve Google tarafından kullanılabileceği konusunda yeterince bilgilendirilip onay vermedikleri sürece, kimliği belirlenebilir kişilerin Robotik Modellerle etkileşime girmesine veya Robotik Modellerin bulunduğu alanda bulunmasına izin vermeyeceğinizi kabul edersiniz. Bu kabul, "Google Verilerinizi Nasıl Kullanır?" başlıklı bölüm uyarınca da geçerlidir. Bu tür bir bildirimin, Şartlar'da belirtildiği şekilde Kişisel Verilerin toplanmasına ve kullanılmasına izin vermesini sağlayacak ve yüz bulanıklaştırma gibi teknikler kullanarak ve Robotik Modelleri, tanımlanabilir kişilerin bulunmadığı alanlarda çalıştırarak Kişisel Verilerin toplanmasını ve dağıtılmasını mümkün olduğunca en aza indirmek için ticari açıdan makul çabayı göstereceksiniz.

Fiyatlandırma

Fiyatlandırma ve kullanılabilir bölgeler hakkında ayrıntılı bilgi için fiyatlandırma sayfasına bakın.

Sonraki adımlar

  • Diğer özellikleri keşfedin ve Gemini Robotics-ER 1.5'in daha fazla uygulamasını bulmak için farklı istemler ve girişlerle denemeler yapmaya devam edin. Daha fazla örnek için Robotik yemek kitabı'na bakın.
  • Gemini Robotics modellerinin güvenlik göz önünde bulundurularak nasıl geliştirildiği hakkında bilgi edinmek için Google DeepMind Robotics Güvenliği sayfasına gidin.
  • Gemini Robotics modellerindeki en son güncellemeler hakkında bilgi edinmek için Gemini Robotics açılış sayfasını ziyaret edin.