Распознавание Речи.
-
Планирую делать , так называемый "умный" дом.
Отличная статья связанная с распознаванием речи размещена на сайте - http://raspberrypi.ru/readblog/155/.
Как заставить ПИ понять меня, и выполнить команду я понял.
не понял, как же заставить ПИ по определенному моему звуку, начать распознавать текст?
У автора, я так понял, это делается с помощью адруины,как только автор произносит "Артур", срабатывает событие "старт записи"..
а обойтись только ПИ возможно?
-
Пока наколдовал так:
-- coding: utf-8 --
import urllib2
import json
import os
from time import gmtime, strftimedef speechtotext():
os.system( "arecord -q -d 4 -D hw:1,0 -f S16_LE -c 1 -r 16000 /home/pi/pyri/sounds/record.wav"
os.system( "ffmpeg -loglevel 0 -v 0 -i /home/pi/pyri/sounds/output.wav -ab 192k -y '/home/pi/pyri/sounds/output.flac' ")FileNameTmp = ('/home/pi/pyri/sounds/output.flac') url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium〈=ru-RU" flac=open(FileNameTmp,"rb").read() header = {'Content-Type' : 'audio/x-flac; rate=16000'} req = urllib2.Request(url, flac, header) data = urllib2.urlopen(req) t=data.read() #print t.decode('utf-8') txt=t.decode('utf-8') for i in json.loads(txt)['hypotheses']: k = i.keys() #print i['utterance'] #for j in k: #print i[j] speechtext=i['utterance'] return speechtext
def fetchHTML(url):
req = urllib2.Request(url)
response=urllib2.urlopen(req)
return response.read()def answer():
answer=""
if speechtext.encode('utf8')=="сколько время":
#print ("Точное время "strftime("%H") + " часов " + strftime("%M") + " минут")
answer=("Точное время " + strftime("%H") + " часов " + strftime("%M") + " минут")if speechtext.encode('utf8')=="какая будет погода": output=fetchHTML("http://openweathermap.org/data/2.1/weather/city/%s" % 524901) output1=fetchHTML("http://api.openweathermap.org/data/2.1/forecast/city?%s" % 524901) temp_now = round(json.loads(output)['main']['temp'] - 273.15) weather_now = json.loads(output)['weather'][0]['main'] temp_fut = round(json.loads(output1)['list'][9]['main']['temp'] - 273.15) weather_fut = json.loads(output1)['list'][9]['weather'][0]['main'] answer= ("Погода сейчас: " + str(temp_now) + " градусов " + weather_now.encode('utf8') + " Прогноз: " + str(temp_fut) + " градусов " + weather_fut.encode('utf8')) if speechtext.encode('utf8')=="какие новости": passw="""""" #Сюда вставляем ключ с датамаркет азуры url="""https://api.datamarket.azure.com/Bing/Search/News?$format=json&Query=''&Market='ru-RU'&NewsSortBy='relevance'""" password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() password_manager.add_password(None, url, 'rampage', passw) handler = urllib2.HTTPBasicAuthHandler(password_manager) opener = urllib2.build_opener(handler) urllib2.install_opener(opener) readURL = urllib2.urlopen(url).read() news1=json.loads(readURL)['d']['results'][0]['Title'] news2=json.loads(readURL)['d']['results'][1]['Title'] news3=json.loads(readURL)['d']['results'][2]['Title'] news4=json.loads(readURL)['d']['results'][3]['Title'] answer = (news1 + ". " + news2 + ". " + news3 + ". " + news4 +".") return answer
speechtext=speechtotext()
answer=answer()
print ("Вы сказали: " + speechtext.encode('utf8'))
print ("Ответ: " + answer) -
оно по запуску скрипта стартует запись.. 4 секунды.. конвертит во флак - отправляет в гуглю, и по результату уже выводит время, погоду/прогноз, либо новости..(это в дальнейшем в текст ту спич запилю...
пока у меня главный вопрос.. как бы мне автоматицки стартвоать запись по произношению "кодового" слова...
-
шикарная реализация ! а я вот недавно находил проги по распознованию речи, для Linux, вот я что думаю, там все пишут что они убогие и работают из рук вот плохо но всеже вам ведь нужно чтобы она реагировала только на 1 команду и запускала Ваш скрипт, я думаю это реализовать реально!
утилиту зовут Julius я думаю без труда в интернете найдете её описание
-
А можно просто в конце той программы(http://raspberrypi.ru/readblog/155/) добавить открытие самой себя, в программе вписать две команды:
робот - открывает другую, но схожую программу со списком команд для робота;
стоп - завершение программы не позволяя открыться новой