OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
Novema 30 - Tesema 1 i Nizhny Novgorod na faia OpenVINO hackathon. Na talosagaina tagata auai e fai se faʻataʻitaʻiga o se fofo oloa e faʻaaoga ai le Intel OpenVINO toolkit. Na tu'uina atu e le au fa'atonu se lisi o autu e mafai ona ta'ita'ia pe a filifilia se galuega, ae o le fa'ai'uga mulimuli na tumau pea i 'au. E le gata i lea, o le faʻaaogaina o faʻataʻitaʻiga e le o aofia ai i le oloa na faʻamalosia.
I totonu o lenei tusiga o le a matou taʻuina atu ia te oe le auala na matou fatuina ai la matou faʻataʻitaʻiga o le oloa, lea na iu ai ina matou maua muamua.
E silia ma le 10 'au na auai i le hackathon. E manaia o nisi o i latou na o mai mai isi itulagi. O le nofoaga mo le hackathon o le "Kremlinsky on Pochain" complex, lea na tautau ai ata anamua o Nizhny Novgorod i totonu, i se aumalaga! (Ou te faamanatu atu ia te oe i le taimi nei o le ofisa tutotonu o Intel o loʻo i Nizhny Novgorod). Na tuʻuina atu i tagata auai le 26 itula e tusi ai le code, ma i le faaiuga e tatau ona latou tuʻuina atu a latou fofo. O le isi itu lelei o le i ai lea o se faʻataʻitaʻiga faʻataʻitaʻiga ina ia mautinoa o mea uma na fuafuaina na faʻatinoina moni ma e leʻi tumau ai manatu i le folasaga. Fa'atau, mea'ai, mea'ai, sa iai fo'i mea uma!
E le gata i lea, na saunia e Intel ni mea pueata, Raspberry PI, Neural Compute Stick 2.
Filifiliga o galuega
O se tasi o vaega sili ona faigata o le sauniuni mo se hackathon e leai se totogi o le filifilia lea o se luʻitau. Na vave ona matou filifili e sau ma se mea e leʻi i ai i totonu o le oloa, talu ai na fai mai le faʻasalalauga e matua faʻafeiloaʻi.
Ina ua uma ona iloilo faʻataʻitaʻiga, lea o loʻo aofia ai i totonu o le oloa i le faʻasalalauga o loʻo i ai nei, matou te oʻo mai i le faaiuga o le tele oi latou e foia faʻafitauli eseese o le vaʻai komepiuta. E le gata i lea, e matua faigata lava ona oʻo mai se faʻafitauli i le matata o le vaʻaia komepiuta e le mafai ona foia e faʻaaoga ai OpenVINO, ma e tusa lava pe mafai ona faʻaaogaina se tasi, e faigata ona maua ni faʻataʻitaʻiga aʻoaʻoina muamua i le lautele lautele. Matou te filifili e eli i se isi itu - agai i le faʻaogaina o tautalaga ma auʻiliʻiliga. Sei o tatou mafaufau i se galuega manaia o le iloaina o lagona mai le tautala. E tatau ona fai mai o OpenVINO ua uma ona iai se faʻataʻitaʻiga e fuafua ai lagona o se tagata e faʻavae i luga o latou foliga, ae:
I le teori, e mafai ona fatuina se algorithm tuʻufaʻatasia o le a galue i luga o le leo ma le ata, lea e tatau ona maua ai le faʻaopoopoga o le saʻo.
O meapueata e masani lava ona vaapiapi le va'ai; sili atu ma le tasi le meapueata e mana'omia e ufiufi ai se vaega tele; leo e leai se tapula'a faapena.
Tatou atiina ae le manatu: tatou ave le manatu mo le vaega faatau atu e fai ma faavae. E mafai ona e fuaina le fa'amalieina o tagata fa'atau ile fa'atauga o faleoloa. Afai e le faamalieina se tasi o tagata faatau i le auaunaga ma amata ona sii i luga o latou leo, e mafai ona e vave valaau le pule mo se fesoasoani.
I lenei tulaga, tatou te manaʻomia le faʻaopopoina o le leo o le tagata, o le a mafai ai ona tatou vaʻaia tagata faigaluega faleoloa mai tagata faʻatau ma tuʻuina atu auiliiliga mo tagata taʻitoʻatasi. Ia, e le gata i lea, o le a mafai ona suʻesuʻeina amioga a tagata faigaluega faleoloa lava ia, iloilo le siosiomaga i totonu o le 'au, e foliga lelei!
Matou te faʻatulagaina manaʻoga mo la matou fofo:
Laititi laititi o le masini fa'atatau
Fa'atino taimi moni
Tau maualalo
Fa'afaigofie ona fa'ateleina
O se taunuuga, matou te filifilia le Raspberry Pi 3 c e fai ma masini faʻatatau Intel NCS 2.
O iinei e taua ai le matauina o se tasi o vaega taua o le NCS - e sili ona aoga i faʻataʻitaʻiga CNN masani, ae afai e te manaʻomia le faʻataʻitaʻiina o se faʻataʻitaʻiga faʻatasi ai ma faʻasologa masani i luga, ona faʻamoemoe lea e maualalo le tulaga maualuga.
E na'o le tasi lava le mea itiiti e fai: e mana'omia le maua o se masini faaleotele leo. O se masini faaleotele leo USB masani o le a faia, ae o le a le foliga lelei faatasi ma le RPI. Ae e oʻo lava i inei o le fofo o le "taoto lata mai." Ina ia pu'eina le leo, matou te filifili e fa'aoga le Voice Bonnet board mai le pusa Google AIY Voice Kit, o lo'o i ai se masini faaleotele leo uaea.
Sii mai Raspbian mai AIY poloketi fale teu oloa ma tuʻu i luga o le flash drive, faʻataʻitaʻi o loʻo galue le masini faaleotele leo e faʻaaoga ai le poloaiga lenei (o le a puʻeina le leo 5 sekone le umi ma teu i se faila):
arecord -d 5 -r 16000 test.wav
E tatau ona vave ona ou matauina o le masini faaleotele leo e matua maaleale ma maua lelei le pisa. Ina ia faʻaleleia lenei mea, seʻi o tatou alu i le alsamixer, filifili Puʻeina masini ma faʻaitiitia le faʻailoga faʻailoga i le 50-60%.
Matou te suia le tino i se faila ma mea uma e fetaui, e mafai foi ona e tapunia i se tapuni
Fa'aopoopoina se fa'amau fa'ailoga
Aʻo faʻateʻaina le AIY Voice Kit, matou te manatua o loʻo i ai se faʻamau RGB, o le moli tua e mafai ona pulea e le polokalama. Matou te suʻeina le "Google AIY Led" ma maua faʻamaumauga: https://aiyprojects.readthedocs.io/en/latest/aiy.leds.html
Aisea e le faʻaogaina ai lenei ki e faʻaalia ai lagona faʻaalia, e naʻo le 7 a matou vasega, ma o le ki e 8 lanu, naʻo le lava!
Matou te faʻafesoʻotaʻi le ki e ala i le GPIO i le Voice Bonnet, faʻapipiʻi faletusi manaʻomia (ua uma ona faʻapipiʻi i le pusa tufatufa mai poloketi AIY)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
Sei o tatou fatuina se faʻamatalaga lea o le a maua ai e lagona taʻitasi se lanu tutusa i foliga o se RGB Tuple ma se mea o le vasega aiy.leds.Leds, lea o le a tatou faʻafouina ai le lanu:
O le a matou fa'aogaina le pyaudio e pu'e ai le vaitafe mai le masini faaleotele leo ma le webrtcvad e faamama ai le leo ma iloa ai le leo. E le gata i lea, o le a matou faia se laina lea o le a matou faʻaopoopo faʻatasi ma aveese faʻamatalaga leo.
Talu ai ona o le webrtcvad o loʻo i ai se tapulaʻa i luga o le tele o le vaega tuʻuina atu - e tatau ona tutusa ma le 10/20/30ms, ma o le aʻoaʻoina o le faʻataʻitaʻiga mo le iloa o lagona (e pei ona tatou aʻoaʻoina mulimuli ane) na faia i luga o se 48kHz dataset, o le a tatou pu'e pusi o lapopoa 48000×20ms/1000×1(mono)=960 paita. Webrtcvad o le a toe faʻafoʻi Moni/Sese mo nei pusi taitasi, e fetaui ma le i ai poʻo le leai o se palota i le pusa.
Se'i o tatou fa'atinoina le fa'atatau lea:
O le a matou fa'aopoopo i le lisi na pusi o lo'o i ai se palota; afai e leai se palota, ona matou fa'aopoopoina lea o le fata o pusi gaogao.
Afai o le fata o pusi gaogao e>=30 (600 ms), ona tatou vaʻavaʻai lea i le tele o le lisi o pusi faʻaputuina; afai e> 250, ona tatou faʻaopopo lea i le laina; a leai, tatou te manatu o le umi. o le faamaumauga e le lava e fafaga ai i le faataitaiga e iloa ai le failauga.
Afai o le fata o pusi gaogao o loʻo i ai pea <30, ma le tele o le lisi o pusi faʻaputuina e sili atu i le 300, ona matou faʻaopoopoina lea o le vaega i le laina mo se faʻamatalaga saʻo. (aua o lagona e masani ona suia i le taimi)
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 = []
Ua oʻo i le taimi e suʻe ai faʻataʻitaʻiga aʻo leʻi aʻoaʻoina i le lautele, alu i le github, Google, ae ia manatua o loʻo i ai se tapulaa i luga o le fausaga faʻaaogaina. O se vaega faigata tele, aua e tatau ona e suʻeina faʻataʻitaʻiga i luga o au faʻamatalaga faʻapipiʻi, ma faʻaopopo, liliu i latou i le OpenVINO's internal format - IR (Intermediate Representation). Na matou taumafai e uiga i 5-7 fofo eseese mai le github, ma afai o le faʻataʻitaʻiga mo le iloaina o lagona na galue vave, ona faʻaalia ai lea o le leo e tatau ona matou faʻatali umi - latou te faʻaaogaina fausaga sili atu ona faigata.
Matou te taulai atu i mea nei:
O lagona mai le leo- https://github.com/alexmuhr/Voice_Emotion
E galue e tusa ai ma le mataupu faavae o loʻo i lalo: o le leo e tipiina i ni fuaitau o se lapopoa patino, mo nei fuaitau taʻitasi matou te filifilia. MFCC ona tuʻuina atu lea e fai ma faʻamatalaga i le CNN
Fa'ailoa leo - https://github.com/linhdvu14/vggvox-speaker-identification
O iinei, nai lo le MFCC, matou te galulue ma se spectrogram, pe a uma le FFT matou te fafagaina le faailo i le CNN, lea i le gaioiga matou te maua ai se faʻaaliga vector o le leo.
Sosoo ai o le a tatou talanoa e uiga i le faaliliuina o faataitaiga, amata i le teori. OpenVINO e aofia ai le tele o modules:
Tatala Fa'ata'ita'iga Zoo, fa'ata'ita'iga e mafai ona fa'aoga ma fa'aaofia i lau oloa
Model Optimzer, faʻafetai e mafai ona e faʻaliliuina se faʻataʻitaʻiga mai faʻatulagaga eseese (Tensorflow, ONNX ma isi) i le Intermediate Representation format, lea o le a matou galulue atili ai.
Inference Engine e mafai ai e oe ona faʻataʻitaʻiina faʻataʻitaʻiga i le IR formats i luga ole Intel processors, Myriad chips ma Neural Compute Stick accelerators
Le lomiga aupito sili ona lelei o OpenCV (faatasi ai ma le Inference Engine lagolago)
O faʻataʻitaʻiga taʻitasi i le faʻatulagaga IR e faʻamatalaina e faila e lua: .xml ma .bin.
O fa'ata'ita'iga ua fa'aliliuina i le fa'atulagaga IR e ala i le Model Optimizer e fa'apea:
--data_type fa'atagaina oe e filifili le fa'asologa o fa'amaumauga e fa'aoga ai le fa'ata'ita'iga. FP32, FP16, INT8 e lagolagoina. O le filifilia o le ituaiga faʻamatalaga sili ona lelei e mafai ona maua ai se faʻaleleia lelei. --input_shape o lo'o fa'ailoa mai ai le tele o fa'amaumauga tu'ufa'atasi. O le mafai ona suia malosi e foliga mai o loʻo i ai i le C ++ API, ae matou te leʻi eliina mamao ma faʻapipiʻi mo se tasi o faʻataʻitaʻiga.
O le isi, se'i o tatou taumafai e uta le fa'ata'ita'iga ua uma ona liua i le IR format e ala i le DNN module i OpenCV ma tu'uina atu i ai.
import cv2 as cv
emotionsNet = cv.dnn.readNet('emotions_model.bin',
'emotions_model.xml')
emotionsNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
O le laina mulimuli i lenei tulaga e mafai ai ona e toe faʻafeiloaʻi faʻatusatusaga i le Neural Compute Stick, o faʻatulagaga masani e faia i luga o le gaioiga, ae i le tulaga o le Raspberry Pi o le a le aoga, e te manaʻomia se laau.
Ma le isi, o le faʻamatalaga e faʻapea: matou te vaevaeina a matou leo i totonu o pupuni o se tele (mo matou o le 0.4 s), matou te faʻaliliuina nei faamalama taʻitasi i le MFCC, ona matou fafagaina lea i le laina:
emotionsNet.setInput(MFCC_from_window)
result = emotionsNet.forward()
Le isi, se'i o tatou ave le vasega sili ona taatele mo fa'amalama uma. O se fofo faigofie, ae mo se hackathon e te le manaʻomia le sau i luga o se mea e sili atu ona le mautonu, pe afai e iai sou taimi. E tele lava a tatou galuega e fai, o lea tatou agai i luma - o le a tatou feagai ma le iloa o leo. E mana'omia le faia o se ituaiga o fa'amaumauga e teu ai spectrograms o leo na mua'i pu'eina. Talu ai e itiiti se taimi o totoe, o le a matou foia lenei mataupu i le mea sili matou te mafaia.
O lona uiga, matou te fatuina se faʻamaumauga mo le pueina o se leo (e galue i le auala lava e tasi e pei ona faʻamatalaina i luga, naʻo le faʻalavelave mai le piano o le a faʻasaoina le leo i se faila).
Tatou taumafai:
python3 voice_db/record_voice.py test.wav
Matou te faamaumauina leo o le tele o tagata (i la matou tulaga, e toatolu tagata o le au)
O le isi, mo leo fa'amauina ta'itasi matou te faia se suiga vave fa'afa, maua se spectrogram ma fa'asaoina o se numpy array (.npy):
for file in glob.glob("voice_db/*.wav"):
spec = get_fft_spectrum(file)
np.save(file[:-4] + '.npy', spec)
Fa'amatalaga atili ile faila create_base.py
O le iʻuga, a tatou faʻatautaia le tusitusiga autu, o le a tatou maua faʻapipiʻi mai nei spectrograms i le amataga lava:
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)
A maeʻa ona maua le faʻapipiʻi mai le vaega faʻalogo, o le a mafai ona matou iloa poʻo ai e iai e ala i le ave o le mamao o le cosine mai le ala i leo uma i totonu o faʻamaumauga (o le laʻititi, sili atu) - mo le demo matou te setiina le faitotoʻa. i le 0.3):
I le faaiuga, ou te fia maitauina o le saoasaoa o le faʻaogaina sa vave ma mafai ai ona faʻaopoopo 1-2 isi faʻataʻitaʻiga (mo se faʻataʻitaʻiga 7 sekone umi e 2.5 mo faʻamatalaga). Ua matou le toe maua se taimi e faʻaopoopo ai faʻataʻitaʻiga fou ma taulaʻi i le tusiaina o se faʻataʻitaʻiga o le upega tafaʻilagi.
Initaneti talosaga
O se itu taua: matou te ave se router ma matou mai le fale ma faʻatutu la matou fesoʻotaʻiga i le lotoifale, e fesoasoani e faʻafesoʻotaʻi le masini ma le komepiuta i luga o le upega tafailagi.
O le pito i tua o se laina pito i tua i le pito i le va o luma ma Raspberry Pi, faʻavae i luga o tekinolosi websocket (http over tcp protocol).
O le laasaga muamua o le mauaina lea o faʻamatalaga faʻatautaia mai le raspberry, o lona uiga, o tagata vavalo o loʻo teuina i le json, o loʻo faʻasaoina i totonu o faʻamaumauga i le afa o la latou faigamalaga ina ia mafai ai ona faʻatupuina faʻamaumauga e uiga i lagona o le tagata faʻaoga mo le vaitaimi. Ona lafo atu lea o le pepa lea i le pito i luma, lea e fa'aogaina ai le fa'asoa ma maua mai ai pepa mai le pito i luga ole laiga. O le masini pito i tua atoa e fausia i le gagana golang; na filifilia ona e fetaui lelei mo galuega asynchronous, lea e taulimaina lelei e goroutine.
A oʻo atu i le faʻaiʻuga, ua lesitala le tagata faʻaoga ma ulufale i totonu o le fausaga, ona maua lea o lana savali. O le tagata faʻaoga ma le feʻau o loʻo tuʻuina atu i totonu o se nofoaga masani, lea o loʻo tuʻuina atu ai feʻau (i le pito i luma o loʻo lesitalaina), ma afai e tapunia e le tagata faʻaoga le fesoʻotaʻiga (raspei poʻo luma), ona faʻaleaogaina lea o lana saofaga ma aveese mai. le nofoaga.
O loʻo matou faʻatali mo se fesoʻotaʻiga mai tua
O le pito i luma o se 'upega tafaʻilagi o loʻo tusia i le JavaScript e faʻaaoga ai le React library e faʻavave ma faafaigofie ai le atinaʻe. O le faʻamoemoega o lenei talosaga o le vaʻaia o faʻamatalaga na maua mai i le faʻaogaina o algorithms o loʻo taʻavale i le pito i tua ma tuusaʻo i luga ole Raspberry Pi. O le itulau o loʻo i ai le faʻaogaina o le vaega e faʻaaogaina e faʻaaoga ai le tali-router, ae o le itulau autu o le fiafia o le itulau autu, lea e maua ai le faʻaauau pea o faʻamaumauga i le taimi moni mai le 'auʻaunaga e faʻaaoga ai tekinolosi WebSocket. O le Raspberry Pi e su'e se leo, fuafua pe o se tagata patino mai le fa'amaumauga fa'amaumauga, ma tu'u atu se lisi e ono tula'i mai i le kalani. E fa'aalia e le kalani fa'amatalaga talafeagai lata mai, fa'aalia le avatar a le tagata e foliga mai na tautala i totonu o le masini faaleotele leo, fa'apea fo'i ma lagona na te fa'ailoa ai upu.
Itulau fa'ato'a fa'afou
iʻuga
E leʻi mafai ona faʻamaeʻaina mea uma e pei ona fuafuaina, naʻo le leai o se taimi, o le faʻamoemoe autu o le demo, o le a aoga mea uma. I le folasaga na latou talanoa ai pe fa'afefea ona galue mea uma, o a fa'ata'ita'iga na latou faia, o a fa'afitauli na latou feagai. Na soso'o ai ma le vaega fa'ata'ita'i - na savavali fa'ata'amilo le potu fa'ata'amilomilo ma fa'alatalata atu i 'au ta'itasi e va'ai i le fa'ata'ita'iga o lo'o galue. Na latou fesili mai foi ia i matou, na tali tagata uma i la latou vaega, na latou tuua le upega tafaʻilagi i luga o le komepiuta, ma o mea uma na aoga tele e pei ona faʻamoemoeina.
Sei ou matauina o le tau atoa o le matou fofo e $150:
Rasipi Pi 3 ~ $35
Google AIY Voice Bonnet (e mafai ona e ave se totogi o le failauga) ~ 15$
Intel NCS 2 ~ 100$
Auala e faaleleia ai:
Fa'aoga le resitala mai le kalani - fai atu e faitau le tusitusiga na fa'atupu fa'afuase'i
Fa'aopoopo nisi fa'ata'ita'iga: e mafai ona e iloa le itupa ma le matua ile leo
I le faaiuga, ou te fia fai atu le faafetai i le au faamaopoopo ma le au auai. Faatasi ai ma poloketi a isi 'au, matou te fiafia lava i le fofo mo le mataʻituina o avanoa paka. Mo i matou, o se mea manaia tele o le faatofuina i le oloa ma le atinaʻe. Ou te faʻamoemoe o le a sili atu ma sili atu mea mataʻina o le a faia i totonu o itulagi, e aofia ai mataupu AI.