Gemini Robotics-ER 1.5 — это модель визуально-языкового взаимодействия (VLM), которая переносит агентные возможности Gemini в робототехнику. Она разработана для продвинутых логических рассуждений в физическом мире, позволяя роботам интерпретировать сложные визуальные данные, осуществлять пространственное мышление и планировать действия с помощью команд естественного языка.
Основные особенности и преимущества:
- Повышенная автономность: роботы могут рассуждать, адаптироваться и реагировать на изменения в открытых средах.
- Взаимодействие на естественном языке: упрощает использование роботов, позволяя выполнять сложные задачи с использованием естественного языка.
- Организация задач: разбивает команды естественного языка на подзадачи и интегрируется с существующими контроллерами и моделями поведения робота для выполнения долгосрочных задач.
- Универсальные возможности: обнаруживает и идентифицирует объекты, понимает взаимосвязи между объектами, планирует захваты и траектории, интерпретирует динамические сцены.
В этом документе описывается , что делает модель , и приводятся несколько примеров , демонстрирующих агентские возможности модели.
Если вы хотите сразу приступить к работе, вы можете опробовать модель в 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 [].
"""
На выходе видно, как ручка и ноутбук отслеживаются на видеокадрах.
Полный рабочий код смотрите в книге «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. В этом разделе описаны передовые практики и ключевые стратегии создания подсказок, обработки визуальных данных и структурирования задач для достижения максимально надежных результатов.
Используйте понятный и простой язык.
Используйте естественный язык : модель Gemini разработана для понимания естественного разговорного языка. Структурируйте свои подсказки таким образом, чтобы они были семантически понятными и отражали естественную манеру дачи инструкций.
Используйте повседневную терминологию : отдавайте предпочтение общеупотребимому, повседневному языку, а не техническому или специализированному жаргону. Если модель не реагирует на какой-либо термин ожидаемым образом, попробуйте перефразировать его, используя более распространённый синоним.
Оптимизируйте визуальный ввод.
Увеличьте масштаб для детализации : при работе с мелкими или трудноразличимыми на общем плане объектами используйте функцию ограничивающей рамки, чтобы выделить интересующий объект. Затем вы можете обрезать изображение по выбранному фрагменту и отправить новое, более точное изображение модели для более детального анализа.
Экспериментируйте с освещением и цветом : на восприятие модели могут повлиять сложные условия освещения и плохой цветовой контраст.
Разбейте сложные проблемы на более мелкие этапы. Решая каждый этап индивидуально, вы сможете направить модель к более точному и успешному результату.
Повышение точности за счёт консенсуса. Для задач, требующих высокой точности, можно обращаться к модели несколько раз, используя один и тот же запрос. Усредняя полученные результаты, можно прийти к «консенсусу», который зачастую оказывается более точным и надёжным.
Ограничения
При разработке с использованием 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-контекст Поддерживается |
версии |
|
Последнее обновление | Сентябрь 2025 г. |
Отсечка знаний | Январь 2025 г. |
Следующие шаги
- Изучите другие возможности и продолжайте экспериментировать с различными подсказками и входными данными, чтобы найти новые области применения Gemini Robotics-ER 1.5. Дополнительные примеры см. в книге «Робототехника» .
- Чтобы узнать больше о том, как модели Gemini Robotics создавались с учетом требований безопасности, посетите страницу безопасности робототехники Google DeepMind .
- Ознакомьтесь с последними обновлениями моделей Gemini Robotics на целевой странице Gemini Robotics .