Привет, Хабр! Весной 2019 года прошел очередной Think Developers Workshop, на котором все желающие могли собрать картонного робота TJBota под управлением IBM Watson Services. Под катом находится подробная инструкция, из чего и как собрать такого робота, полезные ссылки и простейшие рецепты, демонстрирующие некоторые когнитивные возможности сервисов Watson, а также небольшой анонс двух июльских семинаров о Watson Services в московском офисе IBM.
IBM Watson services – это когнитивная система, которая умеет обрабатывать естественный язык, распознавать образы и обучаться. Для удобного использования этих сервисов в любом приложении существует API.
TJBot – это проект с открытым исходным кодом, призванный помочь получить доступ к Watson services. Это робот, которого может сделать каждый из raspberry pi и готового искусственного интеллекта. Оживить TJBotа можно с помощью рецептов.
Рецепты – это пошаговые инструкции, которые помогут подключить TJBotа к сервисам Watson, таким как Speech to Text, Visual Recognition и Language Translator. Рецепты разработаны на основе Raspberry Pi.
Инструкцию по сборке корпуса можно найти здесь.
Схема подключения диода и сервопривода к плате на картинке ниже.
Сборка корпуса происходит «вокруг» платы, поэтому заранее необходимо записать ОС на карту памяти.
Проще всего установить NOОBS, но нам подойдёт и любой другой линукс. Перед установкой NOOBS форматируем карту памяти, скачиваем архив с установочными файлами и экспортируем их на компьютер. Далее необходимо перенести файлы из папки NOOBS на карту памяти. При первом запуске raspberry (с предварительно вставленной картой памяти) откроется меню установки ОС. Подробную инструкцию можно найти здесь.
Первым делом нужно установить пакеты:
Теперь скачиваем готовые рецепты с гитхаба:
Переходим в директорию с рецептом:
В этой папке находится конфигурационный файл config.js и файл с выполняемым сценарием stt.js.
Устанавливаем npm:
Чтобы использовать сервисы Watson, нужно проделать следующие шаги.
Переходим на этот сайт.
Регистрируемся и переходим в каталог. В каталоге ищем «speech to text». Speech to text – это сервис, который используется для перевода речи в текст. Доступ к API можно найти здесь.
Text to speech и Visual Recognition также понадобятся, когда мы будем работать с распознаванием изображений. Кликаем на speech to text, попадаем на страничку с описанием этого компонента и планами использования.
Бесплатного плана нам хватит. Нажимаем на create, далее в меню слева переходим в Service Credentials.
Отсюда необходимо скопировать credentials и APIKEY и вставить их в файл config.js.
Теперь, если нам захочется добавить ещё какой-нибудь Watson сервис, в конфигурационном файле надо будет добавить на каждый сервис по блоку с apikey и url, обёрнутому в следующую конструкцию:
Рассмотрим файл с исполняемым ботом скриптом stt.js. В нём есть готовая функция diskoParty() для проверки работы бота и без использования Watson сервисов. Эта функция заставляет диод бота мигать разными цветами.
В этом же скрипте есть функция, которая позволяет переключать цвет диода с помощью речи разработчика.
Запустим скрипт:
Скажите боту «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. Находим в нём следующие строчки:
В массиве hardware прописаны используемые устройства бота. Если мы захотим использовать в скрипте сервопривод, необходимо будет подписать в массив «servo», если нам понадобится камера, то добавим в массив «camera», для использования колонки подпишем «speaker».
Итак, наш сценарий будет использовать колонку и камеру, соответственно, подписываем это в массив hardware.
Из базовых функций tj-библиотеки нам понадобятся функции tj.see() и tj.speak().
Функция tj.see() создает фотографию (объект сохраняется в папке tmp), отправляет ее в облако с Watson сервисами, анализирует изображение и выдает json-объект, состоящий из тегов – слов, описывающих фотографию (можно выбрать разные описания и степени уверенности) и процент надежности этих тегов. Будем выводить содержание ответа сервисов в консоль.
Функция tj.speak() умеет превращать текст с помощью Watson сервисов в звуковой файл, а затем воспроизводить его. Также, если с помощью сервисов Watson на фотографии будет обнаружен человек, то TJBot махнет ручкой.
Данный рецепт показывает, как легко использовать Watson сервисы в своём проекте. Краткое описание этих сервисов и ссылки на них уже были в этой статье. Попробовать все Watson сервисы можно бесплатно.
Также совсем скоро в московском офисе IBM пройдут семинары, на которых вы сможете познакомиться с другими возможностями Watson services.
9 июля 2019 года пройдёт практический семинар «Unveil AI Blackbox with IBM Watson OpenScale», посвященный новому облачному продукту — Watson OpenScale. На этом мероприятии вы сможете познакомиться с принципами работы нейронных сетей, попробуете создать и обучить нейронную сеть и протестировать её с помощью платформы Watson AI OpenScale. На мероприятие необходимо предварительно зарегистрироваться по этой ссылке.
10 июля 2019 года состоится семинар «Распознавание изображений и видео в облаке IBM». На этом семинаре вы сможете узнать о том, как с помощью Watson Studio внедрить искусственный интеллект в ваше приложение. Подробное описание мероприятия и ссылка для регистрации здесь.
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-принтере или вырезать лазером из картона. Необходимые макеты лежат здесь)
Инструкцию по сборке корпуса можно найти здесь.
Схема подключения диода и сервопривода к плате на картинке ниже.
Сборка корпуса происходит «вокруг» платы, поэтому заранее необходимо записать ОС на карту памяти.
Проще всего установить 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, нужно проделать следующие шаги.
Переходим на этот сайт.
Регистрируемся и переходим в каталог. В каталоге ищем «speech to text». Speech to text – это сервис, который используется для перевода речи в текст. Доступ к API можно найти здесь.
Text to speech и Visual Recognition также понадобятся, когда мы будем работать с распознаванием изображений. Кликаем на speech to text, попадаем на страничку с описанием этого компонента и планами использования.
Бесплатного плана нам хватит. Нажимаем на create, далее в меню слева переходим в Service Credentials.
Отсюда необходимо скопировать 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)
sepulkary
02.07.2019 07:23Хочу заметить, что если вы хотите купить что-то готовое, то прямо сейчас на Kickstarter идет краудфандинговая кампания похожего устройства под названием Chatterbox на базе Mycroft AI.
orsoft
Добрый день!
А подскажите пожалуйста как согласуется это:
И вот это:
И собственно как в Raspberry PI запихнуть обучаемую нейросеть?
Если бы в требованиях к проекту стояло «WiFi» вопросов бы не было. Но как будет «учиться» столь маленький бот?
algotrader2013
Строчка же все объясняет)
"url": "https://gateway-lon.watsonplatform.net/speech-to-text/api"
xapundel
Добрый,
в целом если разбить на составляющие, то сам 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).