OpenVINO Hackathon፡ ድምጽ እና ስሜትን በ Raspberry Pi ላይ ማወቂያ

ኖቬምበር 30 - ዲሴምበር 1 በኒዝሂ ኖቭጎሮድ ተካሄደ OpenVINO hackathon. ተሳታፊዎች የIntel OpenVINO Toolkitን በመጠቀም የምርት መፍትሄ ፕሮቶታይፕ እንዲፈጥሩ ተጠይቀዋል። አዘጋጆቹ አንድን ተግባር በሚመርጡበት ጊዜ ሊመሩ የሚችሉ ግምታዊ ርዕሶችን ዝርዝር አቅርበዋል, ነገር ግን የመጨረሻው ውሳኔ በቡድኖቹ ውስጥ ቀርቷል. በተጨማሪም, በምርቱ ውስጥ ያልተካተቱ ሞዴሎችን መጠቀም ተበረታቷል.

OpenVINO Hackathon፡ ድምጽ እና ስሜትን በ Raspberry Pi ላይ ማወቂያ

በዚህ ጽሑፍ ውስጥ የምርቱን ፕሮቶታይፕ እንዴት እንደፈጠርን እናነግርዎታለን ፣ እሱም በመጨረሻ የመጀመሪያውን ቦታ የያዝን።

በ hackathon ከ10 በላይ ቡድኖች ተሳትፈዋል። አንዳንዶቹ ከሌላ ክልል መምጣታቸው ጥሩ ነው። የ hackathon ቦታው "Kremlinsky on Pochain" ውስብስብ ነበር, የኒዥኒ ኖቭጎሮድ ጥንታዊ ፎቶግራፎች በእጃቸው ውስጥ ተሰቅለዋል! (በአሁኑ ጊዜ የኢንቴል ማዕከላዊ ቢሮ በኒዝሂ ኖቭጎሮድ ውስጥ እንደሚገኝ አስታውሳለሁ)። ተሳታፊዎች ኮድ ለመጻፍ 26 ሰአታት ተሰጥቷቸዋል, እና በመጨረሻም መፍትሄዎቻቸውን ማቅረብ ነበረባቸው. የተለየ ጥቅም የታቀደው ነገር ሁሉ በትክክል መተግበሩን እና በአቀራረቡ ላይ ሃሳቦች እንዳልቀሩ ለማረጋገጥ የማሳያ ክፍለ ጊዜ መኖሩ ነበር። ሸቀጥ፣ መክሰስ፣ ምግብ፣ ሁሉም ነገር እዚያም ነበር!

በተጨማሪም ኢንቴል እንደ አማራጭ ካሜራዎችን፣ Raspberry PI፣ Neural Compute Stick 2 አቅርቧል።

የተግባር ምርጫ

ለነፃ-ፎርም hackathon ለማዘጋጀት በጣም አስቸጋሪ ከሆኑት ክፍሎች አንዱ ፈታኝ ሁኔታን መምረጥ ነው። ማስታወቂያው ይህ በጣም ደስ የሚል ነው ስለተባለ ወዲያውኑ በምርቱ ውስጥ ያልነበረ ነገር ለማምጣት ወሰንን።

ተንትኗል ሞዴሎች, አሁን ባለው መለቀቅ ውስጥ በምርቱ ውስጥ የተካተቱት, አብዛኛዎቹ የተለያዩ የኮምፒዩተር እይታ ችግሮችን እንደሚፈቱ መደምደሚያ ላይ ደርሰናል. ከዚህም በላይ OpenVINOን በመጠቀም ሊፈታ የማይችል በኮምፒዩተር እይታ መስክ ላይ ችግር ለመፍጠር በጣም አስቸጋሪ ነው, እና አንድ ሰው መፈልሰፍ ቢቻል እንኳን, በሕዝብ ጎራ ውስጥ አስቀድሞ የሰለጠኑ ሞዴሎችን ማግኘት አስቸጋሪ ነው. ወደ ሌላ አቅጣጫ ለመቆፈር እንወስናለን - ወደ ንግግር ሂደት እና ትንታኔ. ስሜትን ከንግግር የማወቅ አስደሳች ተግባርን እናስብ። OpenVINO አስቀድሞ የሰውን ስሜት በፊታቸው ላይ በመመስረት የሚወስን ሞዴል አለው መባል አለበት።

  • በንድፈ ሀሳብ, በሁለቱም ድምጽ እና ምስል ላይ የሚሰራ ጥምር ስልተ-ቀመር መፍጠር ይቻላል, ይህም ትክክለኛነት መጨመር አለበት.
  • ካሜራዎች ብዙውን ጊዜ ጠባብ የመመልከቻ ማዕዘን አላቸው፡ ሰፊ ቦታን ለመሸፈን ከአንድ በላይ ካሜራ ያስፈልጋል፡ ድምጽ ይህን ያህል ገደብ የለውም።

ሃሳቡን እናዳብር፡ የችርቻሮ ክፍሉን ሃሳብ እንደ መሰረት እንውሰድ። በመደብር መውጫዎች የደንበኞችን እርካታ መለካት ይችላሉ። ከደንበኞቹ አንዱ በአገልግሎቱ ካልተደሰተ እና ድምፃቸውን ከፍ ማድረግ ከጀመሩ ወዲያውኑ ለእርዳታ አስተዳዳሪውን መደወል ይችላሉ።
በዚህ ሁኔታ, የሰው ድምጽ ማወቂያን መጨመር አለብን, ይህ የሱቅ ሰራተኞችን ከደንበኞች ለመለየት እና ለእያንዳንዱ ግለሰብ ትንታኔ ለመስጠት ያስችለናል. ደህና ፣ በተጨማሪ ፣ የሱቅ ሰራተኞችን ባህሪ መተንተን ፣ በቡድኑ ውስጥ ያለውን ሁኔታ መገምገም ፣ ጥሩ ይመስላል!

ለመፍትሄዎቻችን መስፈርቶችን እናዘጋጃለን-

  • የታለመው መሣሪያ ትንሽ መጠን
  • የእውነተኛ ጊዜ አሠራር
  • ዝቅተኛ ዋጋ
  • ቀላል ልኬት

በውጤቱም, Raspberry Pi 3 c እንደ ዒላማው መሳሪያ እንመርጣለን ኢንቴል NCS 2.

እዚህ አንድ አስፈላጊ የ NCS ባህሪን ልብ ማለት አስፈላጊ ነው - ከመደበኛ የሲኤንኤን አርክቴክቸር ጋር በተሻለ ሁኔታ ይሰራል፣ ነገር ግን በላዩ ላይ ብጁ ንብርብሮች ያለው ሞዴል ማስኬድ ከፈለጉ ዝቅተኛ ደረጃ ማመቻቸትን ይጠብቁ።

አንድ ትንሽ ነገር ማድረግ ብቻ ነው፡ ማይክሮፎን ማግኘት አለቦት። መደበኛ የዩኤስቢ ማይክሮፎን ይሰራል፣ ግን ከ RPI ጋር አብሮ ጥሩ አይመስልም። ግን እዚህም ቢሆን መፍትሔው በጥሬው “በአቅራቢያ” አለ። ድምጽን ለመቅዳት የቮይስ ቦኔት ሰሌዳን ከመሳሪያው ለመጠቀም እንወስናለን። ጉግል AIY የድምጽ ስብስብ, በላዩ ላይ ባለገመድ ስቴሪዮ ማይክሮፎን አለ.

Raspbian ከ አውርድ AIY ፕሮጀክቶች ማከማቻ እና ወደ ፍላሽ አንፃፊ ይስቀሉት፣ ማይክሮፎኑ በሚከተለው ትዕዛዝ እንደሚሰራ ይሞክሩ (ድምጽ 5 ሰከንድ ርዝማኔ ይቀዳ እና ወደ ፋይል ያስቀምጠዋል)

arecord -d 5 -r 16000 test.wav

ማይክሮፎኑ በጣም ስሜታዊ መሆኑን እና ጩኸትን በደንብ እንደሚይዝ ወዲያውኑ ልብ ይበሉ። ይህንን ለማስተካከል ወደ alsamixer እንሂድ፣ Capture devices የሚለውን እንመርጣለን እና የግቤት ሲግናል ደረጃን ወደ 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 በኩል ወደ ቮይስ ቦኔት እናገናኘዋለን, አስፈላጊዎቹን ቤተ-መጻሕፍት ይጫኑ (ከ 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 የቀረበው ቁራጭ መጠን ላይ ገደብ ያለው በመሆኑ - 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 = []

አስቀድመው የሰለጠኑ ሞዴሎችን በይፋዊ ጎራ ውስጥ መፈለግ ፣ ወደ github ፣ Google ይሂዱ ፣ ግን ጥቅም ላይ በሚውለው አርክቴክቸር ላይ ውስንነት እንዳለን ያስታውሱ። ይህ በጣም ከባድ ክፍል ነው ፣ ምክንያቱም ሞዴሎቹን በግቤት ውሂብዎ ላይ መሞከር አለብዎት ፣ እና በተጨማሪ ፣ ወደ OpenVINO's ውስጣዊ ቅርጸት - IR (መካከለኛ ውክልና) ይለውጧቸው። ከጂቱብ ወደ 5-7 የሚሆኑ የተለያዩ መፍትሄዎችን ሞክረናል ፣ እና ስሜቶችን ለመለየት ሞዴሉ ወዲያውኑ ከሰራ ፣ ከዚያ በድምጽ ማወቂያ ብዙ ጊዜ መጠበቅ ነበረብን - የበለጠ ውስብስብ አርኪቴክቸር ይጠቀማሉ።

በሚከተሉት ላይ እናተኩራለን።

  • ከድምጽ ስሜቶች - https://github.com/alexmuhr/Voice_Emotion
    በሚከተለው መርህ መሰረት ይሰራል: ኦዲዮ በተወሰነ መጠን ወደ ምንባቦች ተቆርጧል, ለእያንዳንዱ እነዚህ ምንባቦች እንመርጣለን ኤምኤፍሲሲ እና ከዚያ ለ CNN እንደ ግብአት ያቅርቡ
  • የድምጽ ማወቂያ - https://github.com/linhdvu14/vggvox-speaker-identification
    እዚህ, ከኤምኤፍሲሲ ይልቅ, በስፔክትሮግራም እንሰራለን, ከኤፍኤፍቲ በኋላ ምልክቱን ወደ CNN እንመግባለን, በውጤቱ ላይ የድምፅ ቬክተር ውክልና እናገኛለን.

በመቀጠል ሞዴሎችን ስለመቀየር እንነጋገራለን, ከቲዎሪ ጀምሮ. OpenVINO በርካታ ሞጁሎችን ያካትታል፡-

  • ሞዴል መካነ አራዊት ክፈት፣ ከነሱ ውስጥ ጥቅም ላይ ሊውሉ የሚችሉ እና በምርትዎ ውስጥ ሊካተቱ ይችላሉ።
  • ሞዴል ኦፕቲምዘር፣ ለዚህም ምስጋና ይግባውና አንድን ሞዴል ከተለያዩ የማዕቀፍ ቅርጸቶች (Tensorflow፣ ONNX ወዘተ) ወደ መካከለኛ የውክልና ፎርማት መለወጥ ትችላለህ፣ በዚህም የበለጠ እንሰራለን።
  • የኢንፌክሽን ሞተር ሞዴሎችን በ IR ፎርማት በኢንቴል ፕሮሰሰር፣ በማይሪያድ ቺፕስ እና በነርቭ ኮምፒዩት ስቲክ ማፋጠን ላይ እንዲያሄዱ ይፈቅድልዎታል።
  • በጣም ቀልጣፋው የ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++ ኤፒአይ ውስጥ ያለ ይመስላል፣ ነገር ግን ያን ያህል ርቀት አልቆፈርነው እና በቀላሉ ለአንዱ ሞዴሎች አስተካክለው።
    በመቀጠል, ቀደም ሲል የተለወጠውን ሞዴል በ IR ቅርጸት በዲኤንኤን ሞጁል ወደ 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 ሰከንድ ነው)፣ እነዚህን መስኮቶች እያንዳንዳቸውን ወደ ኤምኤፍሲሲ እንለውጣቸዋለን፣ ከዚያም ወደ ፍርግርግ እንመግባለን፡

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

    በመቀጠል ለሁሉም መስኮቶች በጣም የተለመደውን ክፍል እንውሰድ. ቀላል መፍትሄ, ነገር ግን ለ hackathon በጣም የማይረባ ነገር ይዘው መምጣት አያስፈልግዎትም, ጊዜ ካለዎት ብቻ. ገና ብዙ ስራ ይቀረናል፣ ስለዚህ እንቀጥል - የድምጽ ማወቂያን እናስተናግዳለን። ቀደም ሲል የተቀዳ ድምጾች የሚቀመጡበትን አንድ ዓይነት ዳታቤዝ ማድረግ ያስፈልጋል። የቀረው ጊዜ ትንሽ ስለሆነ ይህንን ችግር በተቻለን መጠን እንፈታዋለን።

    ይኸውም የድምፅ ቅጂን ለመቅዳት ስክሪፕት እንፈጥራለን (ከላይ እንደተገለፀው በተመሳሳይ መንገድ ይሰራል, ከቁልፍ ሰሌዳው ሲቋረጥ ብቻ ድምጹን ወደ ፋይል ያስቀምጣል).

    እንሞክር፡-

    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 ለፈጠራ XNUMX ወስዷል) የሚለውን ማስተዋል እፈልጋለሁ። አዳዲስ ሞዴሎችን ለመጨመር ጊዜ አላገኘንም እና የድር መተግበሪያን ምሳሌ በመጻፍ ላይ አተኩረን ነበር።

    የድር መተግበሪያ

    አንድ አስፈላጊ ነጥብ: ከእኛ ጋር ራውተር ከቤት እንወስዳለን እና የአካባቢያችንን አውታረ መረብ እናዘጋጃለን, መሳሪያውን እና ላፕቶፖችን በአውታረ መረቡ ላይ ለማገናኘት ይረዳል.

    በዌብሶኬት ቴክኖሎጂ (http over tcp ፕሮቶኮል) ላይ የተመሰረተው የኋለኛ ክፍል በፊት እና Raspberry Pi መካከል ያለው ከጫፍ እስከ ጫፍ ያለው የመልእክት ቻናል ነው።

    የመጀመሪያው ደረጃ የተቀናጀ መረጃን ከራስበሪ መቀበል ነው፣ ማለትም፣ በ json ውስጥ የታሸጉ ትንበያዎች፣ በጉዟቸው አጋማሽ ላይ በመረጃ ቋቱ ውስጥ ይቀመጣሉ ስለሆነም የተጠቃሚውን ስሜታዊ ዳራ ለጊዜው ስታቲስቲክስ መፍጠር ይችላል። ይህ ፓኬት የደንበኝነት ምዝገባን የሚጠቀም እና ከዌብሶኬት መጨረሻ ነጥብ ወደ ሚቀበለው የፊት ለፊት ክፍል ይላካል። የኋለኛው ክፍል በሙሉ የተገነባው በጎላንግ ቋንቋ ነው፤ የተመረጠው ጓሮቲን በደንብ ለሚይዙት ለተመሳሰሉ ተግባራት ተስማሚ ስለሆነ ነው።
    የመጨረሻውን ነጥብ ሲደርሱ ተጠቃሚው ተመዝግቦ ወደ መዋቅሩ ውስጥ ገብቷል, ከዚያም መልእክቱ ይቀበላል. ተጠቃሚው እና መልእክቱ ወደ አንድ የጋራ ማእከል ገብተዋል ፣ ከዚያ መልእክቶች ቀድሞ ወደሚተላለፉበት (ለተመዘገቡት ግንባር) ፣ እና ተጠቃሚው ግንኙነቱን ከዘጋው (ራስቤሪ ወይም የፊት) ፣ ከዚያ የእሱ ምዝገባ ተሰርዟል እና ከ ማዕከሉ.

    OpenVINO Hackathon፡ ድምጽ እና ስሜትን በ Raspberry Pi ላይ ማወቂያ
    ከጀርባው ግንኙነት እየጠበቅን ነው

    Front-end የእድገት ሂደቱን ለማፋጠን እና ለማቃለል ሬክት ላይብረሪ በመጠቀም በጃቫ ስክሪፕት የተጻፈ የድር መተግበሪያ ነው። የዚህ መተግበሪያ ዓላማ በጀርባ-መጨረሻ በኩል እና በቀጥታ በ Raspberry Pi ላይ የሚሰሩ ስልተ ቀመሮችን በመጠቀም የተገኘውን መረጃ ማየት ነው። ገፁ react-routerን በመጠቀም የተተገበረ የሴክሽን ማዞሪያ አለው ነገር ግን የፍላጎት ዋናው ገጽ የዌብሶኬት ቴክኖሎጂን በመጠቀም ከአገልጋዩ በእውነተኛ ጊዜ ቀጣይነት ያለው የመረጃ ፍሰት የሚቀበልበት ዋናው ገጽ ነው። 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 ላይ ማወቂያ
    ደክሞናል ግን ደስተኞች ነን

    በማጠቃለያው አዘጋጆቹን እና ተሳታፊዎችን አመሰግናለሁ ማለት እፈልጋለሁ። ከሌሎች ቡድኖች ፕሮጀክቶች መካከል ነፃ የመኪና ማቆሚያ ቦታዎችን ለመቆጣጠር መፍትሄውን በግላችን ወደድን። ለእኛ፣ በምርት እና በልማት ውስጥ የመጥለቅ በጣም ጥሩ ተሞክሮ ነበር። በኤአይ አርእስቶች ላይ ጨምሮ በክልሎች ውስጥ ብዙ እና የበለጠ አስደሳች ክስተቶች እንደሚደረጉ ተስፋ አደርጋለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ