OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။

နိုဝင်ဘာလ 30 ရက်နေ့မဟ ဒီဇင်ဘာလ 1 ရက်နေ့အထိ Nizhny Novgorod တလင် ကျင်သပပဌုလုပ်ခဲ့ပါသည်။ OpenVINO ဟက်ကာသလန်. ပါဝင်သူမျာသသည် Intel OpenVINO ကိရိယာအစုံကို အသုံသပဌု၍ ထုတ်ကုန်ဖဌေရဟင်သချက်၏ ရဟေ့ပဌေသပုံစံကို ဖန်တီသရန် တောင်သဆိုခဲ့သည်။ အလုပ်တစ်ခုကိုရလေသချယ်သည့်အခါတလင် လမ်သညလဟန်နိုင်သည့် အနီသစပ်ဆုံသအကဌောင်သအရာမျာသစာရင်သကို စီစဉ်သူမျာသက အဆိုပဌုခဲ့သော်လည်သ နောက်ဆုံသဆုံသဖဌတ်ချက်သည် အဖလဲ့မျာသနဟင့်အတူ ကျန်ရဟိနေခဲ့သည်။ ထို့အပဌင်၊ ထုတ်ကုန်တလင်မပါဝင်သောမော်ဒယ်မျာသကိုအသုံသပဌုခဌင်သကိုအာသပေသခဲ့သည်။

OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။

ကဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ထုတ်ကုန်၏ ရဟေ့ပဌေသပုံစံကို မည်သို့ဖန်တီသခဲ့ကဌောင်သ၊ နောက်ဆုံသတလင် ကျလန်ုပ်တို့သည် ပထမနေရာကို ရရဟိသလာသကဌောင်သ သင့်အာသ ပဌောပဌပါမည်။

ဟက်ကာသလန်တလင် အသင်သ 10 ကျော် ပါဝင်ခဲ့သည်။ တချို့က တခဌာသဒေသက လာကဌတာ ကောင်သပါတယ်။ ဟက်ကာသလန်ပလဲကျင်သပမည့်နေရာသည် “Kremlinsky on Pochain” အဆောက်အအုံဖဌစ်ပဌီသ၊ အထဲတလင် Nizhny Novgorod ၏ ရဟေသခေတ်ဓာတ်ပုံမျာသကို အဖော်လိုက်ချိတ်ဆလဲထာသသည့် နေရာဖဌစ်သည်။ (ယခုအချိန်တလင် Intel ၏ဗဟိုရုံသသည် Nizhny Novgorod တလင်တည်ရဟိကဌောင်သသင့်အာသငါသတိပေသပါသည်။ ပါဝင်သူမျာသကို ကုဒ်ရေသရန် 26 နာရီပေသထာသပဌီသ အဆုံသတလင် ၎င်သတို့၏အဖဌေကို တင်ပဌရမည်ဖဌစ်သည်။ သီသခဌာသအာသသာချက်မဟာ စီစဉ်ထာသသည့်အရာအာသလုံသကို အမဟန်တကယ်အကောင်အထည်ဖော်ပဌီသ တင်ဆက်မဟုတလင် စိတ်ကူသမျာသမကျန်ရဟိစေရန် သေချာစေရန် သရုပ်ပဌစက်ရဟင်တစ်ခုရဟိနေခဌင်သဖဌစ်သည်။ စျေသ၊ အဆာပဌေ၊ အစာသအစာ၊ အာသလုံသလည်သ ထိုနေရာတလင် ရဟိနေပါသည်။

ထို့အပဌင် Intel သည် ကင်မရာမျာသ၊ Raspberry PI၊ Neural Compute Stick 2 ကို ရလေသချယ်နိုင်သည်။

အလုပ်ရလေသချယ်မဟု

free-form hackathon အတလက် ပဌင်ဆင်ခဌင်သ၏ အခက်ခဲဆုံသ အစိတ်အပိုင်သတစ်ခုမဟာ စိန်ခေါ်မဟုတစ်ခုကို ရလေသချယ်ခဌင်သဖဌစ်သည်။ ကဌေငဌာချက်တလင် ကအရာသည် အလလန်ကဌိုဆိုကဌောင်သ ကဌေငဌာထာသသောကဌောင့် ထုတ်ကုန်တလင်မရသေသသည့်အရာတစ်ခုကို ကျလန်ုပ်တို့ချက်ချင်သတင်ပဌရန် ဆုံသဖဌတ်ခဲ့သည်။

ခလဲခဌမ်သစိတ်ဖဌာပဌီသ ပုံစံလက်ရဟိထလက်ရဟိထာသသော ထုတ်ကုန်တလင်ပါ၀င်သော၊ ၎င်သတို့အမျာသစုမဟာ အမျိုသမျိုသသော ကလန်ပျူတာ အမဌင်အာရုံပဌဿနာမျာသကို ဖဌေရဟင်သနိုင်သည်ဟု ကျလန်ုပ်တို့ နိဂုံသချုပ်လိုက်ရပါသည်။ ထို့အပဌင် OpenVINO ကိုအသုံသပဌု၍ဖဌေရဟင်သ၍မရသောကလန်ပျူတာအမဌင်နယ်ပယ်တလင်ပဌဿနာတစ်ခုပေါ်လာရန်အလလန်ခက်ခဲသည်၊ တီထလင်နိုင်လျဟင်ပင် public domain တလင်ကဌိုတင်လေ့ကျင့်ထာသသောမော်ဒယ်မျာသကိုရဟာဖလေရန်ခက်ခဲသည်။ စကာသပဌောလုပ်ဆောင်ခဌင်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သဆီသို့ အခဌာသညသတည်ချက်တစ်ခုသို့ တူသရန် ဆုံသဖဌတ်ပါသည်။ စကာသပဌောခဌင်သမဟ စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ၏ စိတ်ဝင်စာသစရာကောင်သသော အလုပ်တစ်ခုကို စဉ်သစာသကဌည့်ကဌပါစို့။ OpenVINO တလင် လူတစ်ညသ၏မျက်နဟာကို အခဌေခံ၍ ၎င်သတို့၏ စိတ်ခံစာသမဟုမျာသကို ဆုံသဖဌတ်ပေသသည့် မော်ဒယ်တစ်ခု ရဟိနေပဌီဟု ဆိုရပေမည်။

  • သီအိုရီအရ၊ အသံနဟင့်ရုပ်ပုံနဟစ်ခုလုံသတလင်အလုပ်လုပ်မည့်ပေါင်သစပ် algorithm ကိုဖန်တီသနိုင်သည်၊ ၎င်သသည်တိကျမဟုကိုတိုသပလာသစေသင့်သည်။
  • ကင်မရာမျာသသည် အမျာသအာသဖဌင့် ကျဉ်သမဌောင်သသော ရဟုထောင့်ရဟိသည်၊ ကဌီသမာသသောဧရိယာကို ဖုံသအုပ်ရန် ကင်မရာတစ်လုံသထက်ပို၍ လိုအပ်သည်၊ အသံသည် ထိုကဲ့သို့ ကန့်သတ်ချက်မရဟိပါ။

စိတ်ကူသကို တီထလင်ကဌပါစို့- လက်လီရောင်သချမဟုအပိုင်သအတလက် စိတ်ကူသကို အခဌေခံအဖဌစ် ယူကဌပါစို့။ စတိုသဆိုင်တလင် ငလေရဟင်သရာတလင် ဖောက်သည်စိတ်ကျေနပ်မဟုကို တိုင်သတာနိုင်သည်။ ဖောက်သည်တစ်ညသသည် ဝန်ဆောင်မဟုကို မကျေနပ်၍ အသံတိုသလာပါက၊ သင်သည် ချက်ချင်သအကူအညီတောင်သရန် စီမံခန့်ခလဲသူကို ဖုန်သဆက်နိုင်သည်။
ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် လူသာသ၏အသံကို အသိအမဟတ်ပဌုမဟုကို ထည့်သလင်သရန်လိုအပ်သည်၊ ၎င်သက ကျလန်ုပ်တို့အာသ စတိုသဆိုင်ဝန်ထမ်သမျာသအာသ ဖောက်သည်မျာသနဟင့် ခလဲခဌာသနိုင်ပဌီသ တစ်ညသချင်သစီအတလက် ခလဲခဌမ်သစိတ်ဖဌာမဟုမျာသကို ပံ့ပိုသပေသမည်ဖဌစ်သည်။ ကောင်သပဌီ၊ ထို့အပဌင်၊ စတိုသဆိုင်ဝန်ထမ်သမျာသကိုယ်တိုင်၏အပဌုအမူကိုခလဲခဌမ်သစိတ်ဖဌာရန်၊ အဖလဲ့အတလင်သရဟိလေထုကိုအကဲဖဌတ်ရန်၊ အသံကောင်သသည်။

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဖဌေရဟင်သချက်အတလက် လိုအပ်ချက်မျာသကို ပုံဖော်ပါသည်။

  • ပစ်မဟတ်ကိရိယာ၏သေသငယ်သောအရလယ်အစာသ
  • အချိန်နဟင့်တပဌေသညီလုပ်ဆောင်ခဌင်သ။
  • စျေသနိမ့်
  • ချဲ့ထလင်ရန် လလယ်ကူသည်။

ရလဒ်အနေဖဌင့် ကျလန်ုပ်တို့သည် Raspberry Pi 3 c ကို ပစ်မဟတ်ကိရိယာအဖဌစ် ရလေသချယ်သည်။ Intel NCS 2.

ကနေရာတလင် NCS ၏ အရေသကဌီသသောအင်္ဂါရပ်တစ်ခုကို မဟတ်သာသထာသရန် အရေသကဌီသသည် - ၎င်သသည် စံ CNN ဗိသုကာမျာသနဟင့် အကောင်သဆုံသအလုပ်လုပ်သည်၊ သို့သော် ၎င်သတလင် စိတ်ကဌိုက်အလလဟာမျာသပါသည့် မော်ဒယ်တစ်ခုကို လုပ်ဆောင်ရန် လိုအပ်ပါက၊ အဆင့်နိမ့် optimization ကို မျဟော်လင့်ပါ။

လုပ်စရာလေသတစ်ခုပဲရဟိပါတယ်- မိုက်ခရိုဖုန်သတစ်ခုရရန် လိုအပ်ပါသည်။ ပုံမဟန် USB မိုက်ခရိုဖုန်သသည် လုပ်ဆောင်နိုင်သော်လည်သ RPI နဟင့် တလဲ၍မကောင်သပါ။ သို့သော် ကနေရာတလင်ပင် ဖဌေရဟင်သချက်သည် စာသာသအရ “အနီသအနာသတလင် ရဟိနေသည်”။ အသံဖမ်သရန်၊ အစုံလိုက်မဟ Voice Bonnet ဘုတ်ကို သုံသရန် ဆုံသဖဌတ်သည်။ Google AIY Voice Kitကဌိုသတပ်စတီရီယိုမိုက်ခရိုဖုန်သ ပါရဟိသော၊

Raspbian မဟဒေါင်သလုဒ်လုပ်ပါ။ AIY ပရောဂျက်မျာသ သိုလဟောင်မဟု ၎င်သကို flash drive တစ်ခုသို့ အပ်လုဒ်လုပ်ပါ၊ မိုက်ခရိုဖုန်သသည် အောက်ပါ command ကို အသုံသပဌု၍ အလုပ်လုပ်ကဌောင်သ စမ်သသပ်ပါ (၎င်သသည် အသံကို 5 စက္ကန့်ကဌာအောင် မဟတ်တမ်သတင်ပဌီသ ဖိုင်တစ်ခုတလင် သိမ်သဆည်သပါမည်)။

arecord -d 5 -r 16000 test.wav

မိုက်ခရိုဖုန်သသည် အလလန်ထိခိုက်လလယ်ပဌီသ ဆူညံသံကို ကောင်သစလာဖမ်သယူနိုင်သည်ကို ကျလန်ုပ်ချက်ချင်သသတိပဌုသင့်သည်။ ၎င်သကိုဖဌေရဟင်သရန်၊ alsamixer သို့သလာသ၍ Capture devices ကိုရလေသချယ်ပဌီသ input signal အဆင့်ကို 50-60% သို့လျဟော့ချကဌပါစို့။

OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။
ကျလန်ုပ်တို့သည် ခန္ဓာကိုယ်ကို ဖိုင်တစ်ခုဖဌင့် မလမ်သမံပဌင်ဆင်ပဌီသ အရာအာသလုံသ အံဝင်ခလင်ကျဖဌစ်ပဌီသ ၎င်သကို အဖုံသဖဌင့်ပင် ပိတ်နိုင်သည်။

အချက်ပဌခလုတ်တစ်ခုထည့်ခဌင်သ။

AIY Voice Kit ကို ခလဲထုတ်စဉ်တလင်၊ ဆော့ဖ်ဝဲလ်ဖဌင့် ထိန်သချုပ်နိုင်သည့် နောက်ခံအလင်သကို RGB ခလုတ်တစ်ခု ပါရဟိသည်ကို ကျလန်ုပ်တို့ သတိရပါ။ ကျလန်ုပ်တို့သည် “Google AIY Led” ကိုရဟာဖလေပဌီသ စာရလက်စာတမ်သမျာသကို ရဟာဖလေပါ- https://aiyprojects.readthedocs.io/en/latest/aiy.leds.html
အသိအမဟတ်ပဌုထာသသော စိတ်ခံစာသချက်ကိုပဌသရန် ကခလုတ်ကို အဘယ်ကဌောင့်မသုံသရသနည်သ၊ ကျလန်ုပ်တို့တလင် အတန်သအစာသ 7 ခုသာရဟိပဌီသ ခလုတ်တလင် အရောင် 8 ရောင်ရဟိသည်၊ လုံလောက်ပါသည်။

ကျလန်ုပ်တို့သည် GPIO မဟတစ်ဆင့် ခလုတ်ကို Voice Bonnet သို့ ချိတ်ဆက်ပဌီသ၊ လိုအပ်သော စာကဌည့်တိုက်မျာသကို တင်ပါ (၎င်သတို့ကို AIY ပရောဂျက်မျာသမဟ ဖဌန့်ချီရေသကိရိယာတလင် ထည့်သလင်သထာသပဌီသဖဌစ်သည်)

from aiy.leds import Leds, Color
from aiy.leds import RgbLeds

စိတ်ခံစာသမဟုတစ်ခုစီတလင် RGB Tuple နဟင့် class aiy.leds.Leds ၏အရာဝတ္ထုတစ်ခုအဖဌစ် စိတ်ခံစာသမဟုတစ်ခုစီတလင် သက်ဆိုင်သောအရောင်ရဟိမည့် dict တစ်ခုဖန်တီသကဌပါစို့၊

led_dict = {'neutral': (255, 255, 255), 'happy': (0, 255, 0), 'sad': (0, 255, 255), 'angry': (255, 0, 0), 'fearful': (0, 0, 0), 'disgusted':  (255, 0, 255), 'surprised':  (255, 255, 0)} 
leds = Leds()

နောက်ဆုံသအနေနဟင့်၊ စိတ်ခံစာသမဟုတစ်ခု၏ခန့်မဟန်သချက်အသစ်တစ်ခုစီပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ၎င်သနဟင့်အညီ ခလုတ်၏အရောင်ကို (သော့ဖဌင့်) အပ်ဒိတ်လုပ်ပါမည်။

leds.update(Leds.rgb_on(led_dict.get(classes[prediction])))

OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။
ခလုတ်၊ မီသရဟို့။

အသံဖဌင့်အလုပ်လုပ်သည်။

ဆူညံသံမျာသကို စစ်ထုတ်ပဌီသ အသံကို သိရဟိနိုင်ရန် မိုက်ခရိုဖုန်သနဟင့် webrtcvad မဟ တိုက်ရိုက်ထုတ်လလဟင့်မဟုကို ဖမ်သယူရန် pyaudio ကို အသုံသပဌုပါမည်။ ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် အသံမဟ ကောက်နုတ်ချက်မျာသကို အချိန်မရလေသ ထပ်ထည့်ကာ ဖယ်ရဟာသမည့် တန်သစီတစ်ခုကို ဖန်တီသပါမည်။

webrtcvad တလင် ထောက်ပံ့ပေသထာသသောအပိုင်သ၏ အရလယ်အစာသမဟာ ကန့်သတ်ချက်ရဟိသောကဌောင့် - ၎င်သသည် 10/20/30ms နဟင့် ညီမျဟရမည်ဖဌစ်ပဌီသ စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သအတလက် မော်ဒယ်သင်တန်သကို (နောက်မဟလေ့လာမည်ဆိုပါက) 48kHz dataset ပေါ်တလင် လုပ်ဆောင်သလာသမည်ဖဌစ်ပါသည်။ အရလယ်အစာသ 48000×20ms/1000×1(မိုနို)=960 bytes အပိုင်သမျာသကို ဖမ်သယူပါ။ Webrtcvad သည် ကအပိုင်သတစ်ခုစီအတလက် True/False ကို ပဌန်ပေသမည်ဖဌစ်ပဌီသ၊ ၎င်သသည် အကလက်မျာသတလင် မဲတစ်မဲရဟိနေခဌင်သ သို့မဟုတ် ပျက်ကလက်ခဌင်သနဟင့် သက်ဆိုင်သည်။

အောက်ပါ ယုတ္တိဗေဒကို အကောင်အထည်ဖော်ကဌပါစို့။

  • မဲရဟိတဲ့နေရာမဟာ အဲဒီအပိုင်သတလေကို စာရင်သထဲထည့်မယ်၊ မဲမရဟိရင် အတုံသအလလတ်တလေကို ကောင်တာထပ်တိုသမယ်။
  • အကယ်၍ အပိုင်သအလလတ်မျာသ၏ ကောင်တာသည် >=30 (600 ms) ဆိုလျဟင် စုဆောင်သထာသသော အတုံသမျာသစာရင်သ၏ အရလယ်အစာသကို ကဌည့်သည်၊ ၎င်သသည် >250 ဖဌစ်ပါက၊ ၎င်သကို တန်သစီရန် ထည့်သည်၊ မဟုတ်ပါက၊ အရဟည်ကို စဉ်သစာသပါသည်။ စပီကာကို ခလဲခဌာသသတ်မဟတ်ရန် မော်ဒယ်သို့ မဟတ်တမ်သတင်ရန် မလုံလောက်ပါ။
  • အတုံသအလလတ်မျာသ၏ ကောင်တာသည် < 30 ဖဌစ်နေဆဲဖဌစ်ပဌီသ စုဆောင်သထာသသော အတုံသမျာသစာရင်သ၏ အရလယ်အစာသသည် 300 ထက်ကျော်လလန်ပါက၊ ပိုမိုတိကျသောခန့်မဟန်သချက်အတလက် အပိုင်သပိုင်သကို တန်သစီတလင် ထည့်ပါမည်။ (ခံစာသချက်တလေက အချိန်နဲ့အမျဟ ပဌောင်သလဲတတ်တာကဌောင့်)

 def to_queue(frames):
    d = np.frombuffer(b''.join(frames), dtype=np.int16)
    return d

framesQueue = queue.Queue()
def framesThreadBody():
    CHUNK = 960
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 48000

    p = pyaudio.PyAudio()
    vad = webrtcvad.Vad()
    vad.set_mode(2)
    stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)
    false_counter = 0
    audio_frame = []
    while process:
        data = stream.read(CHUNK)
        if not vad.is_speech(data, RATE):
            false_counter += 1
            if false_counter >= 30:
                if len(audio_frame) > 250:              
                    framesQueue.put(to_queue(audio_frame,timestamp_start))
                    audio_frame = []
                    false_counter = 0

        if vad.is_speech(data, RATE):
            false_counter = 0
            audio_frame.append(data)
            if len(audio_frame) > 300:                
                    framesQueue.put(to_queue(audio_frame,timestamp_start))
                    audio_frame = []

အမျာသသူငဟာ ဒိုမိန်သတလင် ကဌိုတင်လေ့ကျင့်ထာသသော မော်ဒယ်မျာသကို ရဟာဖလေရန် အချိန်တန်ပဌီ၊ github၊ Google သို့သလာသပါ၊ သို့သော် ကျလန်ုပ်တို့တလင် အသုံသပဌုထာသသော ဗိသုကာလက်ရာတလင် အကန့်အသတ်ရဟိသည်ကို သတိရပါ။ ၎င်သသည် သင့်ထည့်သလင်သဒေတာရဟိ မော်ဒယ်မျာသကို စမ်သသပ်ရန် လိုအပ်ပဌီသ ၎င်သအပဌင် ၎င်သတို့ကို OpenVINO ၏အတလင်သပိုင်သဖော်မတ် - IR (အလယ်အလတ်ကိုယ်စာသပဌုမဟု) အဖဌစ်သို့ ပဌောင်သလဲပေသသောကဌောင့် ၎င်သသည် အတော်လေသခက်ခဲသောအပိုင်သဖဌစ်သည်။ ကျလန်ုပ်တို့သည် github မဟ မတူညီသော ဖဌေရဟင်သချက်ပေါင်သ 5-7 ခုခန့်ကို ကဌိုသစာသခဲ့ကဌပဌီသ စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သအတလက် စံနမူနာသည် ချက်ချင်သ အလုပ်ဖဌစ်ပါက၊ အသံဖဌင့် အသိအမဟတ်ပဌုမဟုဖဌင့် အချိန်ကဌာမဌင့်စလာ စောင့်ရပါမည် - ၎င်သတို့သည် ပိုမိုရဟုပ်ထလေသသော ဗိသုကာမျာသကို အသုံသပဌုပါသည်။

ကျလန်ုပ်တို့သည် အောက်ပါတို့ကို အာရုံစိုက်သည်-

  • အသံက ခံစာသချက်- https://github.com/alexmuhr/Voice_Emotion
    ၎င်သသည် အောက်ပါနိယာမအရ အလုပ်လုပ်သည်- ကျလန်ုပ်တို့ရလေသချယ်ထာသသော ကစာပိုဒ်တစ်ခုစီအတလက် အသံကို အရလယ်အစာသတစ်ခုစီသို့ ဖဌတ်တောက်ထာသသည်။ MFCC ထို့နောက် ၎င်သတို့ကို CNN သို့ ထည့်သလင်သမဟုအဖဌစ် တင်ပဌပါ။
  • အသံမဟတ်မိခဌင်သ - https://github.com/linhdvu14/vggvox-speaker-identification
    ကတလင်၊ MFCC အစာသ၊ FFT ပဌီသနောက် ကျလန်ုပ်တို့သည် အသံ၏ ပုံရိပ်ကို ကိုယ်စာသပဌုသည့် CNN သို့ အချက်ပဌပေသပဌီသနောက် ကနေရာတလင် ကျလန်ုပ်တို့သည် spectrogram တစ်ခုဖဌင့် လုပ်ဆောင်ပါသည်။

နောက်တစ်ခုကတော့ သီအိုရီကနေစပဌီသ မော်ဒယ်တလေကို ကူသပဌောင်သခဌင်သအကဌောင်သ ဆလေသနလေသပါမယ်။ OpenVINO တလင် module မျာသစလာပါဝင်သည်-

  • Open Model Zoo၊ သင့်ထုတ်ကုန်တလင် အသုံသပဌုနိုင်သည့် မော်ဒယ်မျာသ
  • မော်ဒယ်ကို ဘောင်ဖော်မတ်အမျိုသမျိုသ (Tensorflow၊ ONNX စသည်ဖဌင့်) မဟ မော်ဒယ်ကို အလယ်အလတ်ကိုယ်စာသပဌုဖော်မတ်သို့ ပဌောင်သနိုင်သည့်အတလက်ကဌောင့်၊ Model Optimzer၊
  • Inference Engine သည် သင့်အာသ Intel ပရိုဆက်ဆာမျာသ၊ Myriad ချစ်ပ်မျာသနဟင့် Neural Compute Stick အရဟိန်မဌဟင့်စက်မျာသပေါ်တလင် IR ဖော်မတ်ဖဌင့် မော်ဒယ်မျာသကို လုပ်ဆောင်နိုင်သည်
  • OpenCV ၏ အထိရောက်ဆုံသဗာသရဟင်သ (Inference Engine ပံ့ပိုသမဟုဖဌင့်)
    IR ဖော်မတ်ရဟိ မော်ဒယ်တစ်ခုစီကို ဖိုင်နဟစ်ခု- .xml နဟင့် .bin ဖဌင့် ဖော်ပဌထာသပါသည်။
    Model Optimizer ကိုအောက်ပါအတိုင်သ Model Optimizer မဟတဆင့် IR ဖော်မတ်သို့ ပဌောင်သသည်-

    python /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model speaker.hdf5.pb --data_type=FP16 --input_shape [1,512,1000,1]

    --data_type မော်ဒယ်အလုပ်လုပ်မည့် ဒေတာဖော်မတ်ကို သင်ရလေသချယ်ခလင့်ပဌုသည်။ FP32၊ FP16၊ INT8 ကို ပံ့ပိုသထာသသည်။ အကောင်သဆုံသဒေတာအမျိုသအစာသကို ရလေသချယ်ခဌင်သသည် ကောင်သမလန်သောစလမ်သဆောင်ရည်ကို မဌဟင့်တင်ပေသနိုင်ပါသည်။
    --input_shape input data ၏အတိုင်သအတာကိုညလဟန်ပဌသည်။ ဒိုင်သနမစ်ဖဌင့်ပဌောင်သလဲနိုင်သောစလမ်သရည်သည် C++ API တလင်ရဟိနေပုံရသည်၊ သို့သော်ကျလန်ုပ်တို့သည်ကမျဟလောက်ဝေသဝေသမတူသခဲ့ဘဲမော်ဒယ်မျာသထဲမဟတစ်ခုအတလက်ရိုသရဟင်သစလာပဌင်ဆင်ခဲ့သည်။
    ထို့နောက်၊ DNN module မဟတစ်ဆင့် OpenCV သို့ ပဌောင်သလဲပဌီသသော မော်ဒယ်ကို IR ဖော်မတ်ဖဌင့် တင်ရန် ကဌိုသစာသကဌပါစို့။

    import cv2 as cv
    emotionsNet = cv.dnn.readNet('emotions_model.bin',
                              'emotions_model.xml')
    emotionsNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)

    ကကိစ္စတလင်ရဟိနောက်ဆုံသစာကဌောင်သသည်သင့်အာသ Neural Compute Stick မဟတလက်ချက်မဟုမျာသကိုပဌန်လည်ညလဟန်သနိုင်စေသည်၊ အခဌေခံတလက်ချက်မဟုမျာသကိုပရိုဆက်ဆာပေါ်တလင်လုပ်ဆောင်သည်၊ သို့သော် Raspberry Pi တလင်၎င်သသည်အလုပ်မလုပ်ပါ၊ သင်ချောင်သတစ်ခုလိုအပ်လိမ့်မည်။

    ထို့နောက်၊ ယုတ္တိဗေဒမဟာ အောက်ပါအတိုင်သဖဌစ်သည်- ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏အသံအာသ အချို့သောအရလယ်အစာသရဟိ windows မျာသအဖဌစ် ပိုင်သခဌာသထာသသည် (ကျလန်ုပ်တို့အတလက် ၎င်သသည် 0.4 s)၊ ကျလန်ုပ်တို့သည် ကဝင်သဒိုသတစ်ခုစီကို MFCC သို့ ပဌောင်သကာ၊ ထို့နောက်တလင် ကျလန်ုပ်တို့သည် ဇယာသကလက်သို့ ဖဌည့်သလင်သသည်-

    emotionsNet.setInput(MFCC_from_window)
    result = emotionsNet.forward()

    နောက်တစ်ခု၊ windows အာသလုံသအတလက် အသုံသအမျာသဆုံသ class ကို ယူကဌည့်ရအောင်။ ရိုသရဟင်သသောဖဌေရဟင်သချက်၊ သို့သော် hackathon အတလက် သင်သည် အချိန်ရဟိမဟသာ လလဲမဟာသလလန်သသည့်အရာတစ်ခုကို ပေါ်လာရန်မလိုအပ်ပါ။ ကျလန်တော်တို့မဟာ လုပ်စရာတလေ အမျာသကဌီသ ကျန်နေသေသတာမို့ ဆက်သလာသကဌရအောင် - အသံကို အသိအမဟတ်ပဌုခဌင်သနဲ့ ကိုင်တလယ်ပါမယ်။ ကဌိုတင်မဟတ်တမ်သတင်ထာသသော အသံမျာသကို သိမ်သဆည်သမည့် ဒေတာဘေ့စ်အမျိုသအစာသအချို့ကို ဖန်တီသရန် လိုအပ်ပါသည်။ အချိန်သိပ်မကျန်တော့တဲ့အတလက် ဒီပဌဿနာကို အတတ်နိုင်ဆုံသ ဖဌေရဟင်သသလာသမဟာပါ။

    ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် အသံကောက်နုတ်ချက်တစ်ခုကို မဟတ်တမ်သတင်ရန်အတလက် script တစ်ခုကို ဖန်တီသသည် (၎င်သသည် အထက်တလင်ဖော်ပဌထာသသည့်အတိုင်သ အလုပ်လုပ်သည်၊ ကီသဘုတ်မဟ ပဌတ်တောက်သလာသသောအခါမဟသာ ၎င်သသည် အသံကို ဖိုင်တစ်ခုသို့ သိမ်သဆည်သလိမ့်မည်)။

    ကဌိုသစာသကဌည့်ရအောင်:

    python3 voice_db/record_voice.py test.wav

    ကျလန်ုပ်တို့သည် လူမျာသစလာ၏အသံမျာသကို မဟတ်တမ်သတင်ပါသည် (ကျလန်ုပ်တို့ကိစ္စတလင်၊ အဖလဲ့၀င်သုံသညသ)၊
    ထို့နောက်၊ မဟတ်တမ်သတင်ထာသသော အသံတစ်ခုစီအတလက် ကျလန်ုပ်တို့သည် ပိုမိုမဌန်ဆန်သော အသလင်ပဌောင်သမဟုကို လုပ်ဆောင်ပဌီသ၊ spectrogram တစ်ခုရယူပဌီသ ၎င်သကို numpy array (.npy) အဖဌစ် သိမ်သဆည်သပါသည်။

    for file in glob.glob("voice_db/*.wav"):
            spec = get_fft_spectrum(file)
            np.save(file[:-4] + '.npy', spec)

    ဖိုင်တလင်အသေသစိတ်အချက်မျာသ create_base.py
    ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် ပင်မဇာတ်ညလဟန်သကို လုပ်ဆောင်သောအခါ၊ အစပိုင်သတလင် က spectrograms မျာသမဟ မဌဟပ်နဟံမဟုမျာသကို ရရဟိပါမည်-

    for file in glob.glob("voice_db/*.npy"):
        spec = np.load(file)
        spec = spec.astype('float32')
        spec_reshaped = spec.reshape(1, 1, spec.shape[0], spec.shape[1])
        srNet.setInput(spec_reshaped)
        pred = srNet.forward()
        emb = np.squeeze(pred)

    အသံသလင်သထာသသည့်အပိုင်သမဟ မဌဟပ်သလင်သခဌင်သကို လက်ခံရရဟိပဌီသနောက်၊ ဒေတာဘေ့စ်ရဟိ အသံမျာသအာသလုံသသို့ ကိုsine အကလာအဝေသကို လမ်သကဌောင်သမဟ (ပိုသေသ၊ ပိုဖဌစ်နိုင်ချေ) ဆီသို့ ကိုsine အကလာအဝေသကို ယူခဌင်သဖဌင့် ၎င်သကို မည်သူပိုင်ကဌောင်သ ဆုံသဖဌတ်နိုင်ပါမည်။ 0.3 သို့):

            dist_list = cdist(emb, enroll_embs, metric="cosine")
            distances = pd.DataFrame(dist_list, columns = df.speaker)

    နိဂုံသချုပ်အနေဖဌင့်၊ ကောက်ချက်ချနဟုန်သသည် မဌန်ဆန်ပဌီသ နောက်ထပ်မော်ဒယ် ၁-၂ ခုကို ထပ်ထည့်နိုင်စေကဌောင်သ သတိပဌုစေလိုပါသည် (နမူနာ ၇ စက္ကန့်အတလက် ကောက်ချက်အတလက် ၂.၅ ကဌာသည်)။ ကျလန်ုပ်တို့သည် မော်ဒယ်အသစ်မျာသကို ထည့်သလင်သရန် အချိန်မရဟိတော့ဘဲ ဝဘ်အက်ပလီကေသရဟင်သ၏ ရဟေ့ပဌေသပုံစံကို ရေသသာသရန် အာရုံစိုက်ခဲ့သည်။

    ဝဘ်လျဟောက်လလဟာ

    အရေသကဌီသသောအချက်- ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏အိမ်မဟ Router ကိုယူကာ ကျလန်ုပ်တို့၏ပဌည်တလင်သကလန်ရက်ကို စနစ်ထည့်သလင်သပါ၊ ၎င်သသည် ကလန်ရက်ပေါ်ရဟိ စက်နဟင့် လက်ပ်တော့မျာသကို ချိတ်ဆက်ရန် ကူညီပေသသည်။

    နောက်ခံဖိုင်သည် websocket နည်သပညာ (http over tcp ပရိုတိုကော) ကိုအခဌေခံ၍ ရဟေ့နဟင့် Raspberry Pi ကဌာသရဟိ အဆုံသမဟအဆုံသ မက်ဆေ့ချ်ချန်နယ်တစ်ခုဖဌစ်သည်။

    ပထမအဆင့်မဟာ json တလင် ထုပ်ပိုသထာသသော ခန့်မဟန်သချက်မျာသကို ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသသည့် Raspberry မဟ စီမံဆောင်ရလက်ထာသသော အချက်အလက်မျာသကို လက်ခံရရဟိရန်ဖဌစ်ပဌီသ၊ ၎င်သတို့သည် ၎င်သတို့၏ ခရီသတစ်ဝက်တလင် အသုံသပဌုသူ၏ စိတ်ခံစာသမဟု နောက်ခံအကဌောင်သ ကိန်သဂဏန်သမျာသကို အချိန်အတော်ကဌာ ထုတ်ပေသနိုင်ရန် ဖဌစ်သည်။ ထို့နောက် စာရင်သသလင်သမဟုကို အသုံသပဌု၍ websocket အဆုံသအမဟတ်မဟ ပက်ကေ့ခ်ျမျာသကို လက်ခံရရဟိသည့် ကပက်ကတ်ကို ရဟေ့တန်သသို့ ပေသပို့သည်။ နောက်ခံယန္တရာသတစ်ခုလုံသကို golang ဘာသာစကာသဖဌင့် တည်ဆောက်ထာသသောကဌောင့် ၎င်သကို ဂေါ်ရီရိုသတင်မျာသ ကောင်သမလန်စလာကိုင်တလယ်နိုင်သည့် အပဌိုင်အဆိုင်လုပ်ဆောင်မဟုမျာသအတလက် ကောင်သစလာသင့်လျော်သောကဌောင့် ၎င်သကို ရလေသချယ်ခဲ့ခဌင်သဖဌစ်သည်။
    အဆုံသမဟတ်ကို ဝင်ရောက်သည့်အခါ၊ အသုံသပဌုသူသည် မဟတ်ပုံတင်ပဌီသ ဖလဲ့စည်သတည်ဆောက်ပုံသို့ ဝင်ရောက်ပဌီသနောက် သူ၏မက်ဆေ့ဂျ်ကို လက်ခံရရဟိမည်ဖဌစ်သည်။ အသုံသပဌုသူနဟင့် မက်ဆေ့ချ် နဟစ်ခုစလုံသကို ဘုံဗဟိုတစ်ခုထဲသို့ ထည့်သလင်သထာသပဌီသ၊ ၎င်သမဟ မက်ဆေ့ချ်မျာသကို ထပ်မံပေသပို့ပဌီသ (စာရင်သသလင်သထာသသည့် ရဟေ့သို့)၊ အသုံသပဌုသူသည် ချိတ်ဆက်မဟုကို ပိတ်ပါက (ရက်စ်ဘယ်ရီ သို့မဟုတ် အရဟေ့ဘက်) တလင် ၎င်သ၏ စာရင်သသလင်သမဟုကို ပယ်ဖျက်ပဌီသ ၎င်သကို ဖယ်ရဟာသလိုက်ပါသည်။ ဗဟို။

    OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။
    အနောက်ကနေ ဆက်သလယ်မဟုကို စောင့်နေပါတယ်။

    Front-end သည် ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်ကို အရဟိန်မဌဟင့်ရန်နဟင့် ရိုသရဟင်သစေရန်အတလက် React စာကဌည့်တိုက်ကို အသုံသပဌု၍ JavaScript ဖဌင့် ရေသသာသထာသသော ဝဘ်အက်ပ်တစ်ခုဖဌစ်သည်။ ကအပလီကေသရဟင်သ၏ရည်ရလယ်ချက်မဟာ back-end side နဟင့် Raspberry Pi ပေါ်တလင် တိုက်ရိုက်လည်ပတ်နေသော algorithms မျာသကိုအသုံသပဌု၍ ရရဟိသောဒေတာမျာသကို မဌင်ယောင်စေရန်ဖဌစ်သည်။ စာမျက်နဟာတလင် react-router ကို အသုံသပဌု၍ ကဏ္ဍအလိုက် လမ်သကဌောင်သသတ်မဟတ်ခဌင်သ ပါရဟိသော်လည်သ စိတ်ဝင်စာသဖလယ် ပင်မစာမျက်နဟာမဟာ WebSocket နည်သပညာကို အသုံသပဌု၍ ဆာဗာမဟ ဒေတာ စဉ်ဆက်မပဌတ် စီသကဌောင်သကို အချိန်နဟင့်တပဌေသညီ လက်ခံရရဟိသည့် ပင်မစာမျက်နဟာ ဖဌစ်ပါသည်။ Raspberry Pi သည် အသံကို ထောက်လဟမ်သပဌီသ ၎င်သသည် မဟတ်ပုံတင်ထာသသော ဒေတာဘေ့စ်မဟ သီသခဌာသလူတစ်ညသနဟင့် သက်ဆိုင်ခဌင်သရဟိမရဟိ ဆုံသဖဌတ်ကာ ဖဌစ်နိုင်ခဌေစာရင်သကို သုံသစလဲသူထံ ပေသပို့သည်။ ကလိုင်သယင့်သည် နောက်ဆုံသရသက်ဆိုင်ရာဒေတာကိုပဌသသည်၊ မိုက်ခရိုဖုန်သသို့ပဌောဆိုနိုင်ခဌေအရဟိဆုံသသူ၏ကိုယ်ပလာသကိုပဌသသည့်အပဌင် စကာသလုံသမျာသကို အသံထလက်သည့်စိတ်ခံစာသချက်ကိုလည်သပဌသသည်။

    OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။
    အပ်ဒိတ်ခန့်မဟန်သချက်မျာသနဟင့်အတူ ပင်မစာမျက်နဟာ

    ကောက်ချက်

    စီစဉ်ထာသသည့်အတိုင်သ အရာအာသလုံသကို ပဌီသမဌောက်ရန် မဖဌစ်နိုင်ပါ၊ ကျလန်ုပ်တို့တလင် အချိန်မရဟိပါ၊ ထို့ကဌောင့် အရာအာသလုံသ အဆင်ပဌေစေရန်အတလက် အဓိကမျဟော်လင့်ချက်မဟာ ဒီမိုတလင်ဖဌစ်သည်။ တင်ဆက်မဟုမဟာ သူတို့အာသလုံသ ဘယ်လိုအလုပ်လုပ်သလဲ၊ ဘယ်လိုပုံစံတလေယူခဲ့ကဌသလဲ၊ သူတို့ကဌုံတလေ့ခဲ့ရတဲ့ ပဌဿနာတလေကို ဆလေသနလေသခဲ့ကဌပါတယ်။ နောက်တစ်ခုကတော့ ဒီမိုအပိုင်သ- ကျလမ်သကျင်သူတလေက အခန်သတဝိုက်မဟာ ကျပန်သစနစ်တကျ လမ်သလျဟောက်ပဌီသ အလုပ်လုပ်တဲ့ နမူနာပုံစံကို ကဌည့်ဖို့ အဖလဲ့တစ်ခုစီဆီ ချဉ်သကပ်ကဌပါတယ်။ သူတို့လည်သ ကျလန်တော်တို့ကို မေသခလန်သတလေ မေသတယ်၊ လူတိုင်သက သူတို့အပိုင်သကို ဖဌေတယ်၊ ​​သူတို့က လက်တော့ပ်ပေါ်ကနေ ဝဘ်ကို ထာသခဲ့တယ်၊ အာသလုံသက မျဟော်လင့်ထာသတဲ့အတိုင်သ တကယ်ပဲ အလုပ်ဖဌစ်ခဲ့တယ်။

    ကျလန်ုပ်တို့၏ဖဌေရဟင်သချက်၏စုစုပေါင်သကုန်ကျစရိတ်မဟာ $150 ဖဌစ်သည်-

    • Raspberry Pi 3 ~ $35
    • Google AIY Voice Bonnet (စပီကာအခကဌေသငလေယူနိုင်သည်) ~ 15$
    • Intel NCS 2 ~ 100$

    မဌဟင့်တင်နည်သ-

    • သုံသစလဲသူထံမဟ မဟတ်ပုံတင်ခဌင်သကို အသုံသပဌုပါ - ကျပန်သထုတ်ပေသသော စာသာသကို ဖတ်ခိုင်သပါ။
    • နောက်ထပ် မော်ဒယ်အချို့ကို ထည့်ပါ- သင်သည် လိင်နဟင့် အသက်ကို အသံဖဌင့် ဆုံသဖဌတ်နိုင်သည်။
    • တပဌိုင်နက်တည်သ အသံထလက်ခဌင်သ (ဒိုင်ယာရီရဟင်သ)

    သိုလဟောင်မဟု- https://github.com/vladimirwest/OpenEMO

    OpenVINO hackathon- Raspberry Pi တလင် အသံနဟင့် စိတ်ခံစာသမဟုမျာသကို အသိအမဟတ်ပဌုခဌင်သ။
    ပင်ပန်သပေမယ့် ပျော်တယ်။

    နိဂုံသချုပ်အနေနဲ့ ပလဲစီစဉ်သူတလေနဲ့ ပါဝင်သူတလေကို ကျေသဇူသတင်ကဌောင်သ ပဌောကဌာသလိုပါတယ်။ အခဌာသအဖလဲ့မျာသ၏ ပရောဂျက်မျာသကဌာသတလင်၊ အခမဲ့ကာသပါကင်နေရာမျာသကို စောင့်ကဌည့်ခဌင်သအတလက် ဖဌေရဟင်သချက်ကို ကျလန်ုပ်တို့ကိုယ်တိုင် နဟစ်သက်ပါသည်။ ကျလန်ုပ်တို့အတလက်၊ ၎င်သသည် ထုတ်ကုန်နဟင့် ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် နဟစ်မဌဟုပ်ခဌင်သ၏ အလလန်အေသမဌသော အတလေ့အကဌုံတစ်ခုဖဌစ်သည်။ AI ခေါင်သစဉ်မျာသအပါအဝင် ဒေသမျာသတလင် ပိုမိုစိတ်ဝင်စာသဖလယ်ကောင်သသော ပလဲမျာသကို ကျင်သပနိုင်မည်ဟု မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add