ื”ืืงืชื•ืŸ OpenVINO: ื–ื™ื”ื•ื™ ืงื•ืœ ื•ืจื’ืฉื•ืช ื‘-Raspberry Pi

30 ื‘ื ื•ื‘ืžื‘ืจ - 1 ื‘ื“ืฆืžื‘ืจ ื‘ื ื™ื–'ื ื™ ื ื•ื‘ื’ื•ืจื•ื“ ื”ืชืงื™ื™ื ื”ืืงืชื•ืŸ OpenVINO. ื”ืžืฉืชืชืคื™ื ื”ืชื‘ืงืฉื• ืœื™ืฆื•ืจ ืื‘ ื˜ื™ืคื•ืก ืฉืœ ืคืชืจื•ืŸ ืžื•ืฆืจ ื‘ืืžืฆืขื•ืช ืขืจื›ืช ื”ื›ืœื™ื OpenVINO ืฉืœ Intel. ื”ืžืืจื’ื ื™ื ื”ืฆื™ืขื• ืจืฉื™ืžื” ืฉืœ ื ื•ืฉืื™ื ืžืฉื•ืขืจื™ื ืฉื ื™ืชืŸ ืœื”ื ื—ื•ืช ืื•ืชื ื‘ืขืช ื‘ื—ื™ืจืช ืžืฉื™ืžื”, ืืš ื”ื”ื—ืœื˜ื” ื”ืกื•ืคื™ืช ื ื•ืชืจื” ื‘ื™ื“ื™ ื”ืฆื•ื•ืชื™ื. ื‘ื ื•ืกืฃ, ืขื•ื“ื“ื• ื”ืฉื™ืžื•ืฉ ื‘ื“ื’ืžื™ื ืฉืื™ื ื ื›ืœื•ืœื™ื ื‘ืžื•ืฆืจ.

ื”ืืงืชื•ืŸ OpenVINO: ื–ื™ื”ื•ื™ ืงื•ืœ ื•ืจื’ืฉื•ืช ื‘-Raspberry Pi

ื‘ืžืืžืจ ื–ื” ื ืกืคืจ ืœื›ื ื›ื™ืฆื“ ื™ืฆืจื ื• ืืช ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœื ื• ืœืžื•ืฆืจ, ืื™ืชื• ืชืคืกื ื• ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืืช ื”ืžืงื•ื ื”ืจืืฉื•ืŸ.

ื™ื•ืชืจ ืž-10 ืฆื•ื•ืชื™ื ื”ืฉืชืชืคื• ื‘ื”ืืงืชื•ืŸ. ื–ื” ื ื—ืžื“ ืฉื—ืœืงื ื”ื’ื™ืขื• ืžืื–ื•ืจื™ื ืื—ืจื™ื. ืžืงื•ื ื”ื”ืืงืชื•ืŸ ื”ื™ื” ืžืชื—ื "ืงืจืžืœื™ื ืกืงื™ ืขืœ ืคื•ืฆ'ื™ื™ืŸ", ืฉื‘ื• ื ืชืœื• ื‘ืคื ื™ื ืชืฆืœื•ืžื™ื ืขืชื™ืงื™ื ืฉืœ ื ื™ื–'ื ื™ ื ื•ื‘ื’ื•ืจื•ื“, ื‘ืคืžืœื™ื”! (ืื ื™ ืžื–ื›ื™ืจ ืœื›ื ืฉื›ืจื’ืข ื”ืžืฉืจื“ ื”ืžืจื›ื–ื™ ืฉืœ ืื™ื ื˜ืœ ื ืžืฆื ื‘ื ื™ื–'ื ื™ ื ื•ื‘ื’ื•ืจื•ื“). ื”ืžืฉืชืชืคื™ื ืงื™ื‘ืœื• 26 ืฉืขื•ืช ืœื›ืชื•ื‘ ืงื•ื“, ื•ื‘ืกื•ืคื ื”ื™ื” ืขืœื™ื”ื ืœื”ืฆื™ื’ ืืช ื”ืคืชืจื•ืŸ ืฉืœื”ื. ื™ืชืจื•ืŸ ื ืคืจื“ ื”ื™ื” ื”ื ื•ื›ื—ื•ืช ืฉืœ ืกืฉืŸ ื”ื“ื’ืžื” ื›ื“ื™ ืœื•ื•ื“ื ืฉื›ืœ ืžื” ืฉืชื•ื›ื ืŸ ืื›ืŸ ืžื™ื•ืฉื ื•ืœื ื ืฉืืจ ืจืขื™ื•ื ื•ืช ื‘ืžืฆื’ืช. ืกื—ื•ืจื”, ื—ื˜ื™ืคื™ื, ืื•ื›ืœ, ื’ื ื”ื›ืœ ื”ื™ื” ืฉื!

ื‘ื ื•ืกืฃ, ืื™ื ื˜ืœ ืกื™ืคืงื” ืื•ืคืฆื™ื•ื ืœื™ืช ืžืฆืœืžื•ืช, Raspberry PI, Neural Compute Stick 2.

ื‘ื—ื™ืจืช ืžืฉื™ืžื•ืช

ืื—ื“ ื”ื—ืœืงื™ื ื”ืงืฉื™ื ื‘ื™ื•ืชืจ ื‘ื”ื›ื ื” ืœื”ืืงืชื•ืŸ ื‘ืฆื•ืจื” ื—ื•ืคืฉื™ืช ื”ื•ื ื‘ื—ื™ืจืช ืืชื’ืจ. ื”ื—ืœื˜ื ื• ืžื™ื“ ืœื”ืžืฆื™ื ืžืฉื”ื• ืฉืขื“ื™ื™ืŸ ืœื ื”ื™ื” ื‘ืžื•ืฆืจ, ืฉื›ืŸ ื‘ื”ื•ื“ืขื” ื ืืžืจ ืฉื–ื” ืžืื•ื“ ืžื‘ื•ืจืš.

ืœืื—ืจ ื ื™ืชื•ื— ืžื•ื“ืœื™ื, ื”ื›ืœื•ืœื™ื ื‘ืžื•ืฆืจ ื‘ืžื”ื“ื•ืจื” ื”ื ื•ื›ื—ื™ืช, ืื ื• ืžื’ื™ืขื™ื ืœืžืกืงื ื” ืฉืจื•ื‘ื ืคื•ืชืจื™ื ื‘ืขื™ื•ืช ืจืื™ื™ื” ืžืžื•ื—ืฉื‘ืช ืฉื•ื ื•ืช. ื™ืชืจื” ืžื›ืš, ืงืฉื” ืžืื•ื“ ืœื”ื’ื™ืข ืœื‘ืขื™ื” ื‘ืชื—ื•ื ื”ืจืื™ื™ื” ื”ืžืžื•ื—ืฉื‘ืช ืฉืœื ื ื™ืชืŸ ืœืคืชื•ืจ ื‘ืืžืฆืขื•ืช OpenVINO, ื•ื’ื ืื ื ื™ืชืŸ ืœื”ืžืฆื™ื ืื•ืชื”, ืงืฉื” ืœืžืฆื•ื ืžื•ื“ืœื™ื ืžืื•ืžื ื™ื ืžืจืืฉ ื‘ืจืฉื•ืช ื”ืจื‘ื™ื. ืื ื—ื ื• ืžื—ืœื™ื˜ื™ื ืœื—ืคื•ืจ ืœื›ื™ื•ื•ืŸ ืื—ืจ - ืœื›ื™ื•ื•ืŸ ืขื™ื‘ื•ื“ ื“ื™ื‘ื•ืจ ื•ื ื™ืชื•ื—. ื”ื‘ื” ื ืฉืงื•ืœ ืžืฉื™ืžื” ืžืขื ื™ื™ื ืช ืฉืœ ื–ื™ื”ื•ื™ ืจื’ืฉื•ืช ืžืชื•ืš ื“ื™ื‘ื•ืจ. ื™ืฉ ืœื•ืžืจ ืฉืœOpenVINO ื›ื‘ืจ ื™ืฉ ืžื•ื“ืœ ืฉืงื•ื‘ืข ืืช ื”ืจื’ืฉื•ืช ืฉืœ ืื“ื ืขืœ ืกืžืš ื”ืคื ื™ื ืฉืœื•, ืื‘ืœ:

  • ื‘ืชื™ืื•ืจื™ื”, ืืคืฉืจ ืœื™ืฆื•ืจ ืืœื’ื•ืจื™ืชื ืžืฉื•ืœื‘ ืฉื™ืขื‘ื•ื“ ื’ื ืขืœ ื”ืกืื•ื ื“ ื•ื’ื ืขืœ ื”ืชืžื•ื ื”, ืžื” ืฉืืžื•ืจ ืœืชืช ืขืœื™ื™ื” ื‘ืจืžืช ื”ื“ื™ื•ืง.
  • ืœืžืฆืœืžื•ืช ื™ืฉ ื‘ื“ืจืš ื›ืœืœ ื–ื•ื•ื™ืช ืฆืคื™ื™ื” ืฆืจื”; ื ื“ืจืฉืช ื™ื•ืชืจ ืžืžืฆืœืžื” ืื—ืช ื›ื“ื™ ืœื›ืกื•ืช ืฉื˜ื— ื’ื“ื•ืœ; ืœืฆืœื™ืœ ืื™ืŸ ืžื’ื‘ืœื” ื›ื–ื•.

ื‘ื•ืื• ืœืคืชื— ืืช ื”ืจืขื™ื•ืŸ: ื‘ื•ืื• ื ื™ืงื— ืืช ื”ืจืขื™ื•ืŸ ืœืžื’ื–ืจ ื”ืงืžืขื•ื ืื™ ื›ื‘ืกื™ืก. ืืชื” ื™ื›ื•ืœ ืœืžื“ื•ื“ ืืช ืฉื‘ื™ืขื•ืช ืจืฆื•ืŸ ื”ืœืงื•ื—ื•ืช ื‘ืงื•ืคื•ืช ื”ื—ื ื•ืช. ืื ืื—ื“ ื”ืœืงื•ื—ื•ืช ืœื ืžืจื•ืฆื” ืžื”ืฉื™ืจื•ืช ื•ืžืชื—ื™ืœ ืœื”ืจื™ื ืืช ื”ื˜ื•ืŸ ืฉืœื•, ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœื”ืชืงืฉืจ ืœืžื ื”ืœ ืœืขื–ืจื”.
ื‘ืžืงืจื” ื–ื”, ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ื–ื™ื”ื•ื™ ืงื•ืœื™ ืื ื•ืฉื™, ื–ื” ื™ืืคืฉืจ ืœื ื• ืœื”ื‘ื—ื™ืŸ ื‘ื™ืŸ ืขื•ื‘ื“ื™ ื—ื ื•ืช ืœืœืงื•ื—ื•ืช ื•ืœืกืคืง ืื ืœื™ื˜ื™ืงื” ืœื›ืœ ืื“ื. ื•ื‘ื›ืŸ, ื‘ื ื•ืกืฃ, ื ื™ืชืŸ ื™ื”ื™ื” ืœื ืชื— ืืช ื”ืชื ื”ื’ื•ืช ืขื•ื‘ื“ื™ ื”ื—ื ื•ืช ืขืฆืžื, ืœื”ืขืจื™ืš ืืช ื”ืื•ื•ื™ืจื” ื‘ืฆื•ื•ืช, ื ืฉืžืข ื˜ื•ื‘!

ืื ื• ืžื’ื‘ืฉื™ื ืืช ื”ื“ืจื™ืฉื•ืช ืœืคืชืจื•ืŸ ืฉืœื ื•:

  • ื’ื•ื“ืœ ืงื˜ืŸ ืฉืœ ืžื›ืฉื™ืจ ื”ื™ืขื“
  • ืชืคืขื•ืœ ื‘ื–ืžืŸ ืืžืช
  • ืžื—ื™ืจ ื ืžื•ืš
  • ืžื“ืจื’ื™ื•ืช ืงืœื”

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ื‘ื•ื—ืจื™ื ืืช Raspberry Pi 3 c ื›ืžื›ืฉื™ืจ ื”ื™ืขื“ ืื™ื ื˜ืœ NCS 2.

ื›ืืŸ ื—ืฉื•ื‘ ืœืฆื™ื™ืŸ ืชื›ื•ื ื” ืื—ืช ื—ืฉื•ื‘ื” ืฉืœ NCS - ื–ื” ืขื•ื‘ื“ ื”ื›ื™ ื˜ื•ื‘ ืขื ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช CNN ืกื˜ื ื“ืจื˜ื™ื•ืช, ืื‘ืœ ืื ืืชื” ืฆืจื™ืš ืœื”ืจื™ืฅ ืžื•ื“ืœ ืขื ืฉื›ื‘ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ืขืœื™ื•, ืื– ืฆืคื” ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ืจืžื” ื ืžื•ื›ื”.

ื™ืฉ ืจืง ื“ื‘ืจ ืื—ื“ ืงื˜ืŸ ืœืขืฉื•ืช: ืืชื” ืฆืจื™ืš ืœื”ืฉื™ื’ ืžื™ืงืจื•ืคื•ืŸ. ืžื™ืงืจื•ืคื•ืŸ USB ืจื’ื™ืœ ื™ืชืื™ื, ืื‘ืœ ื”ื•ื ืœื ื™ื™ืจืื” ื˜ื•ื‘ ื™ื—ื“ ืขื ื”-RPI. ืื‘ืœ ื’ื ื›ืืŸ ื”ืคืชืจื•ืŸ ืžืžืฉ "ื˜ืžื•ืŸ ื‘ืงืจื‘ืช ืžืงื•ื". ื›ื“ื™ ืœื”ืงืœื™ื˜ ืงื•ืœ, ืื ื• ืžื—ืœื™ื˜ื™ื ืœื”ืฉืชืžืฉ ื‘ืœื•ื— ืงื•ืœ ืžื›ืกื” ื”ืžื ื•ืข ืžื”ืขืจื›ื” ืขืจื›ืช ืงื•ืœ AIY ืฉืœ ื’ื•ื’ืœ, ืฉืขืœื™ื• ื™ืฉ ืžื™ืงืจื•ืคื•ืŸ ืกื˜ืจื™ืื• ืงื•ื•ื™.

ื”ื•ืจื“ ืืช Raspbian ืž ืžืื’ืจ ืคืจื•ื™ืงื˜ื™ื ืฉืœ AIY ื•ื”ืขืœื” ืื•ืชื• ืœื›ื•ื ืŸ ื”ื‘ื–ืง, ื‘ื“ื•ืง ืฉื”ืžื™ืงืจื•ืคื•ืŸ ืขื•ื‘ื“ ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื” (ื”ื•ื ื™ืงืœื™ื˜ ืื•ื“ื™ื• ื‘ืื•ืจืš 5 ืฉื ื™ื•ืช ื•ื™ืฉืžื•ืจ ืื•ืชื• ื‘ืงื•ื‘ืฅ):

arecord -d 5 -r 16000 test.wav

ืขืœื™ ืœืฆื™ื™ืŸ ืžื™ื“ ืฉื”ืžื™ืงืจื•ืคื•ืŸ ืจื’ื™ืฉ ืžืื•ื“ ื•ืงื•ืœื˜ ืจืขืฉื™ื ื”ื™ื˜ื‘. ื›ื“ื™ ืœืชืงืŸ ื–ืืช, ื”ื‘ื” ื ืขื‘ื•ืจ ืืœ alsamixer, ื ื‘ื—ืจ ื‘ื”ืชืงื ื™ ืœื›ื™ื“ืช ื•ื ืคื—ื™ืช ืืช ืจืžืช ืื•ืช ื”ื›ื ื™ืกื” ืœ-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

ื‘ื•ืื• ื ื™ืฆื•ืจ ื“ื™ืงืฆื™ื” ืฉื‘ื” ืœื›ืœ ืจื’ืฉ ื™ื”ื™ื” ืฆื‘ืข ืžืชืื™ื ื‘ืฆื•ืจืช 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: ื–ื™ื”ื•ื™ ืงื•ืœ ื•ืจื’ืฉื•ืช ื‘-Raspberry Pi
ื›ืคืชื•ืจ, ืœืฉืจื•ืฃ!

ืขื‘ื•ื“ื” ืขื ืงื•ืœ

ื ืฉืชืžืฉ ื‘-pyaudio ื›ื“ื™ ืœืœื›ื•ื“ ืืช ื”ื–ืจื ืžื”ืžื™ืงืจื•ืคื•ืŸ ื•ืž-webrtcvad ื›ื“ื™ ืœืกื ืŸ ืจืขืฉื™ื ื•ืœื–ื”ื•ืช ืงื•ืœ. ื‘ื ื•ืกืฃ, ื ื™ืฆื•ืจ ืชื•ืจ ืืœื™ื• ื ื•ืกื™ืฃ ื•ื ืกื™ืจ ืงื˜ืขื™ื ืงื•ืœื™ื™ื ื‘ืื•ืคืŸ ืืกื™ื ื›ืจื•ื ื™.

ืžื›ื™ื•ื•ืŸ ืฉืœ-webrtcvad ื™ืฉ ืžื’ื‘ืœื” ืขืœ ื’ื•ื“ืœ ื”ืคืจื’ืžื ื˜ ืฉืกื•ืคืง - ื–ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื•ื•ื” ืœ-10/20/30ms, ื•ื”ื”ื›ืฉืจื” ืฉืœ ื”ืžื•ื“ืœ ืœื–ื™ื”ื•ื™ ืจื’ืฉื•ืช (ื›ืคื™ ืฉื ืœืžื“ ื‘ื”ืžืฉืš) ื‘ื•ืฆืขื” ืขืœ ืžืขืจืš ื ืชื•ื ื™ื ืฉืœ 48kHz, ืœืœื›ื•ื“ ื ืชื—ื™ื ื‘ื’ื•ื“ืœ 48000ร—20ms/1000ร—1(ืžื•ื ื•)=960 ื‘ืชื™ื. Webrtcvad ื™ื—ื–ื™ืจ True/False ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ื ืชื—ื™ื ื”ืœืœื•, ืžื” ืฉืžืชืื™ื ืœื ื•ื›ื—ื•ืช ืื• ื”ื™ืขื“ืจ ื”ืฆื‘ืขื” ื‘ื ืชื—.

ื‘ื•ืื• ืœื™ื™ืฉื ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ื‘ื:

  • ื ื•ืกื™ืฃ ืœืจืฉื™ืžื” ืืช ื”ื ืชื—ื™ื ืฉื‘ื”ื ื™ืฉ ื”ืฆื‘ืขื”; ืื ืื™ืŸ ื”ืฆื‘ืขื”, ื ื’ื“ื™ืœ ืืช ื”ืžื•ื ื” ืฉืœ ื”ื ืชื—ื™ื ื”ืจื™ืงื™ื.
  • ืื ื”ืžื•ื ื” ืฉืœ ื ืชื—ื™ื ืจื™ืงื™ื ื”ื•ื >=30 (600 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”), ืื– ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ื’ื•ื“ืœ ืจืฉื™ืžืช ื”ื ืชื—ื™ื ื”ืžืฆื˜ื‘ืจื™ื; ืื ื”ื•ื >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 - IR (ื™ื™ืฆื•ื’ ื‘ื™ื ื™ื™ื). ื ื™ืกื™ื ื• ื‘ืขืจืš 5-7 ืคืชืจื•ื ื•ืช ืฉื•ื ื™ื ืž-github, ื•ืื ื”ืžื•ื“ืœ ืœื–ื™ื”ื•ื™ ืจื’ืฉื•ืช ืขื‘ื“ ืžื™ื“, ืื– ืขื ื–ื™ื”ื•ื™ ืงื•ืœื™ ื ืืœืฆื ื• ืœื—ื›ื•ืช ื™ื•ืชืจ โ€“ ื”ื ืžืฉืชืžืฉื™ื ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ.

ืื ื• ืžืชืžืงื“ื™ื ื‘ื“ื‘ืจื™ื ื”ื‘ืื™ื:

  • ืจื’ืฉื•ืช ืžื”ืงื•ืœ - https://github.com/alexmuhr/Voice_Emotion
    ื–ื” ืขื•ื‘ื“ ืœืคื™ ื”ืขื™ืงืจื•ืŸ ื”ื‘ื: ืื•ื“ื™ื• ื ื—ืชืš ืœืงื˜ืขื™ื ื‘ื’ื•ื“ืœ ืžืกื•ื™ื, ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ืงื˜ืขื™ื ื”ืœืœื• ืื ื• ื‘ื•ื—ืจื™ื MFCC ื•ืœืื—ืจ ืžื›ืŸ ืฉืœื— ืื•ืชื ื›ืงืœื˜ ืœ-CNN
  • ื–ื™ื”ื•ื™ ืงื•ืœื™ - https://github.com/linhdvu14/vggvox-speaker-identification
    ื›ืืŸ, ื‘ืžืงื•ื MFCC, ืื ื• ืขื•ื‘ื“ื™ื ืขื ืกืคืงื˜ืจื•ื’ืจืžื”, ืœืื—ืจ FFT ื ื–ื™ืŸ ืืช ื”ืื•ืช ืœ-CNN, ื›ืืฉืจ ื‘ืžื•ืฆื ื ืงื‘ืœ ื™ื™ืฆื•ื’ ื•ืงื˜ื•ืจ ืฉืœ ื”ืงื•ืœ.

ื‘ืฉืœื‘ ื”ื‘ื ื ื“ื‘ืจ ืขืœ ื”ืžืจืช ืžื•ื“ืœื™ื, ื”ื—ืœ ืžืชื™ืื•ืจื™ื”. OpenVINO ื›ื•ืœืœ ืžืกืคืจ ืžื•ื“ื•ืœื™ื:

  • Open Model Zoo, ื“ื’ืžื™ื ืžื”ื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื•ืœื›ืœื•ืœ ื‘ืžื•ืฆืจ ืฉืœืš
  • Model Optimzer, ืฉื‘ื–ื›ื•ืชื• ื ื™ืชืŸ ืœื”ืžื™ืจ ืžื•ื“ืœ ืžืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื ืฉืœ ืžืกื’ืจืช (Tensorflow, ONNX ื•ื›ื•') ืœืคื•ืจืžื˜ ื™ื™ืฆื•ื’ ื‘ื™ื ื™ื™ื, ืื™ืชื• ื ืขื‘ื•ื“ ื‘ื”ืžืฉืš
  • Inference Engine ืžืืคืฉืจ ืœืš ืœื”ืจื™ืฅ ื“ื’ืžื™ื ื‘ืคื•ืจืžื˜ IR ืขืœ ืžืขื‘ื“ื™ ืื™ื ื˜ืœ, ืฉื‘ื‘ื™ื ืจื‘ื™ื ื•ืžืื™ืฆื™ Neural Compute Stick
  • ื”ื’ืจืกื” ื”ื™ืขื™ืœื” ื‘ื™ื•ืชืจ ืฉืœ OpenCV (ืขื ืชืžื™ื›ื” ื‘ืžื ื•ืข Inference)
    ื›ืœ ื“ื’ื ื‘ืคื•ืจืžื˜ 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 ื“ืจืš ืžื•ื“ื•ืœ DNN ืœืชื•ืš 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 ืฉื ื™ื•ืช), ืื ื• ืžืžื™ืจื™ื ื›ืœ ืื—ื“ ืžื”ื—ืœื•ื ื•ืช ื”ืœืœื• ืœ-MFCC, ืฉืื•ืชื ื ื–ื™ืŸ ืœืจืฉืช:

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

    ืœืื—ืจ ืžื›ืŸ, ื ื™ืงื— ืืช ื”ืžื—ืœืงื” ื”ื ืคื•ืฆื” ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ื›ืœ ื”ื—ืœื•ื ื•ืช. ืคืชืจื•ืŸ ืคืฉื•ื˜, ืื‘ืœ ืœื”ืืงืชื•ืŸ ืืชื” ืœื ืฆืจื™ืš ืœื”ืžืฆื™ื ืžืฉื”ื• ืžื•ืคืจืš ืžื“ื™, ืจืง ืื ื™ืฉ ืœืš ื–ืžืŸ. ื™ืฉ ืœื ื• ืขื•ื“ ื”ืจื‘ื” ืขื‘ื•ื“ื”, ืื– ื‘ื•ืื• ื ืžืฉื™ืš ื”ืœืื” โ€“ ื ืขืกื•ืง ื‘ื–ื™ื”ื•ื™ ืงื•ืœื™. ื™ืฉ ืฆื•ืจืš ืœื™ืฆื•ืจ ืื™ื–ืฉื”ื• ืžืกื“ ื ืชื•ื ื™ื ืฉื‘ื• ื™ืื•ื—ืกื ื• ืกืคืงื˜ืจื•ื’ืจืžื•ืช ืฉืœ ืงื•ืœื•ืช ืžื•ืงืœื˜ื™ื ืžืจืืฉ. ืžืื—ืจ ืฉื ื•ืชืจ ืžืขื˜ ื–ืžืŸ, ื ืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื›ืžื™ื˜ื‘ ื™ื›ื•ืœืชื ื•.

    ื›ืœื•ืžืจ, ืื ื• ื™ื•ืฆืจื™ื ืกืงืจื™ืคื˜ ืœื”ืงืœื˜ืช ืงื˜ืข ืงื•ืœื™ (ื–ื” ืคื•ืขืœ ื‘ืื•ืชื• ืื•ืคืŸ ื›ืคื™ ืฉืชื•ืืจ ืœืขื™ืœ, ืจืง ื›ืืฉืจ ื™ื•ืคืกืง ืžื”ืžืงืœื“ืช ื”ื•ื ื™ืฉืžื•ืจ ืืช ื”ืงื•ืœ ืœืงื•ื‘ืฅ).

    ื‘ื•ื ื ื ืกื”:

    python3 voice_db/record_voice.py test.wav

    ืื ื• ืžืงืœื™ื˜ื™ื ืงื•ืœื•ืช ืฉืœ ืžืกืคืจ ืื ืฉื™ื (ื‘ืžืงืจื” ืฉืœื ื•, ืฉืœื•ืฉื” ื—ื‘ืจื™ ืฆื•ื•ืช)
    ืœืื—ืจ ืžื›ืŸ, ืขื‘ื•ืจ ื›ืœ ืงื•ืœ ืžื•ืงืœื˜ ืื ื• ืžื‘ืฆืขื™ื ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืคื•ืจื™ื™ื” ืžื”ื™ืจื”, ืžืฉื™ื’ื™ื ืกืคืงื˜ืจื•ื’ืจืžื” ื•ืฉื•ืžืจื™ื ืื•ืชื” ื›ืžืขืจืš numpy (.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, ื”ืžื‘ื•ืกืก ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื™ืช websocket (ืคืจื•ื˜ื•ืงื•ืœ http over tcp).

    ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ื”ื•ื ืงื‘ืœืช ืžื™ื“ืข ืžืขื•ื‘ื“ ืžืคื˜ืœ, ื›ืœื•ืžืจ ืžื ื‘ืื™ื ืืจื•ื–ื™ื ื‘-json, ืฉื ืฉืžืจื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืืžืฆืข ื”ื“ืจืš ืฉืœื”ื, ื›ืš ืฉื ื™ืชืŸ ืœื”ืคื™ืง ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืขืœ ื”ืจืงืข ื”ืจื’ืฉื™ ืฉืœ ื”ืžืฉืชืžืฉ ืœืชืงื•ืคื”. ื—ื‘ื™ืœื” ื–ื• ื ืฉืœื—ืช ืœืื—ืจ ืžื›ืŸ ืœ-frontend, ื”ืžืฉืชืžืฉ ื‘ืžื ื•ื™ ื•ืžืงื‘ืœ ืžื ื•ืช ืžื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ websocket. ื›ืœ ืžื ื’ื ื•ืŸ ื”ืงืฆื” ื”ืื—ื•ืจื™ ื‘ื ื•ื™ ื‘ืฉืคืช ื”ื’ื•ืœื ื’; ื”ื•ื ื ื‘ื—ืจ ื‘ื’ืœืœ ืฉื”ื•ื ืžืชืื™ื ืœืžืฉื™ืžื•ืช ืืกื™ื ื›ืจื•ื ื™ื•ืช, ืฉื”ื’ื•ืจื•ื˜ื™ื ื™ื ืžืชืžื•ื“ื“ื™ื ื‘ื”ืŸ ื”ื™ื˜ื‘.
    ื‘ื›ื ื™ืกื” ืœื ืงื•ื“ืช ื”ืงืฆื” ื”ืžืฉืชืžืฉ ื ืจืฉื ื•ื ื›ื ืก ืœืžื‘ื ื” ื•ืื– ืžืชืงื‘ืœืช ื”ื•ื“ืขืชื•. ื’ื ื”ืžืฉืชืžืฉ ื•ื’ื ื”ื”ื•ื“ืขื” ืžื•ื›ื ืกื™ื ืœืจื›ื–ืช ืžืฉื•ืชืคืช, ืฉืžืžื ื• ื›ื‘ืจ ื ืฉืœื—ื•ืช ื”ื•ื“ืขื•ืช ื”ืœืื” (ืœื—ื–ื™ืช ื”ืžื ื•ื™), ื•ืื ื”ืžืฉืชืžืฉ ืกื•ื’ืจ ืืช ื”ื—ื™ื‘ื•ืจ (ืคื˜ืœ ืื• ื—ื–ื™ืช), ืื–ื™ ื”ืžื ื•ื™ ืฉืœื• ืžืชื‘ื˜ืœ ื•ื”ื•ื ืžื•ืกืจ ืž ื”ืจื›ื–ืช.

    ื”ืืงืชื•ืŸ OpenVINO: ื–ื™ื”ื•ื™ ืงื•ืœ ื•ืจื’ืฉื•ืช ื‘-Raspberry Pi
    ืื ื—ื ื• ืžื—ื›ื™ื ืœื—ื™ื‘ื•ืจ ืžืื—ื•ืจ

    Front-end ื”ื•ื ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ ืฉื ื›ืชื‘ ื‘-JavaScript ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช React ื›ื“ื™ ืœื”ืื™ืฅ ื•ืœืคืฉื˜ ืืช ืชื”ืœื™ืš ื”ืคื™ืชื•ื—. ืžื˜ืจืช ืืคืœื™ืงืฆื™ื” ื–ื• ื”ื™ื ืœื“ืžื™ื™ืŸ ื ืชื•ื ื™ื ืฉื”ื•ืฉื’ื• ื‘ืืžืฆืขื•ืช ืืœื’ื•ืจื™ืชืžื™ื ื”ืคื•ืขืœื™ื ื‘ืฆื“ ื”ืื—ื•ืจื™ ื•ื™ืฉื™ืจ ืขืœ ื”-Raspberry Pi. ืœื“ืฃ ื™ืฉ ื ื™ืชื•ื‘ ื—ืœืงื™ ื”ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช react-router, ืืš ื”ืขืžื•ื“ ื”ืจืืฉื™ ื”ืžืขื ื™ื™ืŸ ื”ื•ื ื”ืขืžื•ื“ ื”ืจืืฉื™, ืฉื‘ื• ื–ืจื ืจืฆื™ืฃ ืฉืœ ื ืชื•ื ื™ื ืžืชืงื‘ืœ ื‘ื–ืžืŸ ืืžืช ืžื”ืฉืจืช ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื™ืช WebSocket. 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”