Asisten rumah tangga memerlukan frasa khusus yang disebut kata cepat untuk diaktifkan (misalnya, "OK Google"). EfficientWord-Net adalah mesin pendeteksi kata cepat berdasarkan pembelajaran beberapa kali yang memungkinkan pengembang menambahkan kata cepat khusus ke program mereka tanpa biaya tambahan. Pustaka ini murni ditulis dengan Python dan menggunakan implementasi TFLite Google untuk inferensi waktu nyata yang lebih cepat. Ini terinspirasi oleh Arsitektur Jaringan Siam FaceNet dan bekerja paling baik ketika 3-4 sampel kata cepat dikumpulkan langsung dari pengguna.
File Pelatihan untuk mengakses file pelatihan.
Berikut tautannya:
Makalah Penelitian untuk mengakses makalah penelitian.
Pustaka ini berfungsi dengan Python versi 3.6 hingga 3.9.
Sebelum menjalankan perintah instalasi pip untuk perpustakaan, beberapa dependensi perlu diinstal secara manual:
Pengguna Mac OS M* dan Raspberry Pi mungkin harus mengkompilasi dependensi ini.
Paket tflite tidak dapat dicantumkan di persyaratan.txt, sehingga akan diinstal secara otomatis saat paket diinisialisasi di sistem.
Paket librosa tidak diperlukan untuk kasus inferensi saja. Namun, ketika generate_reference
dipanggil, maka akan diinstal secara otomatis.
Jalankan perintah pip berikut:
pip install EfficientWord-Net
Untuk mengimpor paket:
import eff_word_net
Setelah menginstal paket, Anda dapat menjalankan skrip demo yang ada di perpustakaan (pastikan Anda memiliki mikrofon yang berfungsi).
Akses dokumentasi dari: https://ant-brain.github.io/EfficientWord-Net/
Perintah untuk menjalankan demo:
python -m eff_word_net.engine
Untuk setiap kata cepat baru, perpustakaan memerlukan informasi tentang kata cepat tersebut. Informasi ini diperoleh dari file bernama {wakeword}_ref.json
. Misalnya, untuk wakeword 'alexa', perpustakaan memerlukan file bernama alexa_ref.json
.
File-file ini dapat dibuat dengan prosedur berikut:
Kumpulkan 4 hingga 10 pengucapan kata bangun tertentu yang terdengar unik. Masukkan ke dalam folder terpisah yang tidak berisi apa pun.
Alternatifnya, gunakan perintah berikut untuk menghasilkan file audio untuk kata tertentu (menggunakan API demo IBM neural TTS). Tolong jangan menggunakannya secara berlebihan demi kami:
python -m eff_word_net.ibm_generate
python -m eff_word_net.generate_reference
Nama jalur dari kata bangun yang dihasilkan harus diteruskan ke instance HotwordDetector:
HotwordDetector (
hotword = "hello" ,
model = Resnet_50_Arc_loss (),
reference_file = "/full/path/name/of/hello_ref.json" ,
threshold = 0.9 , # min confidence required to consider a trigger
relaxation_time = 0.8 # default value, in seconds
)
Variabel model dapat menerima instance Resnet_50_Arc_loss atau First_Iteration_Siamese.
Parameter relax_time digunakan untuk menentukan waktu minimum antara dua pemicu. Potensi pemicu apa pun sebelum waktu_relaksasi akan dibatalkan. Detektor beroperasi dengan pendekatan jendela geser, menghasilkan banyak pemicu untuk satu ucapan kata cepat. Parameter relax_time dapat digunakan untuk mengontrol beberapa pemicu; dalam kebanyakan kasus, 0,8 detik (default) sudah cukup.
Perpustakaan telah menetapkan embeddings yang tersedia untuk beberapa kata bangun seperti Mycroft , Google , Firefox , Alexa , Mobile , dan Siri . Jalur mereka sudah tersedia di direktori instalasi perpustakaan.
from eff_word_net import samples_loc
import os
from eff_word_net . streams import SimpleMicStream
from eff_word_net . engine import HotwordDetector
from eff_word_net . audio_processing import Resnet50_Arc_loss
from eff_word_net import samples_loc
base_model = Resnet50_Arc_loss ()
mycroft_hw = HotwordDetector (
hotword = "mycroft" ,
model = base_model ,
reference_file = os . path . join ( samples_loc , "mycroft_ref.json" ),
threshold = 0.7 ,
relaxation_time = 2
)
mic_stream = SimpleMicStream (
window_length_secs = 1.5 ,
sliding_window_secs = 0.75 ,
)
mic_stream . start_stream ()
print ( "Say Mycroft " )
while True :
frame = mic_stream . getFrame ()
result = mycroft_hw . scoreFrame ( frame )
if result == None :
#no voice activity
continue
if ( result [ "match" ]):
print ( "Wakeword uttered" , result [ "confidence" ])
Pustaka menyediakan cara komputasi yang mudah untuk mendeteksi beberapa kata cepat dari aliran tertentu, alih-alih menjalankan scoreFrame()
dari setiap kata aktif satu per satu
import os
from eff_word_net . streams import SimpleMicStream
from eff_word_net import samples_loc
print ( samples_loc )
base_model = Resnet50_Arc_loss ()
mycroft_hw = HotwordDetector (
hotword = "mycroft" ,
model = base_model ,
reference_file = os . path . join ( samples_loc , "mycroft_ref.json" ),
threshold = 0.7 ,
relaxation_time = 2
)
alexa_hw = HotwordDetector (
hotword = "alexa" ,
model = base_model ,
reference_file = os . path . join ( samples_loc , "alexa_ref.json" ),
threshold = 0.7 ,
relaxation_time = 2 ,
#verbose=True
)
computer_hw = HotwordDetector (
hotword = "computer" ,
model = base_model ,
reference_file = os . path . join ( samples_loc , "computer_ref.json" ),
threshold = 0.7 ,
relaxation_time = 2 ,
#verbose=True
)
multi_hotword_detector = MultiHotwordDetector (
[ mycroft_hw , alexa_hw , computer_hw ],
model = base_model ,
continuous = True ,
)
mic_stream = SimpleMicStream ( window_length_secs = 1.5 , sliding_window_secs = 0.75 )
mic_stream . start_stream ()
print ( "Say " , " / " . join ([ x . hotword for x in multi_hotword_detector . detector_collection ]))
while True :
frame = mic_stream . getFrame ()
result = multi_hotword_detector . findBestMatch ( frame )
if ( None not in result ):
print ( result [ 0 ], f",Confidence { result [ 1 ]:0.4f } " )
Akses dokumentasi perpustakaan dari sini: https://ant-brain.github.io/EfficientWord-Net/
Berikut versi file README.md yang telah diperbaiki dengan tata bahasa dan pemformatan yang ditingkatkan:
Performa pendeteksi kata cepat kami jauh lebih rendah dibandingkan Landak. Kami telah memikirkan arsitektur NN yang lebih baik untuk mesinnya dan berharap dapat mengungguli Porcupine. Ini adalah proyek sarjana kami, jadi dukungan dan dorongan Anda akan memotivasi kami untuk mengembangkan mesin ini lebih lanjut. Jika Anda menyukai proyek ini, rekomendasikan kepada rekan Anda, beri kami? di GitHub, dan tepuk tangan? di Sedang.
Pembaruan: Bintang Anda mendorong kami untuk membuat model baru yang jauh lebih baik. Mari kita kembangkan komunitas ini!
Lisensi Apache 2.0