Anki Vector - домашний робот с интерактивной технологией AI.
Что ж, я купил этого человечка 10 февраля 2019 года, если вам нужен питомец-робот и вы хотите заняться программированием на нем искусственного интеллекта, то я настоятельно рекомендую вам приобрести Anki Vector.
Я создаю этот проект, чтобы поделиться своими кодами и документами.
Обнаружение объектов с помощью вектора
Эта программа позволяет Vector обнаруживать объекты с помощью своей камеры и сообщать нам, что она нашла.
Мы делаем снимок с камеры Vector, затем публикуем его в Google Vision Service, затем Google Vision Service возвращает результат обнаружения объекта, наконец, мы превращаем весь текст метки в предложение и отправляем в Vector, чтобы Vector мог сказать это вслух.
Вот несколько демонстрационных видеороликов:
- Вектор обнаружил часы на моем столе.
- Вектор обнаружил медведя в альбоме моего телефона.
- Вектор обнаружил на моем столе игровой контроллер.
Что ж, посмотрим, как это сделать.
Запустите код самостоятельно
- Установите Vector Python SDK. Вы можете протестировать SDK, запустив любой из примеров из anki / vector-python-sdk / examples / tutorials /
- Настройте свою учетную запись Google Vision. Затем выполните Быстрый старт, чтобы протестировать API.
- Клонировать этот проект в локальный. Требуется Python 3.6+.
- Не забудьте указать в переменной среды Google Vision GOOGLE_APPLICATION_CREDENTIALS путь к файлу JSON, который содержит ключ вашей учетной записи службы. например
export GOOGLE_APPLICATION_CREDENTIALS="/Workspace/Vector-vision-62d48ad8da6e.json"
- Убедитесь, что ваш компьютер и Vector находятся в одной сети Wi-Fi. Затем запустите
python3 object_detection.py
. - Если вам повезет, Vector запустит первое обнаружение объекта, он скажет: «Милорд, я нашел кое-что интересное. Дай мне 5 секунд ».
Как это работает
- Подключитесь к Vector с
enable_camera_feed=True
, потому что нам нужен API anki_vector.camera.
robot = anki_vector.Robot(anki_vector.util.parse_command_args().serial, enable_camera_feed=True)
- Нам нужно будет показать то, что Vector видит на своем экране.
def show_camera(): print('Show camera') robot.camera.init_camera_feed() robot.vision.enable_display_camera_feed_on_face(True)
и закройте камеру после обнаружения.
def close_camera(): print('Close camera') robot.vision.enable_display_camera_feed_on_face(False) robot.camera.close_camera_feed()
- Мы сохраним снимок с камеры Vector и сохраним его позже, чтобы отправить в Google Vision.
def save_image(file_name): print('Save image') robot.camera.latest_image.save(file_name, 'JPEG')
- Мы отправляем изображение в Google Vision и анализируем результат как текст для вектора.
def detect_labels(path): print('Detect labels, image = {}'.format(path)) # Instantiates a client # [START vision_python_migration_client] client = vision.ImageAnnotatorClient() # [END vision_python_migration_client] # Loads the image into memory with io.open(path, 'rb') as image_file: content = image_file.read() image = types.Image(content=content) # Performs label detection on the image file response = client.label_detection(image=image) labels = response.label_annotations res_list = [] for label in labels: if label.score > 0.5: res_list.append(label.description) print('Labels: {}'.format(labels)) return ', or '.join(res_list)
- Затем мы отправляем текст в вектор и заставляем его сообщать результат.
def robot_say(text): print('Say {}'.format(text)) robot.say_text(text)
- Наконец, мы собрали все шаги вместе.
def analyze(): stand_by() show_camera() robot_say('My lord, I found something interesting. Give me 5 seconds.') time.sleep(5) robot_say('Prepare to take a photo') robot_say('3') time.sleep(1) robot_say('2') time.sleep(1) robot_say('1') robot_say('Cheers') save_image(image_file) show_image(image_file) time.sleep(1) robot_say('Start to analyze the object') text = detect_labels(image_file) show_image(image_file) robot_say('Might be {}'.format(text)) close_camera() robot_say('Over, goodbye!')
- Мы хотим, чтобы Вектор произвольно активировал действие обнаружения, поэтому мы ждем случайное время (от 30 секунд до 5 минут) для следующего обнаружения.
def main(): while True: connect_robot() try: analyze() except Exception as e: print('Analyze Exception: {}', e) disconnect_robot() time.sleep(random.randint(30, 60 * 5))
- Когда Вектор успешно активирует действие обнаружения, вы должны увидеть журналы:
2019-02-17 21:55:42,113 anki_vector.robot.Robot WARNING No serial number provided. Automatically selecting 009050ae Connect to Vector... 2019-02-17 21:55:42,116 anki_vector.connection.Connection INFO Connecting to 192.168.1.230:443 for Vector-M2K2 using /Users/gaolu.li/.anki_vector/Vector-M2K2-009050ae.cert 2019-02-17 21:55:42,706 anki_vector.connection.Connection INFO control_granted_response { } Show camera Say My lord, I found something interesting. Give me 5 seconds. Say Prepare to take a photo Say 3 Say 2 Say 1 Say Cheers Save image Show image = /Workspace/labs/Anki-Vector-AI/resources/latest.jpg Display image on Vector's face... Say Start to analyze the object Detect labels, image = /Workspace/labs/Anki-Vector-AI/resources/latest.jpg Labels: [mid: "/m/08dz3q" description: "Auto part" score: 0.6821197867393494 topicality: 0.6821197867393494 ] Show image = /Workspace/labs/Anki-Vector-AI/resources/latest.jpg Display image on Vector's face... Say Might be Auto part Close camera Say Over, goodbye! 2019-02-17 21:56:12,460 anki_vector.connection.Connection INFO control_lost_event { } 2019-02-17 21:56:12,460 anki_vector.robot.Robot WARNING say_text cancelled because behavior control was lost 2019-02-17 21:56:12,461 anki_vector.util.VisionComponent INFO Delaying disable_all_vision_modes until behavior control is granted 2019-02-17 21:56:12,707 anki_vector.connection.Connection INFO control_granted_response { } Vector disconnected
Вы можете найти последнюю фотографию, которую Вектор использует для задержания в resources/latest.jpg
.