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.

OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi

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%.

OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
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:

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()

Ma le mea mulimuli, pe a maeʻa faʻamatalaga fou o se lagona, matou te faʻafouina le lanu o le ki e tusa ai ma ia (e ala i le ki).

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

OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
Ki, mu!

Galulue ma le leo

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:

    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 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):

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

    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.

    OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
    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.

    OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
    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
    • Vaevae fa'atasi leo fa'alogo (diarization)

    faleteuoloa: https://github.com/vladimirwest/OpenEMO

    OpenVINO hackathon: iloa leo ma lagona i luga ole Raspberry Pi
    Ua tatou vaivai ae ua tatou fiafia

    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.

puna: www.habr.com

Faaopoopo i ai se faamatalaga