30 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ - 1 Π΄Π΅ΠΊΠ΅ΠΌΠ²ΡΠΈ Π²ΠΎ ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄ ΡΠ΅ ΠΎΠ΄ΡΠΆΠ°
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ, ΡΠΎ ΠΊΠΎΡ Π½Π° ΠΊΡΠ°ΡΠΎΡ Π³ΠΎ Π·Π°Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ ΠΏΡΠ²ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎ.
ΠΠ° Ρ Π°ΠΊΠ°ΡΠΎΠ½ΠΎΡ ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 10 Π΅ΠΊΠΈΠΏΠΈ. Π£Π±Π°Π²ΠΎ Π΅ ΡΡΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½ΠΈΠ² Π΄ΠΎΡΠ΄ΠΎΠ° ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ. ΠΠ΅ΡΡΠΎΡΠΎ Π½Π° Ρ Π°ΠΊΠ°ΡΠΎΠ½ΠΎΡ Π±Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΎΡ βΠΡΠ΅ΠΌΠ»ΠΈΠ½ΡΠΊΠΈ Π½Π° ΠΠΎΡΠ°ΠΈΠ½β, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π±Π΅Π° ΠΎΠ±Π΅ΡΠ΅Π½ΠΈ Π°Π½ΡΠΈΡΠΊΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΠΎΠ΄ ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄, Π²ΠΎ ΠΏΡΠΈΠ΄ΡΡΠΆΠ±Π°! (ΠΠ΅ ΠΏΠΎΡΡΠ΅ΡΡΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅Π½ΡΡΠ°Π»Π½Π°ΡΠ° ΠΊΠ°Π½ΡΠ΅Π»Π°ΡΠΈΡΠ° Π½Π° ΠΠ½ΡΠ΅Π» ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄). Π£ΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ° 26 ΡΠ°ΡΠ° Π΄Π° Π½Π°ΠΏΠΈΡΠ°Ρ ΠΊΠΎΠ΄, Π° Π½Π° ΠΊΡΠ°ΡΠΎΡ ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²Π°Ρ ΡΠ²ΠΎΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠ΅Π±Π½Π° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ Π±Π΅ΡΠ΅ ΠΏΡΠΈΡΡΡΡΠ²ΠΎΡΠΎ Π½Π° Π΄Π΅ΠΌΠΎ ΡΠ΅ΡΠΈΡΠ° Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΓ¨ ΡΡΠΎ Π΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΎ Π΅ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΠΈ Π΄Π΅ΠΊΠ° Π½Π΅ΠΌΠ° Π΄Π° ΠΎΡΡΠ°Π½Π΅ ΠΈΠ΄Π΅ΠΈ Π²ΠΎ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°. Π‘ΡΠΎΠΊΠ°, Π³ΡΠΈΡΠΊΠΈ, Ρ ΡΠ°Π½Π°, ΡΓ¨ ΠΈΠΌΠ°ΡΠ΅ ΠΈ ΡΠ°ΠΌΡ!
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΠ½ΡΠ΅Π» ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΊΠ°ΠΌΠ΅ΡΠΈ, Raspberry PI, Neural Compute Stick 2.
ΠΠ·Π±ΠΎΡ Π½Π° Π·Π°Π΄Π°ΡΠ°
ΠΠ΄Π΅Π½ ΠΎΠ΄ Π½Π°ΡΡΠ΅ΡΠΊΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π·Π° Ρ Π°ΠΊΠ°ΡΠΎΠ½ Π²ΠΎ ΡΠ»ΠΎΠ±ΠΎΠ΄Π½Π° ΡΠΎΡΠΌΠ° Π΅ ΠΈΠ·Π±ΠΎΡΠΎΡ Π½Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊ. ΠΠ΅Π΄Π½Π°Ρ ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΡΠΌΠΈΡΠ»ΠΈΠΌΠ΅ Π½Π΅ΡΡΠΎ ΡΡΠΎ ΡΓ¨ ΡΡΡΠ΅ Π³ΠΎ Π½Π΅ΠΌΠ° Π²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π° ΠΎΠ³Π»Π°ΡΠΎΡ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ±ΡΠ΅Π΄ΠΎΡΠ΄Π΅Π½ΠΎ.
ΠΠΌΠ°ΡΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ
- Π’Π΅ΠΎΡΠ΅ΡΡΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΠΊΠΎΡ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΈ Π½Π° Π·Π²ΡΠΊ ΠΈ Π½Π° ΡΠ»ΠΈΠΊΠ°, ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π΄Π°Π΄Π΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΡΠ½ΠΎΡΡΠ°.
- ΠΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΈΠΌΠ°Π°Ρ ΡΠ΅ΡΠ΅Π½ Π°Π³ΠΎΠ» Π½Π° Π³Π»Π΅Π΄Π°ΡΠ΅; ΠΏΠΎΡΡΠ΅Π±Π½Π° Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Π΅Π΄Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ° Π·Π° ΠΏΠΎΠΊΡΠΈΠ²Π°ΡΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠ° ΠΏΠΎΠ²ΡΡΠΈΠ½Π°; Π·Π²ΡΠΊΠΎΡ Π½Π΅ΠΌΠ° ΡΠ°ΠΊΠ²ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅.
ΠΠ° ΡΠ° ΡΠ°Π·Π²ΠΈΠ΅ΠΌΠ΅ ΠΈΠ΄Π΅ΡΠ°ΡΠ°: Π΄Π° ΡΠ° Π·Π΅ΠΌΠ΅ΠΌΠ΅ ΠΈΠ΄Π΅ΡΠ°ΡΠ° Π·Π° ΠΌΠ°Π»ΠΎΠΏΡΠΎΠ΄Π°ΠΆΠ½ΠΈΠΎΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠΈΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠ°ΡΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ΄Π°Π²Π½ΠΈΡΠ°ΡΠ°. ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡ ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π΅ Π½Π΅Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΠΎΠ΄ ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈ ΠΏΠΎΡΠ½Π΅ Π΄Π° Π³ΠΎ ΠΊΡΠ΅Π²Π° ΡΠ²ΠΎΡΠΎΡ ΡΠΎΠ½, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅Π΄Π½Π°Ρ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΡ Π·Π° ΠΏΠΎΠΌΠΎΡ.
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΡΠ΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ Π½Π° ΡΠΎΠ²Π΅ΡΠΊΠΈ Π³Π»Π°Ρ, ΠΎΠ²Π° ΡΠ΅ Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΈ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π²ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ΄Π°Π²Π½ΠΈΡΠ°ΡΠ° ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠ΅ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ. ΠΠ°, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ Π²ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π²ΠΎ ΠΏΡΠΎΠ΄Π°Π²Π½ΠΈΡΠ°ΡΠ°, Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ Π°ΡΠΌΠΎΡΡΠ΅ΡΠ°ΡΠ° Π²ΠΎ ΡΠΈΠΌΠΎΡ, Π·Π²ΡΡΠΈ Π΄ΠΎΠ±ΡΠΎ!
ΠΠΈΠ΅ Π³ΠΈ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π±Π°ΡΠ°ΡΠ°ΡΠ° Π·Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
- ΠΠ°Π»Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΡΠ΅Π»Π½ΠΈΠΎΡ ΡΡΠ΅Π΄
- ΠΠΏΠ΅ΡΠ°ΡΠΈΡΠ° Π²ΠΎ ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅
- ΠΠΈΡΠΊΠ° ΡΠ΅Π½Π°
- ΠΠ΅ΡΠ½Π° ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡ
ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, Π³ΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ Raspberry Pi 3 c ΠΊΠ°ΠΊΠΎ ΡΠ΅Π» ΡΡΠ΅Π΄
ΠΠ²Π΄Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΅Π΄Π½Π° Π²Π°ΠΆΠ½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° NCS - Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Π½Π° CNN, Π½ΠΎ Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π» ΡΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΡΠ»ΠΎΠ΅Π²ΠΈ Π½Π° Π½Π΅Π³ΠΎ, ΡΠΎΠ³Π°Ρ ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ.
ΠΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΠΌΠ°Π»Π° ΡΠ°Π±ΠΎΡΠ°: ΡΡΠ΅Π±Π° Π΄Π° Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½. ΠΠ±ΠΈΡΠ΅Π½ USB ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ±Π°Ρ, Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄ΠΎΠ±ΡΠΎ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ RPI. ΠΠΎ, Π΄ΡΡΠΈ ΠΈ ΡΡΠΊΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ βΠ»Π΅ΠΆΠΈ Π²ΠΎ Π±Π»ΠΈΠ·ΠΈΠ½Π°β. ΠΠ° ΡΠ½ΠΈΠΌΠ°ΡΠ΅ Π³Π»Π°Ρ, ΠΎΠ΄Π»ΡΡΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ°Π±Π»Π°ΡΠ° Voice Bonnet ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠΎΡ
ΠΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ Raspbian ΠΎΠ΄
arecord -d 5 -r 16000 test.wav
ΠΠ΅Π΄Π½Π°Ρ ΡΡΠ΅Π±Π° Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΠΎΡ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΈ Π΄ΠΎΠ±ΡΠΎ Π³ΠΎ Π·Π΅ΠΌΠ° ΡΡΠΌΠΎΡ. ΠΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΎΠ²Π°, ΠΎΠ΄ΠΈΠΌΠ΅ Π²ΠΎ alsamixer, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Capture devices ΠΈ Π½Π°ΠΌΠ°Π»Π΅ΡΠ΅ Π³ΠΎ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π²Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠΈΠ³Π½Π°Π» Π½Π° 50-60%.
Π’Π΅Π»ΠΎΡΠΎ Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΡΠΎ ΡΡΡΠΏΠΈΡΠ° ΠΈ ΡΓ¨ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΡΡΠΈ ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΡΠ²ΠΎΡΠΈΡΠ΅ ΡΠΎ ΠΊΠ°ΠΏΠ°ΠΊ
ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡΠΊΠΎ ΠΊΠΎΠΏΡΠ΅
ΠΠΎΠ΄Π΅ΠΊΠ° Π³ΠΎ ΡΠ°Π·Π΄Π²ΠΎΡΡΠ²Π°ΠΌΠ΅ AIY Voice Kit, ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΊΠΎΠΏΡΠ΅ RGB, ΡΠΈΠ΅ Π·Π°Π΄Π½ΠΎ ΠΎΡΠ²Π΅ΡΠ»ΡΠ²Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠΎ ΡΠΎΡΡΠ²Π΅Ρ. ΠΠ°ΡΠ°ΠΌΠ΅ βGoogle AIY Ledβ ΠΈ Π½Π°ΠΎΡΠ°ΠΌΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°:
ΠΠΎΡΡΠΎ Π΄Π° Π½Π΅ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ²Π° ΠΊΠΎΠΏΡΠ΅ Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π΅Π½Π°ΡΠ° Π΅ΠΌΠΎΡΠΈΡΠ°, ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ 7 ΠΊΠ»Π°ΡΠΈ, Π° ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΈΠΌΠ° 8 Π±ΠΎΠΈ, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ!
ΠΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΏΡΠ΅ΠΊΡ GPIO ΡΠΎ Voice Bonnet, Π³ΠΈ Π²ΡΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (ΡΠΈΠ΅ ΡΠ΅ Π²Π΅ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠΎΡ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΠΎΠ΄ AIY ΠΏΡΠΎΠ΅ΠΊΡΠΈ)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π΄ΠΈΠΊΡ Π²ΠΎ ΠΊΠΎΡ ΡΠ΅ΠΊΠΎΡΠ° Π΅ΠΌΠΎΡΠΈΡΠ° ΡΠ΅ ΠΈΠΌΠ° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π° Π±ΠΎΡΠ° Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° RGB Tuple ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ° aiy.leds.Led, ΠΏΡΠ΅ΠΊΡ ΠΊΠΎΡ ΡΠ΅ ΡΠ° Π°ΠΆΡΡΠΈΡΠ°ΠΌΠ΅ Π±ΠΎΡΠ°ΡΠ°:
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])))
ΠΠΎΠΏΡΠ΅, ΠΈΠ·Π³ΠΎΡΠΈ!
Π Π°Π±ΠΎΡΠ° ΡΠΎ Π³Π»Π°Ρ
ΠΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ pyaudio Π·Π° ΡΠ½ΠΈΠΌΠ°ΡΠ΅ Π½Π° ΠΏΡΠ΅Π½ΠΎΡΠΎΡ ΠΎΠ΄ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΠΎΡ ΠΈ webrtcvad Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π±ΡΡΠ°Π²Π°ΡΠ° ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ Π½Π° Π³Π»Π°ΡΠΎΡ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΡΠ΅Π΄ΠΈΡΠ° Π½Π° ΠΊΠΎΡΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π³Π»Π°ΡΠΎΠ²Π½ΠΈ ΠΈΠ·Π²Π°Π΄ΠΎΡΠΈ.
ΠΠΈΠ΄Π΅ΡΡΠΈ webrtcvad ΠΈΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ - ΡΠΎΡ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π΅Π΄Π½Π°ΠΊΠΎΠ² Π½Π° 10/20/30ms, Π° ΠΎΠ±ΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ Π΅ΠΌΠΎΡΠΈΠΈ (ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π΄ΠΎΠ·Π½Π°Π΅ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΡΠ½Π°) Π±Π΅ΡΠ΅ ΡΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π° Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ 48 kHz, ΡΠ΅ ΡΠ½ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΠ°ΡΡΠΈΡΠ° ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° 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 - IR (ΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°ΡΠ΅). ΠΡΠΎΠ±Π°Π²ΠΌΠ΅ ΠΎΠΊΠΎΠ»Ρ 5-7 ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΠΎΠ΄ github ΠΈ Π°ΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ Π΅ΠΌΠΎΡΠΈΠΈ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΈ Π²Π΅Π΄Π½Π°Ρ, ΡΠΎΠ³Π°Ρ ΡΠΎ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ΡΠΎ Π³Π»Π°Ρ ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° ΡΠ΅ΠΊΠ°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ»Π³ΠΎ - ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ.
Π‘Π΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π° ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ:
- ΠΠΌΠΎΡΠΈΠΈ ΠΎΠ΄ Π³Π»Π°ΡΠΎΡ -
https://github.com/alexmuhr/Voice_Emotion
Π Π°Π±ΠΎΡΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ: Π°ΡΠ΄ΠΈΠΎ ΡΠ΅ ΡΠ΅ΡΠ΅ Π½Π° ΠΏΠ°ΡΡΡΠΈ ΡΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°, Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΠ°ΡΡΡΠΈ Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅MFCC Π° ΠΏΠΎΡΠΎΠ° Π΄ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΈ ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π·Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄ΠΎ CNN - ΠΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ Π³Π»Π°Ρ -
https://github.com/linhdvu14/vggvox-speaker-identification
ΠΠ²Π΄Π΅, Π½Π°ΠΌΠ΅ΡΡΠΎ MFCC, ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ ΡΠΏΠ΅ΠΊΡΡΠΎΠ³ΡΠ°ΠΌ, ΠΏΠΎ FFT Π³ΠΎ Π½Π°ΠΏΠΎΡΡΠ²Π°ΠΌΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π΄ΠΎ CNN, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΎΡ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π²Π΅ΠΊΡΠΎΡΡΠΊΠ° ΠΏΡΠ΅ΡΡΡΠ°Π²Π° Π½Π° Π³Π»Π°ΡΠΎΡ.
Π‘Π»Π΅Π΄Π½ΠΎ ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΠΎΡΠ½ΡΠ²Π°ΡΡΠΈ ΠΎΠ΄ ΡΠ΅ΠΎΡΠΈΡΠ°ΡΠ°. OpenVINO Π²ΠΊΠ»ΡΡΡΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
- ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π» Π·ΠΎΠΎΠ»ΠΎΡΠΊΠ° Π³ΡΠ°Π΄ΠΈΠ½Π°, ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ΄ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ Π²Π°ΡΠΈΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄
- Model Optimzer, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π» ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°ΠΌΠΊΠΎΠ²Π½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ (Tensorflow, ONNX ΠΈΡΠ½.) Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°ΡΠ΅, ΡΠΎ ΠΊΠΎΡ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅
- Inference Engine Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ IR ΡΠΎΡΠΌΠ°Ρ Π½Π° Intel ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ, ΠΎΠ³ΡΠΎΠΌΠ΅Π½ Π±ΡΠΎΡ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΈ Neural Compute Stick Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠΈ
- ΠΠ°ΡΠ΅ΡΠΈΠΊΠ°ΡΠ½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° OpenCV (ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Inference Engine)
Π‘Π΅ΠΊΠΎΡ ΠΌΠΎΠ΄Π΅Π» Π²ΠΎ IR ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΎΠΏΠΈΡΠ°Π½ ΡΠΎ Π΄Π²Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ: .xml ΠΈ .bin.
ΠΠΎΠ΄Π΅Π»ΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠ²ΠΎΡΠ°Π°Ρ Π²ΠΎ IR ΡΠΎΡΠΌΠ°Ρ ΠΏΡΠ΅ΠΊΡ Model Optimizer Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΠ² Π½Π°ΡΠΈΠ½: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
ΠΠΈ ΡΠ½ΠΈΠΌΠ°ΠΌΠ΅ Π³Π»Π°ΡΠΎΠ²ΠΈΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π»ΡΡΠ΅ (Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎΡΡΠ° ΡΠ»Π΅Π½ΠΎΠ²ΠΈ Π½Π° ΡΠΈΠΌΠΎΡ)
Π‘Π»Π΅Π΄Π½ΠΎ, Π·Π° ΡΠ΅ΠΊΠΎΡ ΡΠ½ΠΈΠΌΠ΅Π½ Π³Π»Π°Ρ Π²ΡΡΠΈΠΌΠ΅ Π±ΡΠ·Π° ΡΡΡΠΈΠ΅ΡΡΠΊΠ° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΡΠΏΠ΅ΠΊΡΡΠΎΠ³ΡΠ°ΠΌ ΠΈ Π³ΠΎ Π·Π°ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π½ΡΠΌΠΏΠΈΡΠ°Π½Π° Π½ΠΈΠ·Π° (.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 over tcp ΠΏΡΠΎΡΠΎΠΊΠΎΠ»).
ΠΡΠ²Π°ΡΠ° ΡΠ°Π·Π° Π΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ ΠΌΠ°Π»ΠΈΠ½Π°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΡΠ²Π°ΡΠΈ ΡΠΏΠ°ΠΊΡΠ²Π°Π½ΠΈ Π²ΠΎ json, ΠΊΠΎΠΈ ΡΠ΅ Π·Π°ΡΡΠ²ΡΠ²Π°Π°Ρ Π²ΠΎ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΠ°Ρ ΠΎΠ΄ Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΏΠ°ΡΡΠ²Π°ΡΠ΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ Π·Π° Π΅ΠΌΠΎΡΠΈΠΎΠ½Π°Π»Π½Π°ΡΠ° ΠΏΠΎΠ·Π°Π΄ΠΈΠ½Π° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ Π·Π° ΡΠΎΡ ΠΏΠ΅ΡΠΈΠΎΠ΄. ΠΠ²ΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΡΠΎΠ° ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ ΠΏΡΠ΅Π΄Π½ΠΈΠΎΡ Π΄Π΅Π», ΠΊΠΎΡ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ° ΠΈ ΠΏΡΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠΎΡ. Π¦Π΅Π»ΠΈΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° Π·Π°Π΄Π½ΠΈΠ½Π° Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ Π³ΠΎΠ»Π°Π½Π³; ΡΠΎΡ Π΅ ΠΈΠ·Π±ΡΠ°Π½ Π·Π°ΡΠΎΠ° ΡΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΡΠΎ ΠΊΠΎΠΈ Π³ΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ²Π°Π°Ρ.
ΠΡΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ°, ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ° ΠΈ ΡΠ΅ Π²Π½Π΅ΡΡΠ²Π° Π²ΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΠΏΠΎΡΠΎΠ° ΡΠ΅ ΠΏΡΠΈΠΌΠ° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΠΎΡΠ°ΠΊΠ°. Π ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΈ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° ΡΠ΅ Π²Π½Π΅ΡΡΠ²Π°Π°Ρ Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ ΡΠ΅Π½ΡΠ°Ρ, ΠΎΠ΄ ΠΊΠΎΡ ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ°Π°Ρ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ (Π΄ΠΎ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ΅Π½ΠΈΠΎΡ ΡΡΠΎΠ½Ρ), Π° Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠ° Π·Π°ΡΠ²ΠΎΡΠΈ Π²ΡΡΠΊΠ°ΡΠ° (ΠΌΠ°Π»ΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π½Π°), ΡΠΎΠ³Π°Ρ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΡΠ²Π° ΠΈ ΡΠΎΡ Π΅ ΠΎΡΡΡΡΠ°Π½Π΅Ρ ΠΎΠ΄ Ρ Π°Π±ΠΎΡ.
Π§Π΅ΠΊΠ°ΠΌΠ΅ Π²ΡΡΠΊΠ° ΠΎΠ΄ ΠΏΠΎΠ·Π°Π΄ΠΈFront-end Π΅ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ JavaScript ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° React Π·Π° Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ·Π° ΠΈ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ°Π·Π²ΠΎΡ. Π¦Π΅Π»ΡΠ° Π½Π° ΠΎΠ²Π°Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π΅ Π΄Π° Π³ΠΈ Π²ΠΈΠ·ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° Π·Π°Π΄Π½Π°ΡΠ° ΡΡΡΠ°Π½Π° ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° Raspberry Pi. Π‘ΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΡΠ΅ΠΊΡΠΈΡΠΊΠΎ ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΡΠ΅Π°ΠΊΡ-ΡΡΡΠ΅Ρ, Π½ΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π΅ Π³Π»Π°Π²Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½ ΠΏΡΠΎΡΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ° Π²ΠΎ ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° WebSocket. Raspberry Pi Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠ° Π³Π»Π°Ρ, ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° Π΄Π°Π»ΠΈ ΠΌΡ ΠΏΡΠΈΠΏΠ°ΡΠ° Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π»ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° Π»ΠΈΡΡΠ° Π½Π° Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎΡΡ Π΄ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ. ΠΠ»ΠΈΠ΅Π½ΡΠΎΡ Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π°Π²Π°ΡΠ°ΡΠΎΡ Π½Π° Π»ΠΈΡΠ½ΠΎΡΡΠ° ΠΊΠΎΡΠ° Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π·Π±ΠΎΡΡΠ²Π°Π»Π° Π½Π° ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΠΎΡ, ΠΊΠ°ΠΊΠΎ ΠΈ Π΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΡΠΎ ΠΊΠΎΡΠ° Π³ΠΈ ΠΈΠ·Π³ΠΎΠ²Π°ΡΠ° Π·Π±ΠΎΡΠΎΠ²ΠΈΡΠ΅.
ΠΠΎΡΠ΅ΡΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠΎ Π°ΠΆΡΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΡΠ²Π°ΡΠ°ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠ΅ Π±Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π·Π°Π²ΡΡΠΈ ΡΓ¨ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΎ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ΠΌΠ°Π²ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΠ° ΡΡΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° Π½Π°Π΄Π΅ΠΆ Π±Π΅ΡΠ΅ Π²ΠΎ Π΄Π΅ΠΌΠΎΡΠΎ, Π΄Π΅ΠΊΠ° ΡΓ¨ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°. ΠΠΎ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π±ΠΎΡΡΠ²Π°Π° Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΡΓ¨, ΠΊΠ°ΠΊΠ²ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π΅ΠΌΠ°Π»Π΅, ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π°ΠΈΡΠ»Π΅. Π‘Π»Π΅Π΄Π΅Π½ Π±Π΅ΡΠ΅ Π΄Π΅ΠΌΠΎ-Π΄Π΅Π»ΠΎΡ - Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΡΠ΅ΡΠ°Π° Π½ΠΈΠ· ΠΏΡΠΎΡΡΠΎΡΠΈΡΠ°ΡΠ° ΠΏΠΎ ΡΠ»ΡΡΠ°Π΅Π½ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ ΠΈ ΠΌΡ ΠΏΡΠΈΠΎΡΠ°Π° Π½Π° ΡΠ΅ΠΊΠΎΡ ΡΠΈΠΌ Π·Π° Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π°Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ. Π Π½Π°Ρ Π½ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°Π° ΠΏΡΠ°ΡΠ°ΡΠ°, ΡΠ΅ΠΊΠΎΡ ΡΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΠ΅, ΡΠ° ΠΎΡΡΠ°Π²ΠΈΡΠ° ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π½Π° Π»Π°ΠΏΡΠΎΠΏΠΎΡ ΠΈ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΡΓ¨ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ΅.
ΠΠΎΠ·Π²ΠΎΠ»Π΅ΡΠ΅ ΠΌΠΈ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° Π²ΠΊΡΠΏΠ½Π°ΡΠ° ΡΠ΅Π½Π° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅ΡΠ΅ 150 Π΄ΠΎΠ»Π°ΡΠΈ:
- Raspberry Pi 3 ~ 35 Π΄ΠΎΠ»Π°ΡΠΈ
- Google AIY Voice Bonnet (ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΡΠ° Π·Π° Π³ΠΎΠ²ΠΎΡΠ½ΠΈΠΊ) ~ 15$
- Intel NCS 2 ~ 100 $
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅:
- ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΠ° ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ - ΠΏΠΎΠ±Π°ΡΠ°ΡΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΡ ΡΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΠΎ ΡΠ»ΡΡΠ°Π΅Π½ ΠΈΠ·Π±ΠΎΡ
- ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΡΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠ΅ ΠΏΠΎΠ» ΠΈ Π²ΠΎΠ·ΡΠ°ΡΡ ΠΏΡΠ΅ΠΊΡ Π³Π»Π°Ρ
- ΠΠ΄Π΄Π΅Π»Π΅ΡΠ΅ Π³ΠΈ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ Π·Π²ΡΡΠ½ΠΈΡΠ΅ Π³Π»Π°ΡΠΎΠ²ΠΈ (Π΄ΠΈΡΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ°)
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ:
https://github.com/vladimirwest/OpenEMO
Π£ΠΌΠΎΡΠ½ΠΈ, Π½ΠΎ ΡΡΠ΅ΡΠ½ΠΈ ΡΠΌΠ΅ΠΠ°ΠΊΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ, Π±ΠΈ ΡΠ°ΠΊΠ°Π» Π΄Π° ΠΈΠΌ ΡΠ΅ Π·Π°Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ°ΠΌ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ ΠΈ ΡΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅. ΠΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠΈΠΌΠΎΠ²ΠΈ, Π»ΠΈΡΠ½ΠΎ Π½ΠΈ ΡΠ΅ Π΄ΠΎΠΏΠ°Π΄Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΡΠ»ΠΎΠ±ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠΊΠΈΠ½Π³ ΠΌΠ΅ΡΡΠ°. ΠΠ° Π½Π°Ρ, ΡΠΎΠ° Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΊΡΠ» ΠΈΡΠΊΡΡΡΠ²ΠΎ Π½Π° ΠΏΠΎΡΠΎΠΏΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ ΠΈ ΡΠ°Π·Π²ΠΎΡΠΎΡ. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π½Π°ΡΡΠ°Π½ΠΈ ΡΠ΅ ΡΠ΅ ΠΎΠ΄ΡΠΆΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈΡΠ΅, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π½Π° ΡΠ΅ΠΌΠΈ Π·Π° Π²Π΅ΡΡΠ°ΡΠΊΠ° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠΈΡΠ°.
ΠΠ·Π²ΠΎΡ: www.habr.com