OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ

نومبر 30 - ڊسمبر 1 Nizhny Novgorod ۾ منعقد ڪيو ويو OpenVINO hackathon. شرڪت ڪندڙن کي Intel OpenVINO ٽول ڪٽ استعمال ڪندي پراڊڪٽ حل جو هڪ پروٽوٽائپ ٺاهڻ لاءِ چيو ويو. منتظمين تقريبن عنوانن جي هڪ فهرست پيش ڪئي جيڪا هدايت ڪري سگهجي ٿي جڏهن ڪو ڪم چونڊيو، پر آخري فيصلو ٽيمن سان گڏ رهيو. ان کان سواء، ماڊل جو استعمال جيڪي پيداوار ۾ شامل نه آهن انهن کي همٿايو ويو.

OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ

هن آرٽيڪل ۾ اسين توهان کي ٻڌائي سگهنداسين ته اسان پنهنجي پروڊڪٽ جو پروٽوٽائپ ڪيئن ٺاهيو، جنهن سان اسان آخرڪار پهرين جڳهه ورتي.

هيڪاٿون ۾ 10 کان وڌيڪ ٽيمن حصو ورتو. اهو سٺو آهي ته انهن مان ڪجهه ٻين علائقن مان آيا آهن. هيڪاٿون جي جاءِ ”ڪريملنسڪي آن پوچين“ ڪمپليڪس هئي، جتي نزني نوگوروڊ جون قديم تصويرون ٽنگيل هيون، هڪ وفد ۾! (مان توهان کي ياد ڏياريان ٿو ته هن وقت Intel جي مرڪزي آفيس Nizhny Novgorod ۾ واقع آهي). شرڪت ڪندڙن کي ڪوڊ لکڻ لاء 26 ڪلاڪ ڏنا ويا، ۽ آخر ۾ انهن کي پنهنجو حل پيش ڪرڻو هو. هڪ الڳ فائدو هڪ ڊيمو سيشن جي موجودگي هئي انهي کي يقيني بڻائڻ ته هر شي جي منصوبابندي ڪئي وئي اصل ۾ عمل ڪيو ويو ۽ پريزنٽيشن ۾ خيالن جي باقي نه رهي. واپار، ناشتو، کاڌو، سڀ ڪجهه اتي به هو!

ان کان علاوه، Intel اختياري طور تي مهيا ڪيل ڪيمرا، Raspberry PI، Neural Compute Stick 2.

ڪم جي چونڊ

فري فارم هيڪاٿون لاءِ تياري ڪرڻ جو سڀ کان ڏکيو حصو هڪ چئلينج چونڊڻ آهي. اسان فوري طور تي فيصلو ڪيو ته ڪنهن شيءِ سان گڏ اچي جيڪا اڃا تائين پيداوار ۾ نه هئي، ڇاڪاڻ ته اعلان چيو ته اهو تمام گهڻو خوش آمديد آهي.

تجزيو ڪرڻ ماڊل، جيڪي موجوده رليز ۾ پراڊڪٽ ۾ شامل ڪيا ويا آهن، اسان ان نتيجي تي پهتا آهيون ته انهن مان گھڻا ڪمپيوٽر وژن جي مختلف مسئلن کي حل ڪن ٿا. ان کان علاوه، ڪمپيوٽر جي وژن جي ميدان ۾ هڪ مسئلو سان گڏ اچڻ تمام ڏکيو آهي جيڪو OpenVINO استعمال ڪندي حل نه ٿو ڪري سگهجي، ۽ جيتوڻيڪ هڪ ايجاد ٿي سگهي ٿو، عوامي ڊومين ۾ اڳ-تربيت ٿيل ماڊل ڳولڻ ڏکيو آهي. اسان فيصلو ڪريون ٿا ته ٻئي طرف کڄڻ - تقرير جي پروسيسنگ ۽ تجزياتي ڏانهن. اچو ته تقرير مان جذبات کي سڃاڻڻ جي هڪ دلچسپ ڪم تي غور ڪريون. اهو چوڻ گهرجي ته OpenVINO اڳ ۾ ئي هڪ ماڊل آهي جيڪو هڪ شخص جي جذبات کي پنهنجي منهن جي بنياد تي طئي ڪري ٿو، پر:

  • نظريي ۾، اهو ممڪن آهي ته هڪ گڏيل الورورٿم ٺاهيو جيڪو آواز ۽ تصوير ٻنهي تي ڪم ڪندو، جنهن جي درستگي کي وڌائڻ گهرجي.
  • ڪئميرا عام طور تي هڪ تنگ ڏسڻ وارو زاويه آهي؛ هڪ کان وڌيڪ ڪئميرا هڪ وڏي علائقي کي ڍڪڻ جي ضرورت آهي؛ آواز کي اهڙي حد نه هوندي آهي.

اچو ته خيال کي ترقي ڪريون: اچو ته خيال وٺون پرچون واري حصي لاءِ بنياد جي طور تي. توهان اسٽور چيڪ آئوٽ تي گراهڪ جي اطمينان جو اندازو لڳائي سگهو ٿا. جيڪڏهن گراهڪن مان هڪ خدمت سان مطمئن نه آهي ۽ پنهنجو سر بلند ڪرڻ شروع ڪري ٿو، توهان فوري طور تي مدد لاء منتظم کي سڏي سگهو ٿا.
انهي صورت ۾، اسان کي انساني آواز جي سڃاڻپ شامل ڪرڻ جي ضرورت آهي، اهو اسان کي اجازت ڏيندو ته اسٽور ملازمن کي گراهڪن کان ڌار ڪرڻ ۽ هر فرد لاء تجزياتي مهيا ڪرڻ. خير، اضافي طور تي، اهو ممڪن ٿيندو ته اسٽور جي ملازمن جي رويي جو تجزيو ڪرڻ، ٽيم ۾ ماحول جو جائزو وٺو، سٺو آواز!

اسان اسان جي حل لاء گهرجون ترتيب ڏيون ٿا:

  • حدف جي ڊوائس جي ننڍي سائيز
  • حقيقي وقت آپريشن
  • گھٽ قيمت
  • آسان اسڪاليبلٽي

نتيجي طور، اسان Raspberry Pi 3 c کي ٽارگيٽ ڊيوائس طور چونڊيو ٿا Intel NCS 2.

هتي اهو ضروري آهي ته NCS جي هڪ اهم خصوصيت کي نوٽ ڪيو وڃي - اهو معياري CNN آرڪيٽيڪچر سان بهترين ڪم ڪري ٿو، پر جيڪڏهن توهان کي ان تي ڪسٽم پرت سان ماڊل هلائڻ جي ضرورت آهي، ته پوء گهٽ سطح جي اصلاح جي توقع ڪريو.

ڪرڻ لاءِ صرف هڪ ننڍڙي شيءِ آهي: توهان کي هڪ مائڪرو فون وٺڻ جي ضرورت آهي. هڪ باقاعده USB مائڪروفون ڪندو، پر اهو RPI سان گڏ سٺو نه ٿيندو. پر هتي به حل لفظي طور تي "ويجهو آهي." آواز کي رڪارڊ ڪرڻ لاء، اسان کٽ مان وائس بونٽ بورڊ استعمال ڪرڻ جو فيصلو ڪيو گوگل AIY وائس ڪٽ، جنهن تي هڪ وائرڊ اسٽيريو مائڪروفون آهي.

Raspbian تان ڊائون لوڊ ڪريو AIY منصوبن جي مخزن ۽ ان کي فليش ڊرائيو تي اپلوڊ ڪريو، ٽيسٽ ڪريو ته مائڪروفون ھيٺ ڏنل ڪمانڊ استعمال ڪندي ڪم ڪري ٿو (اهو 5 سيڪنڊن جو ڊگھو آڊيو رڪارڊ ڪندو ۽ ان کي فائل ۾ محفوظ ڪندو):

arecord -d 5 -r 16000 test.wav

مون کي فوري طور تي نوٽ ڪرڻ گهرجي ته مائڪروفون تمام حساس آهي ۽ شور کي چڱي طرح کڻندو آهي. هن کي درست ڪرڻ لاءِ، اچو ته alsamixer ڏانهن وڃو، ڪيپچر ڊوائيسز چونڊيو ۽ ان پٽ سگنل جي سطح کي 50-60٪ تائين گھٽايو.

OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ
اسان جسم کي ھڪڙي فائل سان تبديل ڪريون ٿا ۽ سڀ ڪجھ ٺھيل آھي، توھان ان کي بند ڪري سگھوٿا لڪي سان

هڪ اشارو بٽڻ شامل ڪرڻ

AIY وائس ڪٽ کي ڌار ڪرڻ دوران، اسان کي ياد آهي ته اتي هڪ RGB بٽڻ آهي، جنهن جي پٺڀرائي کي سافٽ ويئر ذريعي ڪنٽرول ڪري سگهجي ٿو. اسان "Google AIY Led" جي ڳولا ڪريون ٿا ۽ دستاويز ڳوليون ٿا: https://aiyprojects.readthedocs.io/en/latest/aiy.leds.html
تسليم ٿيل جذبن کي ظاهر ڪرڻ لاءِ هي بٽڻ ڇو نه استعمال ڪيو وڃي، اسان وٽ صرف 7 طبقا آهن، ۽ بٽڻ ۾ 8 رنگ آهن، بس!

اسان بٽڻ کي GPIO ذريعي وائيس بونٽ سان ڳنڍيون ٿا، ضروري لائبريريون لوڊ ڪريو (اهي اڳ ۾ ئي AIY پروجيڪٽ جي تقسيم کٽ ۾ نصب ٿيل آهن)

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

اچو ته هڪ ڊڪٽ ٺاهيون جنهن ۾ هر جذبي جو رنگ هوندو RGB Tuple جي شڪل ۾ ۽ هڪ اعتراض aiy.leds.Leds جي شڪل ۾، جنهن ذريعي اسين رنگ کي اپڊيٽ ڪنداسين:

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 تي آواز ۽ جذبات کي سڃاڻڻ
بٽڻ، ساڙيو!

آواز سان ڪم ڪرڻ

اسان pyaudio استعمال ڪنداسين وهڪرو کي پڪڙڻ لاءِ مائڪروفون ۽ webrtcvad مان فلٽر شور ۽ آواز کي سڃاڻڻ لاءِ. اضافي طور تي، اسان هڪ قطار ٺاهينداسين جنهن ۾ اسين غير مطابقت سان شامل ڪنداسين ۽ آواز جي حوالن کي ختم ڪنداسين.

جيئن ته webrtcvad کي فراهم ڪيل ٽڪرا جي سائيز تي هڪ حد آهي - اهو 10/20/30ms جي برابر هجڻ گهرجي، ۽ جذبات کي سڃاڻڻ جي ماڊل جي تربيت (جيئن ته اسان بعد ۾ سکنداسين) 48kHz ڊيٽا سيٽ تي ڪيو ويو، اسان ڪنداسين. 48000 × 20ms / 1000 × 1 (مونو) = 960 بائيٽ جي ماپ جا حصا قبضو ڪريو. Webrtcvad انهن مان هر هڪ لاء صحيح/غلط واپس ڪندو، جيڪو حصو ۾ ووٽ جي موجودگي يا غير موجودگي سان ملندو آهي.

اچو ته هيٺين منطق کي لاڳو ڪريو:

  • اسان لسٽ ۾ اهي ٽڪرا شامل ڪنداسين جتي ووٽ آهي، جيڪڏهن ووٽ نه آهي، ته اسان خالي ٽڪرن جي ڪائونٽر کي وڌائينداسين.
  • جيڪڏهن خالي ٽڪرن جو ڪائونٽر >=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 = []

اهو عوامي ڊومين ۾ اڳ-تربيت ٿيل ماڊل ڳولڻ جو وقت آهي، گٿب، گوگل ڏانهن وڃو، پر ياد رکو ته اسان وٽ استعمال ٿيل فن تعمير تي هڪ حد آهي. اھو ھڪڙو مشڪل حصو آھي، ڇاڪاڻ⁠تہ توھان کي پنھنجي ان پٽ ڊيٽا تي ماڊلز کي جانچڻو پوندو، ۽ اضافي طور تي، انھن کي OpenVINO جي اندروني شڪل ۾ تبديل ڪريو - IR (وچولي نمائندگي). اسان گيٿب کان اٽڪل 5-7 مختلف حلن جي ڪوشش ڪئي، ۽ جيڪڏهن جذبات کي سڃاڻڻ لاء ماڊل فوري طور تي ڪم ڪيو، پوء آواز جي سڃاڻپ سان اسان کي وڌيڪ انتظار ڪرڻو پوندو - اهي وڌيڪ پيچيده فن تعمير استعمال ڪندا آهن.

اسان هيٺين تي ڌيان ڏيون ٿا:

  • آواز مان جذبات - https://github.com/alexmuhr/Voice_Emotion
    اهو هيٺ ڏنل اصول مطابق ڪم ڪري ٿو: آڊيو هڪ خاص سائيز جي پاسن ۾ ڪٽيو ويندو آهي، انهن مان هر هڪ لاءِ اسان چونڊون ٿا ايم ايف سي سي ۽ پوءِ انھن کي انپٽ طور CNN ڏانھن موڪليو
  • آواز جي سڃاڻپ - https://github.com/linhdvu14/vggvox-speaker-identification
    هتي، MFCC جي بدران، اسان هڪ اسپيڪٽروگرام سان ڪم ڪريون ٿا، FFT کان پوء اسان CNN ڏانهن سگنل کي فيڊ ڪندا آهيون، جتي اسان کي آواز جي ویکٹر جي نمائندگي ملندي آهي.

اڳيون اسان ماڊل کي تبديل ڪرڻ بابت ڳالهائينداسين، نظريي سان شروع ڪندي. OpenVINO ۾ ڪيترائي ماڊل شامل آھن:

  • کوليو ماڊل زو، ماڊل جن مان استعمال ٿي سگھي ٿو ۽ توھان جي پيداوار ۾ شامل آھي
  • Model Optimzer، جنهن جي مهرباني توهان هڪ ماڊل کي مختلف فريم ورڪ فارميٽس (Tensorflow، ONNX وغيره) مان بدلائي سگهو ٿا انٽرميڊيٽ ريپريزنٽيشن فارميٽ ۾، جنهن سان اسان اڳتي ڪم ڪنداسين.
  • Inference Engine توهان کي IR فارميٽ ۾ ماڊل هلائڻ جي اجازت ڏئي ٿي Intel پروسيسرز، Myriad chips ۽ Neural Compute Stick Accelerators تي
  • OpenCV جو سڀ کان وڌيڪ موثر نسخو (انفرنس انجڻ جي مدد سان)
    IR فارميٽ ۾ هر ماڊل ٻن فائلن ذريعي بيان ڪيو ويو آهي: .xml ۽ .bin.
    ماڊلز ھيٺ ڏنل ماڊل آپٽمائزر ذريعي 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 ان پٽ ڊيٽا جي طول و عرض کي ظاهر ڪري ٿو. متحرڪ طور تي تبديل ڪرڻ جي صلاحيت اها لڳي ٿي C ++ API ۾ موجود آهي، پر اسان اهو نه کڙو ڪيو ۽ صرف ان کي هڪ ماڊل لاءِ مقرر ڪيو.
    اڳيون، اچو ته اڳ ۾ ئي تبديل ٿيل ماڊل کي IR فارميٽ ۾ ڊي اين اين ماڊل ذريعي OpenCV ۾ لوڊ ڪرڻ جي ڪوشش ڪريون ۽ ان کي اڳتي وڌايو.

    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 جي صورت ۾ اهو ڪم نه ڪندو، توهان کي هڪ لٺ جي ضرورت پوندي.

    اڳيون، منطق هن ريت آهي: اسان پنهنجي آڊيو کي هڪ خاص سائيز جي ونڊوز ۾ ورهايو آهي (اسان لاءِ اهو 0.4 s آهي)، اسان انهن مان هر هڪ ونڊوز کي MFCC ۾ تبديل ڪريون ٿا، جنهن کي اسين پوءِ گرڊ ۾ فيڊ ڪندا آهيون:

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

    اڳيون، اچو ته سڀني ونڊوز لاءِ سڀ کان عام ڪلاس وٺون. هڪ سادو حل، پر هڪ هيڪاٿون لاءِ توهان کي ضرورت نه آهي ته ڪنهن به غير معمولي شيءِ سان اچي، صرف جيڪڏهن توهان وٽ وقت هجي. اسان کي اڃا تائين تمام گهڻو ڪم ڪرڻو آهي، سو اچو ته اڳتي وڌون- آواز جي سڃاڻپ سان ڊيل ڪنداسين. ان لاءِ ضروري آهي ته ڪنهن قسم جو ڊيٽابيس ٺاهيو وڃي جنهن ۾ اڳ ۾ رڪارڊ ٿيل آوازن جا اسپيڪٽرگرام محفوظ ڪيا وڃن. جيئن ته ٿورو وقت بچيو آهي، اسان هن مسئلي کي بهتر طور تي حل ڪنداسين.

    يعني، اسان آواز جي اقتباس کي رڪارڊ ڪرڻ لاءِ هڪ اسڪرپٽ ٺاهيندا آهيون (اهو ساڳئي طريقي سان ڪم ڪندو آهي جيئن مٿي بيان ڪيو ويو آهي، صرف ان صورت ۾ جڏهن ڪيبورڊ مان روڪيو ويندو ته اهو آواز کي فائل ۾ محفوظ ڪندو).

    اچو ڪوشش ڪريون:

    python3 voice_db/record_voice.py test.wav

    اسان ڪيترن ئي ماڻهن جا آواز رڪارڊ ڪريون ٿا (اسان جي صورت ۾، ٽيم جا ٽي ميمبر)
    اڳيون، هر رڪارڊ ٿيل آواز لاءِ اسان هڪ تيز فورئر ٽرانسفارم انجام ڏيون ٿا، هڪ اسپيڪٽروگرام حاصل ڪريون ٿا ۽ ان کي محفوظ ڪريون ٿا نمپي ايري (.npy):

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

    وڌيڪ تفصيل فائل ۾ create_base.py
    نتيجي طور، جڏهن اسان مکيه اسڪرپٽ کي هلائيندا آهيون، اسان کي شروعات ۾ انهن اسپيڪٽرگرامس مان ايمبيڊنگ حاصل ڪنداسين:

    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)

    سائونڊ ٿيل حصي مان ايمبيڊنگ حاصل ڪرڻ کان پوءِ، اسان اهو اندازو لڳائي سگهنداسين ته اهو ڪنهن سان تعلق رکي ٿو پاسن کان ڪوسائن جي فاصلي کي ڊيٽابيس ۾ سڀني آوازن تائين (ننڍو، وڌيڪ ممڪن آهي) - ڊيمو لاءِ اسان حد مقرر ڪريون ٿا. 0.3 تائين):

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

    آخر ۾، مان اهو نوٽ ڪرڻ چاهيان ٿو ته انفرنس جي رفتار تيز هئي ۽ ان کي 1-2 وڌيڪ ماڊل شامل ڪرڻ ممڪن بڻايو (نمونءَ لاءِ 7 سيڪنڊن لاءِ اهو 2.5 ورتو). اسان وٽ هاڻي وقت نه هو نوان ماڊل شامل ڪرڻ ۽ ويب ايپليڪيشن جي هڪ پروٽوٽائپ لکڻ تي ڌيان ڏيڻ.

    ويب ايپليڪيشن

    هڪ اهم نقطو: اسان گهر مان اسان سان گڏ هڪ روٽر وٺي وڃون ٿا ۽ اسان جو مقامي نيٽ ورڪ سيٽ ڪريو، اهو نيٽ ورڪ تي ڊوائيس ۽ ليپ ٽاپ کي ڳنڍڻ ۾ مدد ڪري ٿو.

    پس منظر هڪ آخر کان آخر تائين پيغام چينل آهي سامهون ۽ Raspberry Pi جي وچ ۾، ويب ساکٽ ٽيڪنالاجي تي ٻڌل آهي (http مٿان tcp پروٽوڪول).

    پهريون مرحلو راسبري کان پروسيس ٿيل معلومات حاصل ڪرڻ آهي، يعني json ۾ ڀريل اڳڪٿي ڪندڙ، جيڪي ڊيٽابيس ۾ محفوظ ڪيا ويندا آهن انهن جي سفر جي اڌ رستي ۾ ته جيئن انگ اکر ٺاهي سگهجن ٿيون صارف جي جذباتي پس منظر جي باري ۾. هي پيڪٽ پوءِ فرنٽ اينڊ ڏانهن موڪليو ويو آهي، جيڪو سبسڪرپشن استعمال ڪري ٿو ۽ ويب ساکٽ جي آخري پوائنٽ کان پيڪيٽ وصول ڪري ٿو. سڄو پس منظر ميڪانيزم گولانگ ٻولي ۾ ٺهيل آهي؛ اهو چونڊيو ويو آهي ڇاڪاڻ ته اهو غير مطابقت واري ڪمن لاء مناسب آهي، جيڪي گوروٽين کي چڱي طرح سنڀاليندا آهن.
    جڏهن آخري نقطي تائين رسائي، صارف رجسٽر ٿيل آهي ۽ ساخت ۾ داخل ٿيو، پوء هن جو پيغام ملي ٿو. ٻئي صارف ۽ پيغام هڪ عام حب ۾ داخل ڪيا ويا آهن، جتان پيغام اڳ ۾ ئي موڪليا ويا آهن (سبسڪرائب ٿيل فرنٽ ڏانهن)، ۽ جيڪڏهن صارف ڪنيڪشن بند ڪري ٿو (رسبري يا سامهون)، ته پوء هن جي رڪنيت کي منسوخ ڪيو ويندو آهي ۽ هن کي هٽايو ويندو آهي. مرڪز

    OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ
    اسان پوئتي کان ڪنيڪشن جي انتظار ۾ آهيون

    فرنٽ-اينڊ هڪ ويب ايپليڪيشن آهي جيڪا JavaScript ۾ لکيل آهي React لائبريري استعمال ڪندي ترقي جي عمل کي تيز ڪرڻ ۽ آسان ڪرڻ لاءِ. هن ائپليڪيشن جو مقصد اهو آهي ته حاصل ڪيل ڊيٽا کي ڏسڻ لاءِ الورورٿم استعمال ڪندي پٺتي پيل پاسي تي ۽ سڌو سنئون Raspberry Pi تي. صفحي ۾ سيڪشنل روٽنگ لاڳو ڪئي وئي آهي react-router استعمال ڪندي، پر دلچسپي جو مکيه صفحو مکيه صفحو آهي، جتي ڊيٽا جو هڪ مسلسل وهڪرو اصل وقت ۾ سرور کان WebSocket ٽيڪنالاجي استعمال ڪندي وصول ڪيو ويندو آهي. Raspberry Pi هڪ آواز ڳولي ٿو، اهو طئي ڪري ٿو ته ڇا اهو رجسٽرڊ ڊيٽابيس مان هڪ مخصوص شخص سان تعلق رکي ٿو، ۽ ڪلائنٽ ڏانهن امڪاني لسٽ موڪلي ٿو. ڪلائنٽ تازو لاڳاپيل ڊيٽا ڏيکاري ٿو، ان شخص جو اوتار ڏيکاري ٿو جيڪو گهڻو ڪري مائڪروفون ۾ ڳالهائيندو آهي، انهي سان گڏ جذبات جنهن سان هو لفظن کي بيان ڪري ٿو.

    OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ
    تازه ڪاري اڳڪٿين سان هوم صفحو

    ٿڪل

    اهو ممڪن نه هو ته هر شي کي مڪمل ڪرڻ جي منصوبابندي مطابق، اسان وٽ صرف وقت نه هو، تنهنڪري بنيادي اميد ڊيم ۾ هئي، ته سڀ ڪجهه ڪم ڪندو. پريزنٽيشن ۾ انهن بابت ڳالهايو ته هر شي ڪيئن ڪم ڪري ٿي، انهن ڪهڙي نموني ورتي، انهن کي ڪهڙيون مشڪلاتون پيش آيون. اڳيون ڊيمو حصو هو - ماهر بي ترتيب ترتيب سان ڪمري جي چوڌاري گھمندا هئا ۽ ڪم ڪندڙ پروٽوٽائپ کي ڏسڻ لاءِ هر ٽيم سان رابطو ڪيو. انهن اسان کان سوال به پڇيا، هر ڪنهن پنهنجي حصي جو جواب ڏنو، انهن ليپ ٽاپ تي ويب ڇڏي ڏنو، ۽ هر شيءِ واقعي توقع جي مطابق ڪم ڪيو.

    مون کي نوٽ ڪرڻ ڏيو ته اسان جي حل جي ڪل قيمت هئي $150:

    • Raspberry Pi 3 ~ $35
    • گوگل AIY وائيس بونٽ (توهان وٺي سگهو ٿا ريسپيڪر فيس) ~ 15$
    • Intel NCS 2 ~ 100$

    ڪيئن بهتر ڪرڻ:

    • ڪلائنٽ کان رجسٽريشن استعمال ڪريو - متن پڙهڻ لاءِ پڇو جيڪو بي ترتيب سان ٺاهيل آهي
    • ڪجھ وڌيڪ ماڊل شامل ڪريو: توھان آواز سان صنف ۽ عمر جو اندازو لڳائي سگھو ٿا
    • الڳ الڳ الڳ الڳ آواز (ڊائرائزيشن)

    مخزن: https://github.com/vladimirwest/OpenEMO

    OpenVINO hackathon: Raspberry Pi تي آواز ۽ جذبات کي سڃاڻڻ
    ٿڪل آهيون پر خوش آهيون

    آخر ۾، مان چاهيان ٿو ته منتظمين ۽ شرڪت ڪندڙن جي مهرباني. ٻين ٽيمن جي منصوبن ۾، اسان ذاتي طور تي مفت پارڪنگ جي جڳهن جي نگراني لاء حل پسند ڪيو. اسان لاءِ، اها پيداوار ۽ ترقي ۾ وسعت جو هڪ جهنگلي ٿڌو تجربو هو. مون کي اميد آهي ته علائقن ۾ وڌيڪ ۽ وڌيڪ دلچسپ واقعا منعقد ڪيا ويندا، بشمول AI عنوانن تي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو