Там отдельного образа нету - всё крутится на той же Малинке, на которой работает Мажордомо.
Ставилось с гита
https://github.com/shivasiddharth/GassistPi. Сейчас правда автор поменял концепцию и отказался от сноубоя, но если надо - то старая версия у меня есть
В результате получался работающий на английском ассистент, к которому можно было добавлять свои действия
Далее по подсказке с форума был поставлен пакет под питон
http://pythono.ru/speech-recognition-python/
На сайте
https://snowboy.kitt.ai/ были получены персональные модели под ключевую фразу Привет Сара, скрипт на питоне был переписан под взаимодействие на русском, ну в принципе и всё
Файл snowboy.py получился таким
Код: Выделить всё
import snowboydecoder
import sys
import signal
import RPi.GPIO as GPIO
import time
import os
import subprocess
import speech_recognition as sr
import urllib.request
subprocess.Popen(["aplay", "/home/pi/GassistPi/sample-audio-files/customwakeword.wav"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
interrupted = False
#Add your custom models here
models = ['/home/pi/GassistPi/src/resources/sarah.pmdl', '/home/pi/GassistPi/src/resources/sarah_hella.pmdl']
def signal_handler(signal, frame):
global interrupted
interrupted = True
def interrupt_callback():
global interrupted
return interrupted
def detected():
snowboydecoder.play_audio_file(snowboydecoder.DETECT_DING)
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
command=r.recognize_google(audio, language="ru-RU")
link='http://127.0.0.1/command.php?qry=' + urllib.parse.quote_plus(command)
f=urllib.request.urlopen(link)
# capture SIGINT signal, e.g., Ctrl+C
signal.signal(signal.SIGINT, signal_handler)
sensitivity = [0.5]*len(models)
detector = snowboydecoder.HotwordDetector(models, sensitivity=sensitivity)
callbacks = [detected, detected]
print('Listening... Press Ctrl+C to exit')
# main loop
# make sure you have the same numbers of callbacks and models
detector.start(detected_callback=callbacks,
interrupt_check=interrupt_callback,
sleep_time=0.03)
detector.terminate()