30 Π½ΠΎΡΠ±ΡΡ β 1 Π΄Π΅ΠΊΠ°Π±ΡΡ Π² ΠΠΈΠΆΠ½Π΅ΠΌ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄Π΅ ΠΏΡΠΎΡΠ΅Π»
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π² ΠΈΡΠΎΠ³Π΅ Π·Π°Π½ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ.
Π Ρ Π°ΠΊΠ°ΡΠΎΠ½Π΅ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ 10 ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠΈΡΡΠ½ΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠΈΠ΅Ρ Π°Π»ΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ². ΠΠ΅ΡΡΠΎΠΌ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ Π°ΠΊΠ°ΡΠΎΠ½Π° Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ βΠΡΠ΅ΠΌΠ»Π΅Π²ΡΠΊΠΈΠΉ Π½Π° ΠΠΎΡΠ°ΠΈΠ½Π΅β, Π³Π΄Π΅ Π²Π½ΡΡΡΠΈ Π±ΡΠ»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ°Π½Ρ ΡΡΠ°ΡΠΈΠ½Π½ΡΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΠΠΈΠΆΠ½Π΅Π³ΠΎ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄Π°, Π°Π½ΡΡΡΠ°ΠΆΠ½ΠΎ! (Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ, ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Intel ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΠΈΠΆΠ½Π΅ΠΌ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄Π΅). ΠΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌ ΠΎΡΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ 26 ΡΠ°ΡΠΎΠ², Π² ΠΊΠΎΠ½ΡΠ΅ Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π·Π΅Π½ΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠ»ΡΡΠΎΠΌ Π±ΡΠ»ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄Π΅ΠΌΠΎ-ΡΠ΅ΡΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠ°Π²Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, Π° Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ ΠΈΠ΄Π΅ΡΠΌΠΈ Π² ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠ΅ΡΡ, ΡΠ½Π΅ΠΊΠΈ, Π΅Π΄Π°, Π²ΡΡ ΡΠΎΠΆΠ΅ Π±ΡΠ»ΠΎ!
ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ»Π° ΠΊΠ°ΠΌΠ΅ΡΡ, Raspberry PI, Neural Compute Stick 2.
ΠΡΠ±ΠΎΡ Π·Π°Π΄Π°ΡΠΈ
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Ρ Π°ΠΊΠ°ΡΠΎΠ½Ρ ΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ±ΠΎΡ Π·Π°Π΄Π°ΡΠΈ. Π‘ΡΠ°Π·Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ, ΡΠ΅Π³ΠΎ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅ Π΅ΡΡ Π½Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π°Π½ΠΎΠ½ΡΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ.
ΠΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π²
- Π ΡΠ΅ΠΎΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ Π·Π²ΡΠΊΡ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°ΡΡ ΠΏΡΠΈΡΠΎΡΡ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ.
- ΠΠ°ΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ·ΠΊΠΈΠΉ ΡΠ³ΠΎΠ» ΠΎΠ±Π·ΠΎΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΡΡΡΡ Π±ΠΎΠ»ΡΡΡΡ Π·ΠΎΠ½Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ ΠΎΠ΄Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ°, Π·Π²ΡΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
Π Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Ρ: Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΈΠ΄Π΅Ρ Π΄Π»Ρ retail ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°. ΠΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ Π½Π° ΠΊΠ°ΡΡΠ°Ρ
ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ². ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΈΠ· ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Π΅ΠΉ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΡΠΎΠ½ β ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ Π·Π²Π°ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡΡ.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ Π³ΠΎΠ»ΠΎΡΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΎΡ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΠ΄Π°Π²Π°ΡΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΡΠΌΡ. ΠΡ ΠΈ ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΈΡ
ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ Π°ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ²Π΅, Π·Π²ΡΡΠΈΡ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ!
Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- ΠΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ Π΄Π΅Π²Π°ΠΉΡΠ°
- Π Π°Π±ΠΎΡΠ° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
- ΠΠΈΠ·ΠΊΠ°Ρ ΡΠ΅Π½Π°
- ΠΠ΅Π³ΠΊΠ°Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ
Π ΠΈΡΠΎΠ³Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ Π΄Π΅Π²Π°ΠΉΡΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ 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 projects)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
CΠΎΠ·Π΄Π°Π΄ΠΈΠΌ dict, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΌΠΎΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ²Π΅Ρ Π² Π²ΠΈΠ΄Π΅ 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])))
ΠΠ½ΠΎΠΏΠΎΡΠΊΠ°, Π³ΠΎΡΠΈ!
Π Π°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π³ΠΎΠ»ΠΎΡΠΎΠΌ
ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pyaudio Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π° ΠΈ webrtcvad Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΡΠΌΠ° ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³ΠΎΠ»ΠΎΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅ΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ Π·Π°Π±ΠΈΡΠ°ΡΡ ΠΎΡΡΡΠ²ΠΊΠΈ Ρ Π³ΠΎΠ»ΠΎΡΠΎΠΌ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ webrtcvad Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° β ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ 10/20/30ΠΌΡ, Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΡΠΌΠΎΡΠΈΠΉ (ΠΊΠ°ΠΊ ΠΌΡ Π΄Π°Π»Π΅Π΅ ΡΠ·Π½Π°Π΅ΠΌ) ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π½Π° Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ 48ΠΊΠΡ, Π±ΡΠ΄Π΅ΠΌ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠ°Π½ΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° 48000Γ20ΠΌΡ/1000Γ1(ΠΌΠΎΠ½ΠΎ)=960 Π±Π°ΠΉΡ. Webrtcvad Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ True/False Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΡΠ°Π½ΠΊΠΎΠ², ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π³ΠΎΠ»ΠΎΡΠ° Π² ΡΠ°Π½ΠΊΠ΅.
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ:
- ΠΡΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² list ΡΠ΅ ΡΠ°Π½ΠΊΠΈ, Π³Π΄Π΅ Π΅ΡΡΡ Π³ΠΎΠ»ΠΎΡ, Π΅ΡΠ»ΠΈ Π³ΠΎΠ»ΠΎΡΠ° Π½Π΅Ρ, ΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΡΡΡΡ ΡΠ°Π½ΠΊΠΎΠ².
- ΠΡΠ»ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΡΡΡΡ ΡΠ°Π½ΠΊΠΎΠ² >=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, Π³ΡΠ³Π»ΠΈΠΌ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΠ°ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΠ²ΠΎΠΈΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π° ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ OpenVINO β IR (Intermediate Representation). ΠΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 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 e.t.c) Π² ΡΠΎΡΠΌΠ°Ρ Intermediate Representation, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π΄Π°Π»Π΅Π΅ ΠΌΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ
- Inference Engine ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² IR ΡΠΎΡΠΌΠ°ΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ Intel, ΡΠΈΠΏΠ°Ρ Myriad ΠΈ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΡΡ 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 ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ forward Π½Π° Π½Π΅Ρ.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
ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π³ΠΎΠ»ΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΠΈΡ ΡΠ»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ)
ΠΠ°Π»Π΅Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ fast fourier transform, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠ΅ΠΊΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π² Π²ΠΈΠ΄Π΅ 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)
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΌΠ±Π΅Π΄Π΄ΠΈΠ½Π³Π° ΠΈΠ· ΠΏΡΠΎΠ·Π²ΡΡΠ°Π²ΡΠ΅Π³ΠΎ ΠΎΡΡΠ΅Π·ΠΊΠ° ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ, Π²Π·ΡΠ² cosine distance ΠΎΡ ΠΎΡΡΡΠ²ΠΊΠ° Π΄ΠΎ Π²ΡΠ΅Ρ Π³ΠΎΠ»ΠΎΡΠΎΠ² Π² Π±Π°Π·Π΅ (ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π²Π΅ΡΠΎΡΡΠ½Π΅Π΅) β Π΄Π»Ρ Π΄Π΅ΠΌΠΎ ΠΌΡ Π²ΡΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠ³ 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 protocol).
ΠΠ΅ΡΠ²ΡΠΌ ΡΡΠ°ΠΏΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΡΠ°ΡΠΏΠ±Π΅ΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π² json ΠΏΡΠ΅Π΄ΠΈΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π΄Π°Π±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΠΎΠ± ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄. ΠΠ°Π»Π΅Π΅ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ° Π²Π΅Π±ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ΅ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±ΡΠΊΠ΅Π½Π΄ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ golang, Π²ΡΠ±ΠΎΡ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠ°Π» ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π³ΠΎΡΡΡΠΈΠ½Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ.
ΠΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ Π·Π°Π½ΠΎΡΠΈΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π½ΠΎΡΡΡΡΡ Π² ΠΎΠ±ΡΠΈΠΉ hub, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΆΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π΄Π°Π»ΡΡΠ΅ (Π½Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΡΠΎΠ½Ρ), Π° Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (ΡΠ°ΡΠΏΠ±Π΅ΡΡΠΈ ΠΈΠ»ΠΈ ΡΡΠΎΠ½Ρ), ΡΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π°Π½Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΈ ΠΎΠ½ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· hub.
ΠΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΊΠΎΠ½Π½Π΅ΠΊΡ Ρ Π±ΡΠΊΠ°Front-end ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π° JavaScript Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ React Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π¦Π΅Π»ΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ Π½Π° back-end ΡΡΠΎΡΠΎΠ½Π΅ ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Raspberry Pi. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΡΡΠΈΠ½Π³ ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»Π°ΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ react-router, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π³Π»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°, Π³Π΄Π΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ WebSocket. Raspberry Pi Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡΠ΅Ρ Π³ΠΎΠ»ΠΎΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ ΠΈΠ· Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ ΠΈ Π²ΡΡΡΠ»Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ probability ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π°Π²Π°ΡΠ°ΡΠΊΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π² ΠΌΠΈΠΊΡΠΎΡΠΎΠ½, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΌΠΎΡΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΡ ΡΠ»ΠΎΠ²Π°.
ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΡΠ°ΠΌΠΈΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π΄ΠΎΠ΄Π΅Π»Π°ΡΡ Π²ΡΡ Π΄ΠΎ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ, Π±Π°Π½Π°Π»ΡΠ½ΠΎ Π½Π΅ ΡΡΠΏΠ΅Π»ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π³Π»Π°Π²Π½Π°Ρ Π½Π°Π΄Π΅ΠΆΠ΄Π° Π±ΡΠ»Π° Π½Π° Π΄Π΅ΠΌΠΎ, Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ Π²ΡΡ ΡΡΡΡΠΎΠ΅Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Π·ΡΠ»ΠΈ, Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ. ΠΠ°Π»Π΅Π΅ Π±ΡΠ»Π° ΡΠ°ΡΡΡ Π΄Π΅ΠΌΠΎ β ΡΠΊΡΠΏΠ΅ΡΡΡ Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎ Π·Π°Π»Ρ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ. ΠΠ°Π΄Π°Π²Π°Π»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ Π½Π°ΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π» ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°ΡΡΠΈ, Π½Π° Π½ΠΎΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π²Π΅Π±, ΠΈ Π²ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ.
ΠΡΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²ΠΈΠ»Π° 150$:
- Raspberry Pi 3 ~ 35$
- Google AIY Voice Bonnet (ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ ΠΏΠ»Π°ΡΡ respeaker) ~ 15$
- Intel NCS 2 ~ 100$
ΠΠ°ΠΊ ΡΠ»ΡΡΡΠΈΡΡ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° β ΠΏΡΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ
- ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ: ΠΏΠΎ Π³ΠΎΠ»ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ» ΠΈ Π²ΠΎΠ·ΡΠ°ΡΡ
- Π Π°Π·Π΄Π΅Π»ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π²ΡΡΠ°ΡΠΈΠ΅ Π³ΠΎΠ»ΠΎΡΠ° (Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ)
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
https://github.com/vladimirwest/OpenEMO
Π£ΡΡΠ°Π²ΡΠΈΠ΅, Π½ΠΎ ΡΡΠ°ΡΡΠ»ΠΈΠ²ΡΠ΅ ΠΌΡΠ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠ°ΠΌ ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌ. ΠΠ· ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π»ΠΈΡΠ½ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΎΡΠ½ΡΡ ΠΌΠ΅ΡΡ. ΠΠ»Ρ Π½Π°Ρ ΡΡΠΎ Π±ΡΠ» Π΄ΠΈΠΊΠΎ ΠΊΡΡΡΠΎΠΉ ΠΎΠΏΡΡ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π² ΡΠ΅Π³ΠΈΠΎΠ½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ Π²ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΏΠΎ AI ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com