Gemini Robotics-ER 1.5

Gemini Robotics-ER 1.5 — это модель визуально-языкового взаимодействия (VLM), которая переносит агентные возможности Gemini в робототехнику. Она разработана для продвинутых логических рассуждений в физическом мире, позволяя роботам интерпретировать сложные визуальные данные, осуществлять пространственное мышление и планировать действия с помощью команд естественного языка.

Основные особенности и преимущества:

  • Повышенная автономность: роботы могут рассуждать, адаптироваться и реагировать на изменения в открытых средах.
  • Взаимодействие на естественном языке: упрощает использование роботов, позволяя выполнять сложные задачи с использованием естественного языка.
  • Организация задач: разбивает команды естественного языка на подзадачи и интегрируется с существующими контроллерами и моделями поведения робота для выполнения долгосрочных задач.
  • Универсальные возможности: обнаруживает и идентифицирует объекты, понимает взаимосвязи между объектами, планирует захваты и траектории, интерпретирует динамические сцены.

В этом документе описывается , что делает модель , и приводятся несколько примеров , демонстрирующих агентские возможности модели.

Если вы хотите сразу приступить к работе, вы можете опробовать модель в Google AI Studio.

Попробуйте в Google AI Studio

Безопасность

Хотя Gemini Robotics-ER 1.5 был разработан с учётом требований безопасности, вы несёте ответственность за поддержание безопасной среды вокруг робота. Генеративные модели ИИ могут совершать ошибки, а физические роботы могут причинить вред. Безопасность — наш приоритет, и обеспечение безопасности генеративных моделей ИИ при использовании с реальной робототехникой — важная и активная область наших исследований. Подробнее см. на странице безопасности робототехники Google DeepMind .

Начало работы: поиск объектов на сцене

Следующий пример демонстрирует типичный пример использования в робототехнике. Он показывает, как передать изображение и текстовую подсказку модели с помощью метода generateContent для получения списка идентифицированных объектов с соответствующими им двумерными точками. Модель возвращает точки для объектов, идентифицированных на изображении, возвращая их нормализованные двумерные координаты и метки.

Вы можете использовать этот вывод с API робототехники или вызвать модель «зрение-язык-действие» (VLA) или любые другие сторонние пользовательские функции для генерации действий, которые должен выполнить робот.

Питон

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)

ОТДЫХ

# 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
      }
    }
  }'

Выходными данными будет массив JSON, содержащий объекты, каждый из которых имеет point (нормализованные координаты [y, x] ) и label , идентифицирующую объект.

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"}
]

На следующем изображении показан пример того, как можно отобразить эти точки:

Пример, отображающий точки объектов на изображении

Как это работает

Gemini Robotics-ER 1.5 позволяет вашим роботам ориентироваться в физическом мире и работать в нём, используя пространственное понимание. Система использует изображения, видео, аудио и подсказки на естественном языке для:

  • Понимание объектов и контекста сцены : определяет объекты и рассуждает об их связи со сценой, включая их возможности.
  • Понимание инструкций к заданию : Интерпретирует задания, данные на естественном языке, например, «найди банан».
  • Рассуждайте пространственно и временно : понимайте последовательности действий и то, как объекты взаимодействуют со сценой с течением времени.
  • Предоставляет структурированный вывод : возвращает координаты (точки или ограничивающие рамки), представляющие местоположение объектов.

Это позволяет роботам программно «видеть» и «понимать» окружающую среду.

Gemini Robotics-ER 1.5 также является агентным роботом, то есть он может разбивать сложные задачи (например, «положить яблоко в вазу») на подзадачи для организации долгосрочных задач:

  • Последовательность подзадач : разбивает команды на логическую последовательность шагов.
  • Вызовы функций/Выполнение кода : выполняет шаги путем вызова существующих функций/инструментов робота или выполнения сгенерированного кода.

Подробнее о том, как работает вызов функций с помощью Gemini, читайте на странице Вызов функций .

Использование бюджета мышления с Gemini Robotics-ER 1.5

Gemini Robotics-ER 1.5 обладает гибким ресурсом мышления, позволяющим контролировать баланс между задержкой и точностью. В задачах пространственного понимания, таких как обнаружение объектов, модель может достигать высокой производительности при небольшом ресурсе мышления. Более сложные задачи на рассуждение, такие как счёт и оценка веса, требуют большего ресурса мышления. Это позволяет сбалансировать потребность в ответах с низкой задержкой и высокой точностью для более сложных задач.

Дополнительную информацию о бюджетном мышлении можно найти на странице «Основные возможности мышления» .

Агентные возможности для робототехники

В этом разделе рассматриваются различные возможности Gemini Robotics-ER 1.5 и демонстрируется, как использовать модель для приложений роботизированного восприятия, рассуждения и планирования.

Примеры в этом разделе демонстрируют возможности от указания и поиска объектов на изображении до планирования траекторий и организации долгосрочных задач. Для простоты фрагменты кода были сокращены, чтобы показать приглашение и вызов API generate_content . Полный исполняемый код, а также дополнительные примеры можно найти в книге «Robotics Cookbook» .

Указание на объекты

Указание и поиск объектов на изображениях или видеокадрах — распространённый пример использования моделей зрения и языка (VLM) в робототехнике. В следующем примере модель должна найти определённые объекты на изображении и вернуть их координаты на изображении.

Питон

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)

Вывод будет аналогичен начальному примеру: JSON, содержащий координаты найденных объектов и их метки.

[
  {"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"}
]

Пример, отображающий точки объектов, идентифицированных на изображении.

Используйте следующую подсказку, чтобы попросить модель интерпретировать абстрактные категории, например «фрукты», а не конкретные объекты и найти все экземпляры на изображении.

Питон

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."""

Посетите страницу понимания изображений для получения информации о других методах обработки изображений.

Отслеживание объектов на видео

Gemini Robotics-ER 1.5 также может анализировать видеокадры для отслеживания объектов во времени. Список поддерживаемых видеоформатов см. в разделе «Видеовходы».

Ниже приведена базовая подсказка, используемая для поиска определенных объектов в каждом кадре, который анализирует модель:

Питон

# 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 [].
  """

На выходе видно, как ручка и ноутбук отслеживаются на видеокадрах.

Пример, демонстрирующий отслеживание объектов через кадры в GIF-файле.

Полный рабочий код смотрите в книге «Robotics Cookbook» .

Обнаружение объектов и ограничивающие рамки

Помимо отдельных точек, модель также может возвращать двумерные ограничивающие рамки, предоставляя прямоугольную область, охватывающую объект.

В этом примере запрашиваются двумерные ограничивающие рамки для идентифицируемых объектов на таблице. Модель должна ограничить вывод 25 объектами и дать каждому экземпляру уникальное имя.

Питон

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)

Ниже показаны поля, возвращенные из модели.

Пример, показывающий ограничивающие рамки для найденных объектов

Полный рабочий код можно найти в книге «Робототехника» . На странице «Распознавание изображений» также представлены дополнительные примеры визуальных задач, таких как сегментация и обнаружение объектов.

Дополнительные примеры ограничивающих рамок можно найти на странице «Понимание изображений» .

Траектории

Gemini Robotics-ER 1.5 может генерировать последовательности точек, определяющих траекторию, полезную для управления движением робота.

В этом примере запрашивается траектория перемещения красной ручки в органайзер, включая начальную точку и ряд промежуточных точек.

Питон

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)

Ответ представляет собой набор координат, описывающих траекторию пути, по которому должна двигаться красная ручка, чтобы завершить задачу перемещения ее на верхнюю часть органайзера:

[
  {"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"}
]

Пример, показывающий запланированную траекторию

Оркестровка

Gemini Robotics-ER 1.5 может выполнять пространственные рассуждения более высокого уровня, делать выводы о действиях или определять оптимальные местоположения на основе понимания контекста.

Освобождение места для ноутбука

В этом примере показано, как Gemini Robotics-ER может анализировать пространство. В подсказке модели предлагается определить, какой объект необходимо переместить, чтобы освободить место для другого объекта.

Питон

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)

Ответ содержит двухмерную координату объекта, который отвечает на вопрос пользователя, в данном случае — объекта, который следует переместить, чтобы освободить место для ноутбука.

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

Пример, показывающий, какой объект необходимо переместить ради другого объекта.

Сбор ланча

Модель также может предоставлять инструкции для многоэтапных задач и указывать на соответствующие объекты для каждого этапа. В этом примере показано, как модель планирует последовательность шагов для упаковки пакета с обедом.

Питон

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)

Ответ на эту подсказку представляет собой набор пошаговых инструкций о том, как упаковать сумку для ланча с помощью входного изображения.

Входное изображение

Изображение ланч-бокса и предметов, которые можно в него положить

Выходные данные модели

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"}]

Вызов пользовательского API робота

В этом примере демонстрируется оркестровка задач с помощью API-интерфейса робота. Он представляет собой макет API, предназначенный для операции «поднять-поместить». Задача — взять синий блок и положить его в оранжевую чашу:

Изображение блока и чаши

Как и другие примеры на этой странице, полный исполняемый код доступен в книге рецептов робототехники .

Первый шаг — найти оба элемента с помощью следующей подсказки:

Питон

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.
          """

Реакция модели включает нормализованные координаты блока и чаши:

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

В этом примере используется следующий API-интерфейс фиктивного робота:

Питон

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")

Следующий шаг — вызов последовательности функций API с необходимой логикой для выполнения действия. В следующем запросе содержится описание API робота, которое модель должна использовать при организации этой задачи.

Питон

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.
"""

Ниже показан возможный вывод модели, основанный на подсказке и API макета робота. Вывод включает в себя процесс мышления модели и задачи, которые она спланировала в результате. Также показан вывод вызовов функций робота, которые модель объединила в последовательность.

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

Выполнение кода

Gemini Robotics-ER 1.5 может предлагать и выполнять код 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)

Ниже показан возможный ответ модели для этой задачи. В выходных данных показана модель, генерирующая код для увеличения изображения для лучшего восприятия информации с экрана. Также показан ход мысли по поводу внесённых ею изменений в кадрирование. Полный пример выходных данных см. в книге «Robotics Cookbook» .

# 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**.

Лучшие практики

Для оптимизации производительности и точности ваших робототехнических приложений крайне важно понимать, как эффективно взаимодействовать с моделью Gemini. В этом разделе описаны передовые практики и ключевые стратегии создания подсказок, обработки визуальных данных и структурирования задач для достижения максимально надежных результатов.

  1. Используйте понятный и простой язык.

    • Используйте естественный язык : модель Gemini разработана для понимания естественного разговорного языка. Структурируйте свои подсказки таким образом, чтобы они были семантически понятными и отражали естественную манеру дачи инструкций.

    • Используйте повседневную терминологию : отдавайте предпочтение общеупотребимому, повседневному языку, а не техническому или специализированному жаргону. Если модель не реагирует на какой-либо термин ожидаемым образом, попробуйте перефразировать его, используя более распространённый синоним.

  2. Оптимизируйте визуальный ввод.

    • Увеличьте масштаб для детализации : при работе с мелкими или трудноразличимыми на общем плане объектами используйте функцию ограничивающей рамки, чтобы выделить интересующий объект. Затем вы можете обрезать изображение по выбранному фрагменту и отправить новое, более точное изображение модели для более детального анализа.

    • Экспериментируйте с освещением и цветом : на восприятие модели могут повлиять сложные условия освещения и плохой цветовой контраст.

  3. Разбейте сложные проблемы на более мелкие этапы. Решая каждый этап индивидуально, вы сможете направить модель к более точному и успешному результату.

  4. Повышение точности за счёт консенсуса. Для задач, требующих высокой точности, можно обращаться к модели несколько раз, используя один и тот же запрос. Усредняя полученные результаты, можно прийти к «консенсусу», который зачастую оказывается более точным и надёжным.

Ограничения

При разработке с использованием Gemini Robotics-ER 1.5 учитывайте следующие ограничения:

  • Статус предварительной версии: Модель в настоящее время находится в стадии предварительной версии . API и возможности могут измениться, и она может оказаться непригодной для критически важных производственных приложений без тщательного тестирования.
  • Задержка: Сложные запросы, входные данные с высоким разрешением или обширный thinking_budget могут привести к увеличению времени обработки.
  • Галлюцинации: Как и все большие языковые модели, Gemini Robotics-ER 1.5 может иногда «галлюцинировать» или предоставлять неверную информацию, особенно в случае неоднозначных подсказок или нестандартных входных данных.
  • Зависимость от качества подсказок: Качество выходных данных модели сильно зависит от ясности и конкретики входных подсказок. Неясные или плохо структурированные подсказки могут привести к неоптимальным результатам.
  • Вычислительные затраты: запуск модели, особенно с видеоданными или высоким значением thinking_budget , требует больших вычислительных ресурсов и влечет за собой дополнительные затраты. Подробнее см. на странице «Размышления» .
  • Типы входных данных: подробную информацию об ограничениях для каждого режима см. в следующих темах.

Уведомление о конфиденциальности

Вы признаете, что модели, упомянутые в настоящем документе (далее – «Модели робототехники»), используют видео- и аудиоданные для управления и перемещения вашего оборудования в соответствии с вашими инструкциями. Поэтому вы можете управлять моделями робототехники таким образом, что данные идентифицируемых лиц, такие как данные голоса, изображения и сходства («Персональные данные»), будут собираться моделями робототехники. Если вы решите управлять моделями робототехники таким образом, чтобы собирать Персональные данные, вы соглашаетесь с тем, что не позволите каким-либо идентифицируемым лицам взаимодействовать с моделями робототехники или находиться в зоне их присутствия, за исключением случаев, когда такие идентифицируемые лица будут в достаточной степени уведомлены и дадут согласие на то, что их Персональные данные могут предоставляться и использоваться Google, как указано в Дополнительных условиях обслуживания Gemini API, размещенных по адресу https://ai.google.dev/gemini-api/terms («Условия»), в том числе в соответствии с разделом «Как Google использует ваши данные». Вы гарантируете, что такое уведомление разрешает сбор и использование Персональных данных, как указано в Условиях, и вы приложите коммерчески обоснованные усилия для минимизации сбора и распространения Персональных данных путем использования таких методов, как размытие лиц и эксплуатация Роботизированных моделей в зонах, не содержащих идентифицируемых лиц, насколько это практически осуществимо.

Цены

Подробную информацию о ценах и доступных регионах смотрите на странице цен .

Версии модели

Свойство Описание
Код модели gemini-robotics-er-1.5-preview
Поддерживаемые типы данных

Входы

Текст, изображения, видео, аудио

Выход

Текст

Лимиты токенов [*]

Лимит входных токенов

1,048,576

Лимит выходных токенов

65,536

Возможности

Генерация звука

Не поддерживается

Пакетный API

Не поддерживается

Кэширование

Не поддерживается

Выполнение кода

Поддерживается

Вызов функции

Поддерживается

Генерация изображений

Не поддерживается

Живой API

Не поддерживается

Поиск заземления

Поддерживается

Структурированные результаты

Поддерживается

Мышление

Поддерживается

URL-контекст

Поддерживается

версии
Более подробную информацию можно найти в шаблонах версий модели .
  • Предварительный просмотр: gemini-robotics-er-1.5-preview
Последнее обновление Сентябрь 2025 г.
Отсечка знаний Январь 2025 г.

Следующие шаги