Привет, Хабр! Весной 2019 года прошел очередной Think Developers Workshop, на котором все желающие могли собрать картонного робота TJBota под управлением IBM Watson Services. Под катом находится подробная инструкция, из чего и как собрать такого робота, полезные ссылки и простейшие рецепты, демонстрирующие некоторые когнитивные возможности сервисов Watson, а также небольшой анонс двух июльских семинаров о Watson Services в московском офисе IBM.

image


IBM Watson services – это когнитивная система, которая умеет обрабатывать естественный язык, распознавать образы и обучаться. Для удобного использования этих сервисов в любом приложении существует API.

TJBot – это проект с открытым исходным кодом, призванный помочь получить доступ к Watson services. Это робот, которого может сделать каждый из raspberry pi и готового искусственного интеллекта. Оживить TJBotа можно с помощью рецептов.

Рецепты – это пошаговые инструкции, которые помогут подключить TJBotа к сервисам Watson, таким как Speech to Text, Visual Recognition и Language Translator. Рецепты разработаны на основе Raspberry Pi.

Что необходимо для TJBotа


  • Raspberry Pi 3 + SD-карта с предустановленной ОС
  • USB-микрофон
  • Bluetooth-динамик или динамик с 3.5-мм. аудио разъёмом
  • Сервопривод
  • NeoPixel RGB LED (8мм)
  • Проводки мама-мама и папа-мама
  • Raspberry Pi Camera
  • Блок питания
  • Корпус (можно распечатать на 3D-принтере или вырезать лазером из картона. Необходимые макеты лежат здесь)



Инструкцию по сборке корпуса можно найти здесь.

Схема подключения диода и сервопривода к плате на картинке ниже.

image

Сборка корпуса происходит «вокруг» платы, поэтому заранее необходимо записать ОС на карту памяти.

Проще всего установить NOОBS, но нам подойдёт и любой другой линукс. Перед установкой NOOBS форматируем карту памяти, скачиваем архив с установочными файлами и экспортируем их на компьютер. Далее необходимо перенести файлы из папки NOOBS на карту памяти. При первом запуске raspberry (с предварительно вставленной картой памяти) откроется меню установки ОС. Подробную инструкцию можно найти здесь.

Программные приготовления


Первым делом нужно установить пакеты:

curl -sL http://ibm.biz/tjbot-bootstrap | sudo sh –

Теперь скачиваем готовые рецепты с гитхаба:

git clone https://github.com/ibmtjbot/tjbot.git

Переходим в директорию с рецептом:

cd tjbot / recipes / speech_to_text

В этой папке находится конфигурационный файл config.js и файл с выполняемым сценарием stt.js.

Устанавливаем npm:

sudo apt-get install npm

Подключение Watson services


Чтобы использовать сервисы Watson, нужно проделать следующие шаги.

Переходим на этот сайт.

image

Регистрируемся и переходим в каталог. В каталоге ищем «speech to text». Speech to text – это сервис, который используется для перевода речи в текст. Доступ к API можно найти здесь.

image

Text to speech и Visual Recognition также понадобятся, когда мы будем работать с распознаванием изображений. Кликаем на speech to text, попадаем на страничку с описанием этого компонента и планами использования.

image

Бесплатного плана нам хватит. Нажимаем на create, далее в меню слева переходим в Service Credentials.

image

Отсюда необходимо скопировать credentials и APIKEY и вставить их в файл config.js.

// Create the credentials object for export
exports.credentials = {};

// Watson Speech to Text
// https://www.ibm.com/watson/services/speech-to-text/
exports.credentials.speech_to_text = {
  "apikey": "...",
  "iam_apikey_description": "...",
  "iam_apikey_name": "...",
  "iam_role_crn": "...",
  "iam_serviceid_crn": "...",
  "url": "https://gateway-lon.watsonplatform.net/speech-to-text/api"
};

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

exports.credentials.[ text_to_speech/visual_recognition/speech_to_text ] = { … };

Оживление TjBota


Рассмотрим файл с исполняемым ботом скриптом stt.js. В нём есть готовая функция diskoParty() для проверки работы бота и без использования Watson сервисов. Эта функция заставляет диод бота мигать разными цветами.

function discoParty() {
    for (i = 0; i < 30; i++) {
        setTimeout(function() {
            var randIdx = Math.floor(Math.random() * tjColors.length);
            var randColor = tjColors[randIdx];
            tj.shine(randColor);
        }, i * 250);
    }
}

discoParty();

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

Запустим скрипт:

sudo node stt.js

Скажите боту «turn the light blue», чтобы он переключил цвет диода на голубой, «turn the light on» для включения диода или же «turn the light off» для выключения. Поддерживаемые цвета для распознавания (пока поддерживается только английская речь): yellow, green, orange, purple, magenta, red, blue, aqua и white.

TjBot имеет достаточно много базовых функций. Например, для проверки сервопривода вы можете использовать функцию tj.wave(), которая заставляет бота поприветствовать вас взмахом ручки. Эти функции с короткими описаниями можно найти здесь.

Рассмотрим теперь следующий сценарий, использующий сразу и visual recognition и text to speech.

Text to speech – это сервис, который преобразовывает печатный текст в речь с помощью различных голосов, тональностей и языков. Его API можно найти по следующей ссылке. Сервис visual recognition позволяет описать, что изображено на картинке. Он распознает лица людей с определением их примерного возраста и пола, продукты питания, блюда, предметы и умеет искать схожие изображения. API этого сервиса можно найти здесь. С помощью этих сервисов мы научим бота видеть и говорить. На основе полученного с камеры снимка, Watson сервисы (visual recognition) в качестве ответа отправят нам json-объект с тегами изображения, а text to speech поможет их озвучить.

Первым делом, создаем credentials на сайте cloud.ibm.com. Копируем их и вставляем в конфигурационный файл config.js.

Далее редактируем исполняемый скрипт stt.js. Находим в нём следующие строчки:

// these are the hardware capabilities that our TJ needs for this recipe
var hardware = ['led', 'microphone'];

В массиве hardware прописаны используемые устройства бота. Если мы захотим использовать в скрипте сервопривод, необходимо будет подписать в массив «servo», если нам понадобится камера, то добавим в массив «camera», для использования колонки подпишем «speaker».
Итак, наш сценарий будет использовать колонку и камеру, соответственно, подписываем это в массив hardware.

// these are the hardware capabilities that our TJ needs for this recipe
var hardware = ['led', 'servo', 'camera', 'speaker', 'microphone'];

// set up TJBot's configuration
var tjConfig = {
    log: {
        level: 'verbose'
    },
    speak: {
        language: 'en-US', // see TJBot.prototype.languages.speak
        voice: undefined, // use a specific voice; if undefined, a voice is chosen based on robot.gender and speak.language
        speakerDeviceId: "plughw:0,0" // plugged-in USB card 1, device 0; see aplay -l for a list of playback devices
    },
    listen: {
        microphoneDeviceId: "plughw:1,0", // plugged-in USB card 1, device 0; see arecord -l for a list of recording devices
        inactivityTimeout: -1, // -1 to never timeout or break the connection. Set this to a value in seconds e.g 120 to end connection after 120 seconds of silence
        language: 'en-US' // see TJBot.prototype.languages.listen
    },
};

Из базовых функций tj-библиотеки нам понадобятся функции tj.see() и tj.speak().

Функция tj.see() создает фотографию (объект сохраняется в папке tmp), отправляет ее в облако с Watson сервисами, анализирует изображение и выдает json-объект, состоящий из тегов – слов, описывающих фотографию (можно выбрать разные описания и степени уверенности) и процент надежности этих тегов. Будем выводить содержание ответа сервисов в консоль.

Функция tj.speak() умеет превращать текст с помощью Watson сервисов в звуковой файл, а затем воспроизводить его. Также, если с помощью сервисов Watson на фотографии будет обнаружен человек, то TJBot махнет ручкой.

// instantiate our TJBot!
var tj = new TJBot(hardware, tjConfig, credentials);

tj.see().then(function(objects){
    var tags = objects.map(function(object){
        return object.class;
    });
    if (tags.includes('person')){
        tj.wave();
    }
    console.log(tags);
    for(var i=0;i<tags.length;i++){
        tj.speak(tags[i]);
    }
});

Данный рецепт показывает, как легко использовать Watson сервисы в своём проекте. Краткое описание этих сервисов и ссылки на них уже были в этой статье. Попробовать все Watson сервисы можно бесплатно.

Также совсем скоро в московском офисе IBM пройдут семинары, на которых вы сможете познакомиться с другими возможностями Watson services.

9 июля 2019 года пройдёт практический семинар «Unveil AI Blackbox with IBM Watson OpenScale», посвященный новому облачному продукту — Watson OpenScale. На этом мероприятии вы сможете познакомиться с принципами работы нейронных сетей, попробуете создать и обучить нейронную сеть и протестировать её с помощью платформы Watson AI OpenScale. На мероприятие необходимо предварительно зарегистрироваться по этой ссылке.

10 июля 2019 года состоится семинар «Распознавание изображений и видео в облаке IBM». На этом семинаре вы сможете узнать о том, как с помощью Watson Studio внедрить искусственный интеллект в ваше приложение. Подробное описание мероприятия и ссылка для регистрации здесь.

Комментарии (5)


  1. orsoft
    01.07.2019 22:59

    Добрый день!

    А подскажите пожалуйста как согласуется это:

    IBM Watson services – это когнитивная система, которая умеет обрабатывать естественный язык, распознавать образы и обучаться.

    И вот это:
    Поддерживаемые цвета для распознавания (пока поддерживается только английская речь): yellow, green, orange, purple, magenta, red, blue, aqua и white


    И собственно как в Raspberry PI запихнуть обучаемую нейросеть?
    Если бы в требованиях к проекту стояло «WiFi» вопросов бы не было. Но как будет «учиться» столь маленький бот?


    1. algotrader2013
      01.07.2019 23:38

      Строчка же все объясняет)
      "url": "https://gateway-lon.watsonplatform.net/speech-to-text/api"


    1. xapundel
      02.07.2019 17:34

      Добрый,
      в целом если разбить на составляющие, то сам Watson это бренд над достаточно большим набором сервисов (Watson Speech To Text (STT), Watson Text To Speech(TTS), Watson conversation, Watson studio, Watson image recognition ...). В зависимости от задач выбирается определенный набор. В данном случае участвует STT, TTS и Watson conversation. STT и TTS могут обучаться. Для этого есть специальный REST API на который необходимо отправить корректно ли отработал сервис и какой результат ожидался. Хотя по моему данный фидбек будет каплей в море. Если использовать сервисы в промышленных масштабах, то делается отдельная инсталляция сервиса, со своими обособленными моделями. А если хочется сделать что-то свое, то отлично подойдет Watson Studio. Тут тебе jupyter, zeppelin, R Studio, pipeline моделей и ускорение на GPU. Сам диалог в данном открытом проекте не самообучается, он основан на древовидных цепочках бесед(JSON, XML). Добавить их динамическое добавление не составит труда, но обычно это делается под определенные сценарии (например служба поддержки клиентов банка).

      Думаю WiFI не указали так как он уже встроен в raspberry pi. В целом есть проекты где дообучение моделей происходит на самих устройствах, но в этом случае имеет смысл использования fog computing и других устройств(например Jetson TX2, Jetson nano).


  1. sepulkary
    02.07.2019 07:23

    Хочу заметить, что если вы хотите купить что-то готовое, то прямо сейчас на Kickstarter идет краудфандинговая кампания похожего устройства под названием Chatterbox на базе Mycroft AI.


  1. ukrazzz
    02.07.2019 09:14
    +1

    image