Anki Vector - домашний робот с интерактивной технологией AI.

Что ж, я купил этого человечка 10 февраля 2019 года, если вам нужен питомец-робот и вы хотите заняться программированием на нем искусственного интеллекта, то я настоятельно рекомендую вам приобрести Anki Vector.

Я создаю этот проект, чтобы поделиться своими кодами и документами.



unbug / Anki-Vector-AI
Anki Vector AI ++. Участвуйте в разработке unbug / Anki-Vector-AI, создав учетную запись на GitHub. github.com



Обнаружение объектов с помощью вектора

Эта программа позволяет Vector обнаруживать объекты с помощью своей камеры и сообщать нам, что она нашла.

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

Вот несколько демонстрационных видеороликов:

  1. Вектор обнаружил часы на моем столе.

  1. Вектор обнаружил медведя в альбоме моего телефона.

  1. Вектор обнаружил на моем столе игровой контроллер.

Что ж, посмотрим, как это сделать.

Запустите код самостоятельно

  1. Установите Vector Python SDK. Вы можете протестировать SDK, запустив любой из примеров из anki / vector-python-sdk / examples / tutorials /
  2. Настройте свою учетную запись Google Vision. Затем выполните Быстрый старт, чтобы протестировать API.
  3. Клонировать этот проект в локальный. Требуется Python 3.6+.
  4. Не забудьте указать в переменной среды Google Vision GOOGLE_APPLICATION_CREDENTIALS путь к файлу JSON, который содержит ключ вашей учетной записи службы. например export GOOGLE_APPLICATION_CREDENTIALS="/Workspace/Vector-vision-62d48ad8da6e.json"
  5. Убедитесь, что ваш компьютер и Vector находятся в одной сети Wi-Fi. Затем запустите python3 object_detection.py.
  6. Если вам повезет, Vector запустит первое обнаружение объекта, он скажет: «Милорд, я нашел кое-что интересное. Дай мне 5 секунд ».

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

  1. Подключитесь к Vector с enable_camera_feed=True, потому что нам нужен API anki_vector.camera.
robot = anki_vector.Robot(anki_vector.util.parse_command_args().serial, enable_camera_feed=True)
  1. Нам нужно будет показать то, что 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()
  1. Мы сохраним снимок с камеры Vector и сохраним его позже, чтобы отправить в Google Vision.
def save_image(file_name):
    print('Save image')
    robot.camera.latest_image.save(file_name, 'JPEG')
  1. Мы отправляем изображение в 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)
  1. Затем мы отправляем текст в вектор и заставляем его сообщать результат.
def robot_say(text):
    print('Say {}'.format(text))
    robot.say_text(text)
  1. Наконец, мы собрали все шаги вместе.
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!')
  1. Мы хотим, чтобы Вектор произвольно активировал действие обнаружения, поэтому мы ждем случайное время (от 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))
  1. Когда Вектор успешно активирует действие обнаружения, вы должны увидеть журналы:
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.