TJBOT как иллюстрация IBM Watson services

Привет, Хабр! Весной 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-принтере или вырезать лазером из картона. Необходимые макеты лежат здесь)


_gntqzyt-xiwhicse9bgy6gyksy.png

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

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

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


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

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

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

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

© Habrahabr.ru