Tentunya, semua orang memimpikan asisten suaranya, di bawah cut implementasi lain "Jarvis" dari film terkenal.
Untuk waktu yang lama saya tidak meninggalkan pikiran tentang "Jarvis" saya dan kontrol peralatan di rumah dengan suara saya. Dan akhirnya, tangan-tangan mencapai penciptaan keajaiban ini. Saya tidak harus berpikir tentang "otak" untuk waktu yang lama, Raspberry Pi sangat cocok.Jadi, besi:- Raspberry pi 3 model b
- USB Logitech Camera
Implementasi
Asisten kami akan bekerja berdasarkan prinsip Alexa / Hub:- Aktifkan offline untuk kata tertentu
- Kenali tim di cloud
- Jalankan perintah
- Laporkan kemajuan atau informasikan informasi permintaan
Karena kamera saya didukung di luar kotak, saya tidak perlu repot dengan driver, jadi kami segera pergi ke bagian perangkat lunak.Aktivasi Offline
Aktivasi akan terjadi menggunakan CMU Sphinx, dan semuanya akan baik-baik saja, tetapi pengenalan di luar kotak sangat lambat, lebih dari 10 detik, yang sama sekali tidak cocok, untuk menyelesaikan masalah Anda perlu menghapus kamus kata-kata yang tidak perlu.Instal semua yang Anda butuhkan:pip3 install SpeechRecognition
pip3 install pocketsphinx
selanjutnyasudo nano /usr/local/lib/python3.4/dist-packages/speech_recognition/pocketsphinx-data/en-US
/pronounciation-dictionary.dict
hapus semua kecuali Jarvis yang kita butuhkan: jarvis JH AA R V AH S
Sekarang pocketsphinx mengenali dengan cepat.Pengenalan ucapan
Pada awalnya ada ide untuk menggunakan layanan Google, selain itu dukungannya ada di SpeechRecognition. Tetapi ternyata, Google mengambil uang untuk ini dan tidak bekerja dengan fisik. orang.Untungnya, Yandex juga memberikan kesempatan seperti itu, gratis dan sangat sederhana.Daftar, dapatkan KUNCI API. Semua pekerjaan bisa dilakukan oleh 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»
Sintesis ucapan
Di sini Yandex akan membantu kami lagi. Kami mengirim teks sebagai tanggapan, kami menerima file dengan teks yang disintesiscurl «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
Jarvis
Menyatukan semuanya dan mendapatkan skrip seperti itu.
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('- ')
Apa yang sedang terjadi di sini. Kami memulai loop tanpa akhir, arecord'om kami merekam tiga detik dan mengirim sphinx untuk pengakuan jika kata "jarvis" ditemukan dalam file if jarvis_on():
memutar file notifikasi aktivasi yang direkam sebelumnya.Sekali lagi kami merekam 3 detik dan mengirimkannya ke Yandex, sebagai tanggapan kami mendapatkan tim kami. Selanjutnya, kami melakukan tindakan berdasarkan perintah.Itu saja. Skrip eksekusi dapat menghasilkan banyak sekali.Kasus penggunaan
Sekarang beberapa contoh penggunaan nyata sayaRona Philips
Instalpip install phue
Di aplikasi Hue, atur IP statis:
Jalankan:
import sys
from phue import Bridge
b = Bridge('192.168.0.100')
print (b.get_scene())
Kami menulis ID dari sirkuit yang diperlukan, dari bentuk "470d4c3c8-on-0"Versi terakhir dari skrip:
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])
Dalam jarvis tambahkan: 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
LG TV
Kami mengambil skrip dari sini . Setelah peluncuran pertama dan memasukkan kode penyandingan, kode itu sendiri tidak berubah, sehingga Anda dapat memotong bagian ini dari skrip dan hanya menyisakan satu kontrol.Dalam jarvis tambahkan:
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
Radio
sudo apt-get install mpg123
Dalam jarvis tambahkan:
if (command_key in ['', ‘ ’,’ ’]):
os.system(‘mpg123 URL')
continue
Anda juga dapat menyiapkan pembuat rumah dan mengelola semuanya melalui Siri, jika Anda tidak berteriak kepada Jarvis.Adapun kualitas pengenalan ucapan, bukan Alexa tentu saja, tetapi pada jarak hingga 5 meter persentase hit pasti layak. Masalah utama adalah bahwa pidato dari TV / speaker direkam bersama dengan perintah dan mengganggu pengakuan.Itu saja, terima kasih.