Все про модуль розпізнавання голосу EasyVR (ex VRbot)

Копаніе в інтернетах показало, що як таких VRBot'ів вже не існує і вивело мене на сайт їх виробника і наступника VeeaR. Наступником VRBot став модуль, який практично не відрізняється від свого попередника — EasyVR. Також, з'явилася «крутіша» його версія — SmartVR, яка дозволяла писати аж свої програми для якоїсь там вбудованої віртуальної машини. Але для SmartVR потрібно було допилювати хоч і небагато, але зовнішнє обважування (або купувати дорогу плату розробника), тому для початку, дуже вагаючись, я замовив пару EasyVR на «поколупати», навіть і не думаючи, що мої колупання потім зайдуть так далеко …
Після того, як модулі мені прийшли, я почав грати з ними. Поставив штатний софт, підключив, навчав, подивився можливості. Звичайно, функціонал цих модулів з коробки досить вузький - розпізнавання деякої кількості команд управління роботом (більше вони, ІМХО, ні для чого не годяться), зашитих намертво в прошивку кількома європейськими мовами + можливість додати до 32 своїх власних команд (то, навіщо модулі і замовлялися). Також, була дуже приваблива можливість зробити хату-говорильню - прошити в модуль набори звуків, які потім можна було б відтворювати через ньогояк відповіді. Розпізнавання зашитих команд було «людинонезалежним», тобто, за фактом, модулю було все одно хто і яким голосом називає команди - він їх впевнено розпізнавав (тільки потрібно було забезпечити правильну вимову). Користувальницькі команди вимагали спочатку навчання під конкретного користувача. Ще існувала можливість розпізнавання конкретної людини за характеристиками голосу - "голосовий пароль", що цілком непогано працювало і теж було досить цікавою фішкою.
Все начебто було чудово, але мене дуже хвилювало питання: «чому для SmartVR можна писати свої власні програми, а для EasyVR не можна?» І чорт мене смикнув розкопати всю цю кухню глибше. Почав я з того, що з'ясував такий момент - обидва модулі працюють на абсолютно однакових чіпах, RSC-4128 компанії Sensory. Щось із почутого колись давно підказувало мені, що чіп хороший, придатний, стабільний і використовувався в купі всяких роботизованих іграшок типу Furby. Так воно й виявилось. На сайті розробника з великими труднощами були знайдені і викачані різні доки - даташит на чіп, опис технологічних бібліотек, СДК, приклади і багато іншого барахла. Після вивчення всього добра я закохався в цей чіп :) Його можливості, фактично, виявилися унікальними: інших спеціалізованих однокристальних рішень (крім старшого сімейства цієї ж фірми) ніби й не існувало. Отже, за порядком.
FluentChip
Це набір об'єктних файлів, які містять у собі чарівний функціонал синтезу і розпізнавання, т.к. чіп, по суті, гола болванка з периферією і сам нічого не вміє. Реалізовано наступний функціонал:
- Відтворення звуку: за допомогою спеціальної програми QuickSynthesys можна готувати бібліотеки звуків, слів тапропозицій із них; музику для вбудованого MIDI-секвенсору За допомогою простих бібліотечних функцій можна відтворювати звуки, слова, мідішки зі своїми інструментами і навіть зі словами поверх музики; можна відтворювати DTMF, їсти та посилати токени SonicNet у будь-якій комбінації. Є дуже хороший стиск для мови - SX.
- Запис звуку: власне, запис звуку з подальшим відтворенням. Нам актуально, т.к. для цього потрібна особлива навісна оперативна пам'ятка або флешка пристойного об'єму, яку до модулів ніяк не підключити.
- Розпізнавання мови: окрема розмова. Про цей функціонал поговоримо нижче.
- SonicNet: дозволяє посилати через динамік і слухати мікрофоном спеціальні посилки-токени, які не чують людиною і таким чином спілкуватися декільком пристроям між собою.
- «Анімація»: набір функцій для інтерактивного зворотного зв'язку. Детектор і провісник ритму, детектор висоти тону або ноти, «синхронізатор руху губ» як заздалегідь зашитих звукових бібліотек, так і працює в реальному часі з мікрофона.
- SoundSource: використовуючи трохи обважування, можливо спорудити «електронні вуха», детектувати положення джерела звуку і, наприклад, повертати пристрій або його «голову» до того, хто говорить. Нам, на жаль, принадами скористатися не вдасться через обмежену кількість виведених GPIO на модулі.
- Утилітарні функції, типу функцій налаштування таймерів, доступу до буферів в оперативній пам'яті, управління живленням, генерації затримок та ін.Є готовий софтовий драйвер UART.
T2SI використовує досить складний та цікавий підхід. Спочатку на комп'ютері у спеціальній програмі (QuickT2SI) формуються словники шляхом вбивання потрібних слів чи фраз з клавіатури. Потім програма, залежно від вибраної мовної моделі, проводить перетворення цих слів і фраз до фонем (за необхідності результат можна коригувати, аж до ручного набору слів фонемами IPA). Після цього можна зробити тонке налаштування розпізнавання та сформувати об'єктні файли з даними для вашого набору слів, які мають бути включені до програми. Таких наборів може бути дуже багато, а потрібний просто вибирається під час виклику бібліотечної функції розпізнавання. Цей метод складний технічно, використовуєакустичні моделі фонем для різних мов,нейросети для їх розпізнавання таприховану марківську модель (HMM) для статистичного аналізу та вгадування слів. Сіль у тому, що найскладніша робота — побудова та навчання нейромережі та формування прихованої марківської моделі — відбувається на комп'ютері, а пристрій зашивається вже готова нейромережа (у бібліотеці на чіпі є софтовий нейропроцесор і аналізатор HMM). Готова нейромережа і модель містить лише потрібні стани і фонеми для набору, тому виходить дуже компактна і швидка. Результат роботи цього методу, звісно, вражає. Виходить дуже точне розпізнавання навіть у великих словниках і з різними «говорителями».Але метод має для нас один дуже великий недолік. Немає моделі української мови: ( Причому принципово немає жодних обмежень, щоб її зробити, але розробнику, походу, це не особливо потрібно. Тим не менш, є можливість використовувати більш-меншсхожі моделі іспанської/італійської мови з деякими обмеженнями і набирати потрібні слова відразу фонемами, але це не так зручно, хоча якість розпізнавання українських слів, запиляних таким чином, досить непогана.
Другий метод -SD - заснований на вирахуванні обгинальних слова/фрази і, можливо, ще якоїсь інформації, типу FFT і генерації «патерна» - відбитка, що відповідає цьому слову або фразі. Очевидно, це якийсь векторний масив, на кшталт патернів, що описують відбиток пальця після векторного аналізу. Тільки тут, як вихідна інформація виступає не картина папілярного візерунка, а захоплена звукова інформація. Кожен патерн займає у пам'яті суворо певну кількість байт — 256. З кількох патернів у процесі навчання комбінується «шаблон» (теж 256 байт), який потім зберігається у пам'яті, присвоюється до якогось словника й надалі можна запустити за цим словником розпізнавання.На практиці ж, при невеликому словнику з різними вимові словами, система здатна точно розпізнавати слова, навіть якщо їх говорить інша людина, що є дуже і дуже добре! На цьому ж принципі побудована іSV - верифікація мовця, "голосовий пароль". Тільки різниця в тому, що інформація векторизується за іншими ознаками, і більша увага приділяється конкретним характеристикам голосу. Тому й виходить «пароль». А технічно воно працює так само, як і SD. Можливо запускати одночасно T2SI та SD/SV розпізнавання за різними наборами. Бібліотечні функції досить прості і зрозумілі, є купа прикладів, читабельний хелп і апноути. Чи не потонете. Для збереження шаблонів потрібна якась пам'ять. У комплекті бібліотеки йде кілька модулів для роботи з різнимитипами навісної пам'яті. Їх досить просто підключити та налаштувати в конфігураційному файлі, а бібліотека візьме на себе все інше. На наших модулях встановлена для цього I2C пам'ять 24LC64, яка якраз і дозволяє зберігати 32 шаблони. Драйвер для I2C пам'яті у постачанні бібліотеки є. Навіть із вихідником. Приклади роботи також є.
Середовище розробки
Модуль EasyVR

Ось таким чином ми отримали досить потужний і недорогий інструмент для роботи з натуральною мовою, який можемо ліпити як захочемо, не обмежуючись рамками прошивки виробника. Можна робити все, на що вистачить фантазії :) Тим більше, залізниця та технології справді унікальні, цікаві та дуже якісно вилізані виробником (хлопці із Sensory – молодці).
У вкладенні ви знайдете посилання на архів з усім необхідним (архів із софтом та пігулками унікальний і більше ви його ніде не дістанете): 1. Інструментарій Sensory останніх версій: QuickT2SI 3.1.7 (з лікувальним), QuickSynthesis 5.2.1, бібліотеки FluentChip 3.1.6 з прикладами та всією документацією, у тому числі на чіп та залізо. 2. Інструментарій Phyton: Project-SE 1.22.00 (з лікувальним) 3. Інструментарій VeeaR: VeeLoader.exe та остання прошивка EasyVR, якщо захочеться повернути штатний функціонал