بالتأكيد ، يحلم الجميع بمساعده الصوتي ، في ظل قطع تنفيذ آخر لـ "جارفيس" من الفيلم الشهير.
لم أترك لفترة طويلة فكرة "جارفيس" الخاصة بي والتحكم في المعدات في المنزل بصوتي. وأخيرًا ، وصلت الأيدي إلى خلق هذه المعجزة. لم يكن عليّ التفكير في "العقول" لفترة طويلة ، فإن Raspberry Pi يناسب تمامًا.لذا ، الحديد:- التوت بي 3 نموذج ب
- كاميرا USB لوجيتك
التنفيذ
سيعمل مساعدنا على مبدأ Alexa / Hub:- تنشيط دون اتصال بكلمة محددة
- تعرف على فريق في السحابة
- أمر تشغيل
- الإبلاغ عن التقدم أو إبلاغ معلومات الطلب
لأن الكاميرا الخاصة بي مدعومة من خارج الصندوق ، لم يكن عليّ أن أزعج السائقين ، لذلك نذهب على الفور إلى جزء البرنامج.التنشيط دون اتصال
سيحدث التنشيط باستخدام CMU Sphinx ، وسيكون كل شيء على ما يرام ، ولكن التعرف على الصندوق بطيء جدًا ، أكثر من 10 ثوانٍ ، وهو غير مناسب تمامًا ، لحل المشكلة التي تحتاجها لمسح قاموس الكلمات غير الضرورية.قم بتثبيت كل ما تحتاجه:pip3 install SpeechRecognition
pip3 install pocketsphinx
كذلكsudo nano /usr/local/lib/python3.4/dist-packages/speech_recognition/pocketsphinx-data/en-US
/pronounciation-dictionary.dict
حذف كل شيء باستثناء جارفيس نحتاج: jarvis JH AA R V AH S
الآن يتعرف pocketsphinx بسرعة كبيرة.التعرف على الكلام
في البداية كانت هناك فكرة لاستخدام خدمة Google ، إلى جانب دعمها في SpeechRecognition. ولكن كما اتضح ، فإن Google تأخذ المال لهذا ولا تعمل مع المادية. الأشخاص.لحسن الحظ ، توفر Yandex أيضًا هذه الفرصة مجانًا وبسيطة للغاية.سجل ، احصل على API KEY. يمكن القيام بجميع الأعمال عن طريق curl'om.curl -X POST -H "Content-Type: audio/x-wav" --data-binary "@file" «https://asr.yandex.net/asr_xml?uuid=ya_uid&key=yf_api_key&topic=queries»
تركيب الكلام
هنا ستساعدنا Yandex مرة أخرى. نرسل النص استجابة نتلقى الملف مع النص المركبcurl «https://tts.voicetech.yandex.net/generate?format=wav&lang=ru-RU&speaker=zahar&emotion=good&key=ya_api_key» -G --data-urlencode "text=text" > file
جارفيس
ضع كل ذلك معًا واحصل على مثل هذا السيناريو.
import os
import speech_recognition as sr
from xml.dom import minidom
import sys
import random
r = sr.Recognizer()
ya_uuid = ''
ya_api_key = ''
def convert_ya_asr_to_key():
xmldoc = minidom.parse('./asr_answer.xml')
itemlist = xmldoc.getElementsByTagName('variant')
if len(itemlist) > 0:
return itemlist[0].firstChild.nodeValue
else:
return False
def jarvis_on():
with sr.WavFile("send.wav") as source:
audio = r.record(source)
try:
t = r.recognize_sphinx(audio)
print(t)
except LookupError:
print("Could not understand audio")
return t == ("jarvis")
def jarvis_say(phrase):
os.system(
'curl "https://tts.voicetech.yandex.net/generate?format=wav&lang=ru-RU&speaker=zahar&emotion=good&key='+ya_api_key+'" -G --data-urlencode "text=' + phrase + '" > jarvis_speech.wav')
os.system('aplay jarvis_speech.wav')
def jarvis_say_good():
phrases = ["", "", "", "", "- ?", ]
randitem = random.choice(phrases)
jarvis_say(randitem)
try:
while True:
os.system('arecord -B --buffer-time=1000000 -f dat -r 16000 -d 3 -D plughw:1,0 send.wav')
if jarvis_on():
os.system('aplay jarvis_on.wav')
os.system('arecord -B --buffer-time=1000000 -f dat -r 16000 -d 3 -D plughw:1,0 send.wav')
os.system(
'curl -X POST -H "Content-Type: audio/x-wav" --data-binary "@send.wav" "https://asr.yandex.net/asr_xml?uuid='+ya_uuid+'&key='+ya_api_key+'&topic=queries" > asr_answer.xml')
command_key = convert_ya_asr_to_key()
if (command_key):
if (command_key in [‘key_word', ‘key_word1’, ‘key_word2']):
os.system(‘’)
jarvis_say_good()
continue
except Exception:
jarvis_say('- ')
ما الذي يحدث هنا. نبدأ حلقة لا نهائية ، arecord'om نسجل ثلاث ثوان ونرسل أبو الهول للتعرف عليها إذا تم العثور على كلمة "jarvis" في الملف if jarvis_on():
تشغيل ملف إعلام التنشيط المسجل مسبقًا.مرة أخرى نسجل 3 ثوانٍ ونرسلها إلى Yandex ، ردًا على ذلك نحصل على فريقنا. بعد ذلك ، نقوم بتنفيذ الإجراءات بناءً على الأمر.هذا كل شئ. يمكن أن تأتي نصوص التنفيذ بالكثير.حالة الاستخدام
الآن بعض الأمثلة على استخدامي الحقيقيفيليبس هوى
التثبيتpip install phue
في تطبيق Hue ، قم بتعيين IP ثابت:
تشغيل:
import sys
from phue import Bridge
b = Bridge('192.168.0.100')
print (b.get_scene())
نكتب معرف الدوائر اللازمة ، من النموذج "470d4c3c8-on-0"النسخة النهائية من البرنامج النصي:
import sys
from phue import Bridge
b = Bridge('192.168.0.100')
if (sys.argv[1] == 'off'):
b.set_light([1,2,3],'on', False)
else:
b.activate_scene(1,sys.argv[1])
يضاف في جارفيس: if (command_key in [' ', ' ', '']):
os.system('python3 /home/pi/smarthome/hue/hue.py a1167aa91-on-0')
jarvis_say_good()
continue
if (command_key in [' ', ' ']):
os.system('python3 /home/pi/smarthome/hue/hue.py ac637e2f0-on-0')
jarvis_say_good()
continue
if (command_key in [' ', ' ']):
os.system('python3 /home/pi/smarthome/hue/hue.py "off"')
jarvis_say_good()
continue
تلفزيون ال جي
نأخذ النص من هنا . بعد الإطلاق الأول وإدخال رمز الإقران ، لا يتغير الرمز نفسه ، لذا يمكنك قطع هذا الجزء من البرنامج النصي وترك عنصر التحكم فقط.يضاف في جارفيس:
if (command_key in [' ', ' ']):
os.system('python3 /home/pi/smarthome/TV/tv2.py 1')
jarvis_say_good()
continue
if (command_key in [‘ ', '']):
os.system('python3 /home/pi/smarthome/TV/tv2.py 24')
jarvis_say_good()
continue
راديو
sudo apt-get install mpg123
يضاف في جارفيس:
if (command_key in ['', ‘ ’,’ ’]):
os.system(‘mpg123 URL')
continue
يمكنك أيضًا إعداد جسر منزلي وإدارة كل شيء من خلال Siri ، في حالة عدم الصراخ على جارفيس.أما بالنسبة لجودة التعرف على الكلام ، وليس Alexa بالطبع ، ولكن على مسافة تصل إلى 5 أمتار ، فإن النسبة المئوية للضربات المؤكدة مناسبة. المشكلة الرئيسية هي أن الكلام من التلفزيون / السماعات يتم تسجيله مع الأوامر ويتداخل مع الاعتراف.هذا كل شيء ، شكرا.