ผู้ช่วยที่บ้านจำเป็นต้องมีวลีพิเศษที่เรียกว่าคำที่นิยมเพื่อเปิดใช้งาน (เช่น "ตกลง Google") EfficientWord-Net เป็นเครื่องมือตรวจจับคำที่นิยมโดยอาศัยการเรียนรู้เพียงไม่กี่ขั้นตอน ซึ่งช่วยให้นักพัฒนาสามารถเพิ่มคำที่นิยมที่กำหนดเองลงในโปรแกรมของตนได้โดยไม่มีค่าใช้จ่ายเพิ่มเติม ไลบรารีนี้เขียนด้วยภาษา Python ล้วนๆ และใช้การใช้งาน TFLite ของ Google เพื่อการอนุมานแบบเรียลไทม์ที่รวดเร็วยิ่งขึ้น ได้รับแรงบันดาลใจจากสถาปัตยกรรมเครือข่ายสยามของ FaceNet และทำงานได้ดีที่สุดเมื่อรวบรวมตัวอย่างคำที่นิยม 3-4 คำจากผู้ใช้โดยตรง
ไฟล์การฝึกอบรมเพื่อเข้าถึงไฟล์การฝึกอบรม
นี่คือลิงค์:
เอกสารการวิจัยเพื่อเข้าถึงเอกสารวิจัย
ไลบรารีนี้ใช้งานได้กับ Python เวอร์ชัน 3.6 ถึง 3.9
ก่อนที่จะรันคำสั่งการติดตั้ง pip สำหรับไลบรารี จำเป็นต้องติดตั้งการขึ้นต่อกันบางอย่างด้วยตนเอง:
ผู้ใช้ Mac OS M* และ Raspberry Pi อาจต้องคอมไพล์การขึ้นต่อกันเหล่านี้
ไม่สามารถแสดงรายการแพ็คเกจ tflite ในข้อกำหนด txt ได้ ดังนั้นจะถูกติดตั้งโดยอัตโนมัติเมื่อแพ็คเกจเริ่มต้นในระบบ
แพ็คเกจ librosa ไม่จำเป็นสำหรับกรณีการอนุมานเท่านั้น อย่างไรก็ตาม เมื่อเรียกใช้ generate_reference
ระบบจะติดตั้งโดยอัตโนมัติ
รันคำสั่ง pip ต่อไปนี้:
pip install EfficientWord-Net
หากต้องการนำเข้าแพ็คเกจ:
import eff_word_net
หลังจากติดตั้งแพ็คเกจ คุณสามารถเรียกใช้สคริปต์สาธิตที่สร้างไว้ในไลบรารีได้ (ตรวจสอบให้แน่ใจว่าคุณมีไมโครโฟนที่ใช้งานได้)
เข้าถึงเอกสารจาก: https://ant-brain.github.io/EfficientWord-Net/
คำสั่งเพื่อรันการสาธิต:
python -m eff_word_net.engine
สำหรับคำยอดนิยมใหม่ ไลบรารีต้องการข้อมูลเกี่ยวกับคำที่นิยมนั้น ข้อมูลนี้ได้มาจากไฟล์ชื่อ {wakeword}_ref.json
ตัวอย่างเช่น สำหรับ wakeword 'alexa' ไลบรารีจะต้องมีไฟล์ชื่อ alexa_ref.json
ไฟล์เหล่านี้สามารถสร้างขึ้นได้ด้วยขั้นตอนต่อไปนี้:
รวบรวม 4 ถึง 10 การออกเสียงออกเสียงที่ไม่ซ้ำกันของคำปลุกที่กำหนด ใส่ไว้ในโฟลเดอร์แยกต่างหากที่ไม่มีสิ่งอื่นใด
หรือใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์เสียงสำหรับคำที่กำหนด (ใช้ IBM neural TTS demo API) โปรดอย่าใช้มันมากเกินไปเพื่อประโยชน์ของเรา:
python -m eff_word_net.ibm_generate
python -m eff_word_net.generate_reference
ชื่อพาธของ Wakeword ที่สร้างขึ้นจะต้องส่งผ่านไปยังอินสแตนซ์ 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
)
ตัวแปรโมเดลสามารถรับอินสแตนซ์ของ Resnet_50_Arc_loss หรือ First_Iteration_Siamese
พารามิเตอร์ Relax_time ใช้เพื่อกำหนดเวลาขั้นต่ำระหว่างทริกเกอร์สองตัว สิ่งกระตุ้นที่อาจเกิดขึ้นก่อนเวลาผ่อนคลายจะถูกยกเลิก เครื่องมือตรวจจับทำงานโดยใช้หน้าต่างบานเลื่อน ส่งผลให้มีทริกเกอร์หลายตัวสำหรับคำพูดที่นิยมคำเดียว พารามิเตอร์ Relax_time สามารถใช้เพื่อควบคุมทริกเกอร์หลายรายการ ในกรณีส่วนใหญ่ 0.8 วินาที (ค่าเริ่มต้น) ก็เพียงพอแล้ว
ไลบรารีมีการฝังที่กำหนดไว้ล่วงหน้าซึ่งพร้อมใช้งานสำหรับคำปลุกบางคำ เช่น Mycroft , Google , Firefox , Alexa , Mobile และ Siri พาธของพวกเขาพร้อมใช้งานในไดเร็กทอรีการติดตั้งไลบรารี
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" ])
ไลบรารีมอบวิธีที่เป็นมิตรกับการคำนวณในการตรวจจับคำที่นิยมหลายคำจากสตรีมที่ระบุ แทนที่จะเรียกใช้ scoreFrame()
ของคำปลุกแต่ละรายการแยกกัน
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 } " )
เข้าถึงเอกสารประกอบของไลบรารีได้จากที่นี่: https://ant-brain.github.io/EfficientWord-Net/
ต่อไปนี้เป็นเวอร์ชันแก้ไขของไฟล์ README.md พร้อมการปรับปรุงไวยากรณ์และการจัดรูปแบบ:
ประสิทธิภาพของเครื่องมือตรวจจับคำที่นิยมของเราต่ำกว่าอย่างเห็นได้ชัดเมื่อเทียบกับเม่น เราได้คิดถึงสถาปัตยกรรม NN ที่ดีขึ้นสำหรับเครื่องยนต์ และหวังว่าจะมีประสิทธิภาพเหนือกว่า Porcupine นี่เป็นโครงการระดับปริญญาตรีของเรา ดังนั้นการสนับสนุนและกำลังใจของคุณจะเป็นแรงบันดาลใจให้เราพัฒนาเครื่องยนต์ต่อไป หากคุณรักโครงการนี้ แนะนำให้กับเพื่อน ๆ ของคุณ ให้ ? บน GitHub และตบมือ ? บนสื่อ
อัปเดต: ดาวของคุณสนับสนุนให้เราสร้างโมเดลใหม่ที่ดีกว่ามาก มาทำให้ชุมชนนี้เติบโตกันเถอะ!
ใบอนุญาต Apache 2.0