OpenVINO ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا

30 نومبر - 1 دسمبر کو نزنی نوگوروڈ میں منعقد ہوا۔ OpenVINO ہیکاتھون. شرکاء سے کہا گیا کہ وہ Intel OpenVINO ٹول کٹ کا استعمال کرتے ہوئے پروڈکٹ سلوشن کا پروٹو ٹائپ بنائیں۔ منتظمین نے تقریباً عنوانات کی ایک فہرست تجویز کی جن سے کسی کام کا انتخاب کرتے وقت رہنمائی کی جا سکتی تھی، لیکن حتمی فیصلہ ٹیموں کے پاس رہا۔ اس کے علاوہ، ایسے ماڈلز کے استعمال کی حوصلہ افزائی کی گئی جو پروڈکٹ میں شامل نہیں ہیں۔

OpenVINO ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا

اس آرٹیکل میں ہم آپ کو بتائیں گے کہ ہم نے اپنے پروڈکٹ کا پروٹو ٹائپ کیسے بنایا، جس کے ساتھ ہم نے آخرکار پہلی پوزیشن حاصل کی۔

ہیکاتھون میں 10 سے زائد ٹیموں نے حصہ لیا۔ یہ اچھی بات ہے کہ ان میں سے کچھ دوسرے علاقوں سے آئے ہیں۔ ہیکاتھون کا مقام "کریملنسکی آن پوچین" کمپلیکس تھا، جہاں نزنی نووگوروڈ کی قدیم تصاویر ایک وفد کے اندر لٹکی ہوئی تھیں! (میں آپ کو یاد دلاتا ہوں کہ اس وقت انٹیل کا مرکزی دفتر نزنی نوگوروڈ میں واقع ہے)۔ شرکاء کو کوڈ لکھنے کے لیے 26 گھنٹے کا وقت دیا گیا، اور آخر میں انہیں اپنا حل پیش کرنا تھا۔ ایک الگ فائدہ ڈیمو سیشن کی موجودگی تھا تاکہ یہ یقینی بنایا جا سکے کہ منصوبہ بندی کی گئی ہر چیز کو حقیقت میں لاگو کیا گیا تھا اور پریزنٹیشن میں خیالات باقی نہیں رہتے تھے۔ سامان، نمکین، کھانا، سب کچھ وہاں بھی تھا!

اس کے علاوہ، Intel نے اختیاری طور پر کیمرے، Raspberry PI، Neural Compute Stick 2 فراہم کیے ہیں۔

ٹاسک سلیکشن

فری فارم ہیکاتھون کی تیاری کے سب سے مشکل حصوں میں سے ایک چیلنج کا انتخاب کرنا ہے۔ ہم نے فوری طور پر ایسی چیز کے ساتھ آنے کا فیصلہ کیا جو ابھی تک پروڈکٹ میں نہیں تھی، کیونکہ اعلان میں کہا گیا کہ یہ انتہائی خوش آئند ہے۔

تجزیہ کر کے ماڈل، جو موجودہ ریلیز میں مصنوعات میں شامل ہیں، ہم اس نتیجے پر پہنچے ہیں کہ ان میں سے اکثر کمپیوٹر کے وژن کے مختلف مسائل کو حل کرتے ہیں۔ مزید یہ کہ کمپیوٹر ویژن کے شعبے میں کسی مسئلے کا سامنے آنا بہت مشکل ہے جسے OpenVINO کے ذریعے حل نہیں کیا جا سکتا، اور اگر کوئی ایجاد بھی ہو جائے تو عوامی ڈومین میں پہلے سے تربیت یافتہ ماڈلز تلاش کرنا مشکل ہے۔ ہم ایک اور سمت کھودنے کا فیصلہ کرتے ہیں - اسپیچ پروسیسنگ اور تجزیات کی طرف۔ آئیے تقریر سے جذبات کو پہچاننے کے ایک دلچسپ کام پر غور کرتے ہیں۔ یہ کہنا ضروری ہے کہ OpenVINO کے پاس پہلے سے ہی ایک ماڈل موجود ہے جو کسی شخص کے چہرے کی بنیاد پر اس کے جذبات کا تعین کرتا ہے، لیکن:

  • نظریہ میں، ایک مشترکہ الگورتھم بنانا ممکن ہے جو آواز اور تصویر دونوں پر کام کرے گا، جس سے درستگی میں اضافہ ہونا چاہیے۔
  • کیمروں میں عام طور پر دیکھنے کا زاویہ تنگ ہوتا ہے؛ ایک بڑے علاقے کو ڈھانپنے کے لیے ایک سے زیادہ کیمروں کی ضرورت ہوتی ہے؛ آواز کی ایسی کوئی حد نہیں ہوتی۔

آئیے آئیڈیا تیار کریں: آئیے ریٹیل سیگمنٹ کے آئیڈیا کو بنیاد کے طور پر لیں۔ آپ سٹور چیک آؤٹ پر گاہک کی اطمینان کی پیمائش کر سکتے ہیں۔ اگر گاہک میں سے کوئی سروس سے مطمئن نہیں ہے اور اپنا لہجہ بلند کرنا شروع کر دیتا ہے، تو آپ فوری طور پر ایڈمنسٹریٹر کو مدد کے لیے کال کر سکتے ہیں۔
اس صورت میں، ہمیں انسانی آواز کی شناخت کو شامل کرنے کی ضرورت ہے، یہ ہمیں اسٹور کے ملازمین کو صارفین سے ممتاز کرنے اور ہر فرد کے لیے تجزیات فراہم کرنے کی اجازت دے گا۔ ٹھیک ہے، اس کے علاوہ، یہ خود سٹور ملازمین کے رویے کا تجزیہ کرنے کے لئے ممکن ہو جائے گا، ٹیم میں ماحول کا اندازہ، اچھا لگتا ہے!

ہم اپنے حل کے لیے تقاضے مرتب کرتے ہیں:

  • ٹارگٹ ڈیوائس کا چھوٹا سائز
  • ریئل ٹائم آپریشن
  • کم قیمت
  • آسان اسکیل ایبلٹی

نتیجے کے طور پر، ہم Raspberry Pi 3 c کو ہدف آلہ کے طور پر منتخب کرتے ہیں۔ انٹیل این سی ایس 2.

یہاں این سی ایس کی ایک اہم خصوصیت کو نوٹ کرنا ضروری ہے - یہ معیاری CNN فن تعمیر کے ساتھ بہترین کام کرتا ہے، لیکن اگر آپ کو اس پر اپنی مرضی کے مطابق پرتوں کے ساتھ ماڈل چلانے کی ضرورت ہے، تو کم سطح کی اصلاح کی توقع کریں۔

بس ایک چھوٹی سی چیز ہے: آپ کو مائیکروفون لینا ہوگا۔ ایک باقاعدہ USB مائکروفون کرے گا، لیکن یہ RPI کے ساتھ اچھا نہیں لگے گا۔ لیکن یہاں تک کہ حل لفظی طور پر "قریب ہی میں پڑا ہے۔" آواز ریکارڈ کرنے کے لیے، ہم کٹ سے وائس بونٹ بورڈ استعمال کرنے کا فیصلہ کرتے ہیں۔ گوگل AIY وائس کٹ، جس پر ایک وائرڈ سٹیریو مائکروفون ہے۔

Raspbian سے ڈاؤن لوڈ کریں۔ AIY پروجیکٹس کا ذخیرہ اور اسے فلیش ڈرائیو پر اپ لوڈ کریں، ٹیسٹ کریں کہ مائیکروفون درج ذیل کمانڈ کا استعمال کرتے ہوئے کام کرتا ہے (یہ 5 سیکنڈ طویل آڈیو ریکارڈ کرے گا اور اسے فائل میں محفوظ کرے گا):

arecord -d 5 -r 16000 test.wav

مجھے فوری طور پر نوٹ کرنا چاہئے کہ مائکروفون بہت حساس ہے اور شور کو اچھی طرح سے اٹھاتا ہے۔ اسے ٹھیک کرنے کے لیے، آئیے alsamixer پر جائیں، Capture devices کو منتخب کریں اور ان پٹ سگنل کی سطح کو 50-60% تک کم کریں۔

OpenVINO ہیکاتھون: 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

آئیے ایک ڈکٹ بناتے ہیں جس میں ہر جذبات کا ایک آر جی بی ٹوپل کی شکل میں ایک متعلقہ رنگ ہوگا اور 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 ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا
بٹن، جلائیں!

آواز کے ساتھ کام کرنا

ہم شور کو فلٹر کرنے اور آواز کا پتہ لگانے کے لیے مائیکروفون اور webrtcvad سے اسٹریم کیپچر کرنے کے لیے paudio کا استعمال کریں گے۔ اس کے علاوہ، ہم ایک قطار بنائیں گے جس میں ہم صوتی اقتباسات کو متضاد طور پر شامل اور ہٹا دیں گے۔

چونکہ webrtcvad میں فراہم کردہ ٹکڑے کے سائز پر ایک حد ہے - یہ 10/20/30ms کے برابر ہونا چاہیے، اور جذبات کو پہچاننے کے لیے ماڈل کی تربیت (جیسا کہ ہم بعد میں سیکھیں گے) 48kHz ڈیٹا سیٹ پر کی گئی تھی، ہم 48000×20ms/1000×1 (مونو) = 960 بائٹس کے ٹکڑوں کو کیپچر کریں۔ 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 = []

یہ عوامی ڈومین میں پہلے سے تربیت یافتہ ماڈلز کو تلاش کرنے کا وقت ہے، گیتھب، گوگل پر جائیں، لیکن یاد رکھیں کہ ہمارے استعمال کردہ فن تعمیر پر ایک حد ہے۔ یہ کافی مشکل حصہ ہے، کیونکہ آپ کو اپنے ان پٹ ڈیٹا پر ماڈلز کی جانچ کرنی ہے، اور اس کے علاوہ، انہیں OpenVINO کے اندرونی فارمیٹ - IR (انٹرمیڈیٹ ریپریزنٹیشن) میں تبدیل کرنا ہے۔ ہم نے گیتھب سے تقریباً 5-7 مختلف حل آزمائے، اور اگر جذبات کو پہچاننے کا ماڈل فوری طور پر کام کرتا ہے، تو آواز کی شناخت کے ساتھ ہمیں زیادہ انتظار کرنا پڑے گا - وہ زیادہ پیچیدہ فن تعمیر کا استعمال کرتے ہیں۔

ہم مندرجہ ذیل پر توجہ مرکوز کرتے ہیں:

  • آواز سے جذبات - https://github.com/alexmuhr/Voice_Emotion
    یہ مندرجہ ذیل اصول کے مطابق کام کرتا ہے: آڈیو کو ایک مخصوص سائز کے حصئوں میں کاٹا جاتا ہے، ان میں سے ہر ایک کے لیے ہم منتخب کرتے ہیں۔ ایم ایف سی سی اور پھر انہیں بطور ان پٹ CNN پر جمع کروائیں۔
  • آواز کی پہچان - https://github.com/linhdvu14/vggvox-speaker-identification
    یہاں، MFCC کے بجائے، ہم ایک سپیکٹروگرام کے ساتھ کام کرتے ہیں، FFT کے بعد ہم CNN کو سگنل فیڈ کرتے ہیں، جہاں آؤٹ پٹ پر ہمیں آواز کی ویکٹر کی نمائندگی ملتی ہے۔

اگلا ہم تھیوری سے شروع کرتے ہوئے ماڈلز کو تبدیل کرنے کے بارے میں بات کریں گے۔ OpenVINO میں کئی ماڈیولز شامل ہیں:

  • Model Zoo کھولیں، وہ ماڈل جن سے آپ کے پروڈکٹ میں استعمال اور شامل کیا جا سکتا ہے۔
  • ماڈل آپٹیمزر، جس کی بدولت آپ مختلف فریم ورک فارمیٹس (ٹینسر فلو، او این این ایکس وغیرہ) سے ایک ماڈل کو انٹرمیڈیٹ ریپریزنٹیشن فارمیٹ میں تبدیل کر سکتے ہیں، جس کے ساتھ ہم مزید کام کریں گے۔
  • انفرنس انجن آپ کو انٹیل پروسیسرز، ہزارہا چپس اور نیورل کمپیوٹ اسٹک ایکسلریٹر پر IR فارمیٹ میں ماڈل چلانے کی اجازت دیتا ہے۔
  • اوپن سی وی کا سب سے موثر ورژن (انفرنس انجن سپورٹ کے ساتھ)
    IR فارمیٹ میں ہر ماڈل کو دو فائلوں کے ذریعے بیان کیا گیا ہے: .xml اور .bin۔
    ماڈلز کو 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 ان پٹ ڈیٹا کے طول و عرض کی نشاندہی کرتا ہے۔ ایسا لگتا ہے کہ اسے متحرک طور پر تبدیل کرنے کی صلاحیت C++ API میں موجود ہے، لیکن ہم نے اس حد تک کھود نہیں کی اور اسے صرف ایک ماڈل کے لیے طے کیا۔
    اس کے بعد، آئیے پہلے سے تبدیل شدہ ماڈل کو IR فارمیٹ میں DNN ماڈیول کے ذریعے OpenCV میں لوڈ کرنے کی کوشش کریں اور اسے آگے بھیج دیں۔

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

    اس معاملے میں آخری لائن آپ کو حسابات کو نیورل کمپیوٹ اسٹک پر بھیجنے کی اجازت دیتی ہے، بنیادی حسابات پروسیسر پر کیے جاتے ہیں، لیکن Raspberry Pi کے معاملے میں یہ کام نہیں کرے گا، آپ کو ایک چھڑی کی ضرورت ہوگی۔

    اگلا، منطق مندرجہ ذیل ہے: ہم اپنے آڈیو کو ایک مخصوص سائز کی ونڈوز میں تقسیم کرتے ہیں (ہمارے لیے یہ 0.4 s ہے)، ہم ان میں سے ہر ایک کو MFCC میں تبدیل کرتے ہیں، جسے ہم پھر گرڈ میں فیڈ کرتے ہیں:

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

    اگلا، آئیے تمام ونڈوز کے لیے سب سے عام کلاس لیتے ہیں۔ ایک آسان حل، لیکن ایک ہیکاتھون کے لیے آپ کو کچھ بہت زیادہ بے معنی چیز کے ساتھ آنے کی ضرورت نہیں ہے، صرف اس صورت میں جب آپ کے پاس وقت ہو۔ ہمارے پاس ابھی بھی بہت سا کام باقی ہے، تو آئیے آگے بڑھتے ہیں - ہم آواز کی شناخت سے نمٹیں گے۔ کسی قسم کا ڈیٹا بیس بنانا ضروری ہے جس میں پہلے سے ریکارڈ شدہ آوازوں کے سپیکٹروگرام محفوظ کیے جائیں گے۔ چونکہ ابھی بہت کم وقت باقی ہے، اس لیے ہم اس مسئلے کو ہر ممکن طریقے سے حل کریں گے۔

    یعنی، ہم صوتی اقتباس کو ریکارڈ کرنے کے لیے ایک اسکرپٹ بناتے ہیں (یہ اسی طرح کام کرتا ہے جیسا کہ اوپر بیان کیا گیا ہے، صرف اس صورت میں جب کی بورڈ سے مداخلت کی جائے گی تو یہ آواز کو فائل میں محفوظ کرے گا)۔

    کوشش کرتے ہیں:

    python3 voice_db/record_voice.py test.wav

    ہم کئی لوگوں کی آوازیں ریکارڈ کرتے ہیں (ہمارے معاملے میں، ٹیم کے تین ارکان)
    اس کے بعد، ہر ریکارڈ شدہ آواز کے لیے ہم ایک تیز رفتار تبدیلی کرتے ہیں، ایک سپیکٹروگرام حاصل کرتے ہیں اور اسے 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
    نتیجے کے طور پر، جب ہم مرکزی اسکرپٹ کو چلاتے ہیں، تو ہمیں شروع میں ہی ان سپیکٹروگرامس سے ایمبیڈنگس ملیں گے:

    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 پروٹوکول) پر مبنی ہے۔

    پہلا مرحلہ raspberry سے پراسیس شدہ معلومات حاصل کرنا ہے، یعنی json میں بھری پیشین گوئیاں، جو ڈیٹا بیس میں ان کے سفر کے آدھے راستے میں محفوظ کر دی جاتی ہیں تاکہ اس مدت کے لیے صارف کے جذباتی پس منظر کے بارے میں اعدادوشمار تیار کیے جا سکیں۔ اس کے بعد یہ پیکٹ فرنٹ اینڈ پر بھیجا جاتا ہے، جو سبسکرپشن کا استعمال کرتا ہے اور ویب ساکٹ اینڈ پوائنٹ سے پیکٹ وصول کرتا ہے۔ پورا بیک اینڈ میکانزم گولانگ زبان میں بنایا گیا ہے؛ اس کا انتخاب اس لیے کیا گیا کہ یہ غیر مطابقت پذیر کاموں کے لیے موزوں ہے، جنہیں گوروٹینز اچھی طرح سے ہینڈل کرتے ہیں۔
    اختتامی نقطہ تک رسائی حاصل کرتے وقت، صارف رجسٹرڈ ہوتا ہے اور ڈھانچے میں داخل ہوتا ہے، پھر اس کا پیغام موصول ہوتا ہے۔ صارف اور پیغام دونوں ایک مشترکہ مرکز میں داخل ہوتے ہیں، جہاں سے پیغامات پہلے ہی آگے بھیجے جاتے ہیں (سبسکرائب شدہ فرنٹ کو)، اور اگر صارف کنکشن بند کر دیتا ہے (رسبری یا فرنٹ)، تو اس کی رکنیت منسوخ کر دی جاتی ہے اور اسے ہٹا دیا جاتا ہے۔ مرکز

    OpenVINO ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا
    ہم پیچھے سے کنکشن کا انتظار کر رہے ہیں۔

    فرنٹ اینڈ ایک ویب ایپلیکیشن ہے جو جاوا اسکرپٹ میں لکھی گئی ہے جو ری ایکٹ لائبریری کا استعمال کرتے ہوئے ترقی کے عمل کو تیز اور آسان بناتی ہے۔ اس ایپلیکیشن کا مقصد بیک اینڈ سائیڈ پر اور براہ راست Raspberry Pi پر چلنے والے الگورتھم کا استعمال کرتے ہوئے حاصل کردہ ڈیٹا کا تصور کرنا ہے۔ صفحہ میں سیکشنل روٹنگ کو ری ایکٹ روٹر کا استعمال کرتے ہوئے لاگو کیا گیا ہے، لیکن دلچسپی کا مرکزی صفحہ مرکزی صفحہ ہے، جہاں ویب ساکٹ ٹیکنالوجی کا استعمال کرتے ہوئے سرور سے حقیقی وقت میں ڈیٹا کا ایک مسلسل سلسلہ موصول ہوتا ہے۔ Raspberry Pi آواز کا پتہ لگاتا ہے، اس بات کا تعین کرتا ہے کہ آیا یہ رجسٹرڈ ڈیٹا بیس سے کسی مخصوص شخص سے تعلق رکھتی ہے، اور کلائنٹ کو امکانی فہرست بھیجتی ہے۔ کلائنٹ تازہ ترین متعلقہ ڈیٹا دکھاتا ہے، اس شخص کا اوتار دکھاتا ہے جس نے غالباً مائیکروفون میں بات کی تھی، اور ساتھ ہی وہ جذبات جس کے ساتھ وہ الفاظ کا تلفظ کرتا ہے۔

    OpenVINO ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا
    تازہ ترین پیشین گوئیوں کے ساتھ ہوم پیج

    حاصل يہ ہوا

    منصوبہ بندی کے مطابق ہر چیز کو مکمل کرنا ممکن نہیں تھا، ہمارے پاس صرف وقت نہیں تھا، لہذا اصل امید ڈیمو میں تھی، کہ سب کچھ کام کرے گا۔ پریزنٹیشن میں انہوں نے اس بارے میں بات کی کہ سب کچھ کیسے کام کرتا ہے، انہوں نے کون سے ماڈلز لیے، انہیں کن مسائل کا سامنا کرنا پڑا۔ اگلا ڈیمو حصہ تھا - ماہرین بے ترتیب ترتیب میں کمرے میں گھومتے رہے اور کام کرنے والے پروٹو ٹائپ کو دیکھنے کے لیے ہر ٹیم سے رابطہ کیا۔ انہوں نے ہم سے سوالات بھی پوچھے، سب نے اپنے حصے کا جواب دیا، انہوں نے ویب کو لیپ ٹاپ پر چھوڑ دیا، اور سب کچھ واقعی توقع کے مطابق کام کر گیا۔

    مجھے نوٹ کرنے دو کہ ہمارے حل کی کل لاگت $150 تھی:

    • Raspberry Pi 3 ~ $35
    • گوگل AIY وائس بونٹ (آپ ریسیکر فیس لے سکتے ہیں) ~ 15$
    • Intel NCS 2 ~ 100$

    بہتر بنانے کا طریقہ:

    • کلائنٹ سے رجسٹریشن کا استعمال کریں - تصادفی طور پر تیار ہونے والے متن کو پڑھنے کو کہیں۔
    • کچھ مزید ماڈلز شامل کریں: آپ آواز کے ذریعے جنس اور عمر کا تعین کر سکتے ہیں۔
    • ایک ساتھ آوازوں کو الگ کریں (ڈائرائزیشن)

    ذخیرہ: https://github.com/vladimirwest/OpenEMO

    OpenVINO ہیکاتھون: Raspberry Pi پر آواز اور جذبات کو پہچاننا
    تھکے ہوئے ہیں لیکن ہم خوش ہیں۔

    آخر میں، میں منتظمین اور شرکاء کا شکریہ ادا کرنا چاہوں گا۔ دیگر ٹیموں کے منصوبوں میں، ہم نے ذاتی طور پر پارکنگ کی مفت جگہوں کی نگرانی کا حل پسند کیا۔ ہمارے لیے، یہ پروڈکٹ اور ڈیولپمنٹ میں غرق ہونے کا ایک زبردست ٹھنڈا تجربہ تھا۔ مجھے امید ہے کہ خطوں میں زیادہ سے زیادہ دلچسپ ایونٹس کا انعقاد کیا جائے گا، بشمول AI موضوعات پر۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں