30 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ β 1 Π΄Π΅ΠΊΠ΅ΠΌΠ²ΡΠΈ Π² ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅. Π£ΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ Π±ΡΡ Π° ΠΏΠΎΠΊΠ°Π½Π΅Π½ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π°Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Intel OpenVINO toolkit. ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π° ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΈ ΡΠ΅ΠΌΠΈ, ΠΏΠΎ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈ ΠΈΠ·Π±ΠΎΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°, Π½ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½Π° Π² ΡΡΡΠ΅ΡΠ΅ Π½Π° Π΅ΠΊΠΈΠΏΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠΎΡΡΡΠ²Π°ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π²Π»ΠΈΠ·Π°Ρ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.

Π ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΡΠ²ΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡ, Ρ ΠΊΠΎΠΉΡΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π·Π°Π΅Ρ ΠΌΠ΅ ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ.
Π Ρ Π°ΠΊΠ°ΡΠΎΠ½Π° ΡΡΠ°ΡΡΠ²Π°Ρ Π° Π½Π°Π΄ 10 Π΅ΠΊΠΈΠΏΠ°. ΠΡΠΈΡΡΠ½ΠΎ Π΅, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΡΡ Π΄ΠΎΠΉΠ΄ΠΎΡ Π° ΠΎΡ Π΄ΡΡΠ³ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ. ΠΡΡΡΠΎΡΠΎ Π½Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ Π°ΠΊΠ°ΡΠΎΠ½Π° Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡΡΡ βΠΡΠ΅ΠΌΠ»Π΅Π²ΡΠΊΠΈ Π½Π° ΠΠΎΡΠ°ΠΈΠ½Π΅β, ΠΊΡΠ΄Π΅ΡΠΎ Π±ΡΡ Π° ΠΎΠΊΠ°ΡΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ Π½Π° ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄, Π² ΡΡΠΈΠ»Π½Π° ΠΎΠ±ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°! (ΠΏΡΠΈΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡΡ ΠΎΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Intel ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΠΈΠΆΠ½ΠΈ ΠΠΎΠ²Π³ΠΎΡΠΎΠ΄). ΠΠ° ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ Π±ΡΡ Π° ΠΎΡΠΏΡΡΠ½Π°ΡΠΈ 26 ΡΠ°ΡΠ° Π·Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, Π° Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡ ΡΠ²ΠΎΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π±Π΅ΡΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π΄Π΅ΠΌΠΎ-ΡΠ΅ΡΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π±ΡΡ ΠΌΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Π»ΠΈ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ, Π° Π½Π΅ ΠΎΡΡΠ°Π½Π°Π»ΠΎ ΡΠ°ΠΌΠΎ ΠΈΠ΄Π΅ΠΈ Π² ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ°. ΠΠΌΠ°ΡΠ΅ ΠΌΠ΅ΡΡ, Π·Π°ΠΊΡΡΠΊΠΈ, Ρ ΡΠ°Π½Π°, Π²ΡΠΈΡΠΊΠΎ Π±Π΅ΡΠ΅ Π½Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅!
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Intel, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠ΅ ΠΊΠ°ΠΌΠ΅ΡΠΈ, Raspberry PI, Neural Compute Stick 2.
ΠΠ·Π±ΠΎΡ Π½Π° Π·Π°Π΄Π°ΡΠ°
ΠΠ΄Π½Π° ΠΎΡ Π½Π°ΠΉ-ΡΡΡΠ΄Π½ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π·Π° Ρ Π°ΠΊΠ°ΡΠΎΠ½Π° Ρ ΠΎΡΠΊΡΠΈΡΠ° ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π΅ ΠΈΠ·Π±ΠΎΡΡΡ Π½Π° Π·Π°Π΄Π°ΡΠ°. ΠΠ΅Π΄Π½Π°Π³Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΠΈΠΌ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² Π°Π½ΠΎΠ½ΡΠ° Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ, ΡΠ΅ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π°.
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΠΊΠΈ , ΠΊΠΎΠΈΡΠΎ Π²Π»ΠΈΠ·Π°Ρ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΠΌΡ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠΈΠ³Π°ΠΌΠ΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΡΡΡ ΡΠ΅ΡΠ°Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ½ΠΎΡΠΎ Π·ΡΠ΅Π½ΠΈΠ΅. ΠΡΡΡΠ½ΠΎΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ½ΠΎΡΠΎ Π·ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΡΠΎ Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅ΡΠ΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenVINO, Π° Π°ΠΊΠΎ ΡΠ°ΠΊΠ°Π²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΌΠΈΡΠ»Π΅Π½Π°, ΡΠ΅ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΎΡΠΊΡΠΈΡ Π΄ΠΎΡΡΡΠΏ. Π Π΅ΡΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ Π΄ΡΡΠ³Π° ΠΏΠΎΡΠΎΠΊΠ° β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅ΡΡΠ°. ΠΠ±ΠΌΠΈΡΠ»ΡΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π·Π°Π΄Π°ΡΠ° Π·Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° Π΅ΠΌΠΎΡΠΈΠΈ ΠΏΠΎ ΡΠ΅Ρ. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ Π² OpenVINO Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΠΌΠΎΠ΄Π΅Π», ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΅ΠΌΠΎΡΠΈΠΈΡΠ΅ Π½Π° ΡΠΎΠ²Π΅ΠΊ ΠΏΠΎ Π»ΠΈΡΠ΅ΡΠΎ, Π½ΠΎ:
- Π ΡΠ΅ΠΎΡΠΈΡΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΡΠΎ ΡΡΡ Π·Π²ΡΠΊ, ΡΠ°ΠΊΠ° ΠΈ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΎΡΠ½ΠΎΡΡΡΠ°.
- ΠΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ°Ρ ΡΠ΅ΡΠ΅Π½ ΡΠ³ΡΠ» Π½Π° Π²ΠΈΠΆΠ΄Π°Π½Π΅, Π·Π° Π΄Π° ΠΏΠΎΠΊΡΠΈΡΡ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° Π·ΠΎΠ½Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΅ Π½Π΅ Π΅Π΄Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ°, Π·Π²ΡΠΊΡΡ Π½ΡΠΌΠ° ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅.
Π Π°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ ΠΈΠ΄Π΅ΡΡΠ°: ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΡΠ΅ΠΊΡΠΎΡΠ° Π½Π° ΡΡΡΠ³ΠΎΠ²ΠΈΡΡΠ° Π½Π° Π΄ΡΠ΅Π±Π½ΠΎ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠ°ΡΠΈΡΠ΅ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈΡΠ΅. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π΅ Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ ΠΎΡ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π·Π°ΠΏΠΎΡΠ½Π΅ Π΄Π° Π²Π΄ΠΈΠ³Π° ΡΠΎΠ½ - ΠΌΠΎΠΆΠ΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠΌΠΎΡ.
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ²Π΅ΠΊ ΠΏΠΎ Π³Π»Π°Ρ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°ΠΌΠ΅ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, Π΄Π° ΠΎΡΠ΅Π½ΡΠ²Π°ΠΌΠ΅ Π°ΡΠΌΠΎΡΡΠ΅ΡΠ°ΡΠ° Π² ΠΊΠΎΠ»Π΅ΠΊΡΠΈΠ²Π°, Π·Π²ΡΡΠΈ Π΄ΠΎΠ±ΡΠ΅!
Π€ΠΎΡΠΌΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
- ΠΠ°Π»ΡΠΊ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
- Π Π°Π±ΠΎΡΠ° Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅
- ΠΠΈΡΠΊΠ° ΡΠ΅Π½Π°
- ΠΠ΅ΡΠ½Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡ
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, ΠΊΠ°ΡΠΎ ΡΠ΅Π»Π΅Π²ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ Raspberry Pi 3 Ρ .
Π’ΡΠΊ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ Π΅Π΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡ Π½Π° NCS - ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ CNN Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, Π° Π°ΠΊΠΎ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π» Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅, ΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°ΠΉΡΠ΅ ΜΆΡΜΆΠ°ΜΆΠ½ΜΆΡΜΆΠ΅ΜΆΠ²ΜΆ ΜΆΡΜΆ ΜΆΠ±ΜΆΡΜΆΠ±ΜΆΠ½ΜΆΠΎΜΆΠΌΜΆ Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
Π Π°Π±ΠΎΡΠ°ΡΠ° Π΅ ΠΌΠ°Π»ΠΊΠ°: Π½ΡΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ΄ΠΎΠ±ΠΈΠ΅ΠΌ Ρ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½. ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΅ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ USB-ΠΌΠΈΠΊΡΠΎΡΠΎΠ½, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΄ΠΎΠ±ΡΠ΅ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ RPI. ΠΠΎ ΠΈ ΡΡΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ "Π»Π΅ΠΆΠΈ ΠΏΠΎΠ΄ ΡΡΠΊΠ°". ΠΠ° Π·Π°ΠΏΠΈΡ Π½Π° Π³Π»Π°ΡΠ° ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Voice Bonnet ΠΎΡ Π½Π°Π±ΠΎΡΠ° , Π½Π° ΠΊΠΎΡΡΠΎ Π΅ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ ΡΡΠ΅ΡΠ΅ΠΎ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½.
Π‘Π²Π°Π»ΡΠΌΠ΅ Raspbian ΠΎΡ ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½Π° ΡΠ»Π°ΡΠΊΠ°, ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΡΡ ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΡΡ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ Π°ΡΠ΄ΠΈΠΎ Ρ Π΄ΡΠ»ΠΆΠΈΠ½Π° 5 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΈ ΡΠ΅ Π³ΠΎ Π·Π°ΠΏΠ°Π·ΠΈ Π² ΡΠ°ΠΉΠ»):
arecord -d 5 -r 16000 test.wavΠΠ΅Π΄Π½Π°Π³Π° ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°ΠΌ, ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΈ Π΄ΠΎΠ±ΡΠ΅ ΡΠ»Π°Π²Ρ ΡΡΠΌΠΎΠ²Π΅. ΠΠ° Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π°, ΡΠ΅ Π²Π»Π΅Π·Π΅ΠΌ Π² alsamixer, ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π·Π° Π·Π°ΠΏΠΈΡ ΠΈ ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈΠΌ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π» Π΄ΠΎ 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Π©Π΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ 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 ms, Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° Π΅ΠΌΠΎΡΠΈΠΈ (ΠΊΠ°ΠΊΡΠΎ ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ) Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΎ Ρ Π΄Π°ΡΠ°ΡΠ΅Ρ 48 kHz, ΡΠ΅ ΡΠ»Π°Π²ΡΠΌΠ΅ ΡΠ°Π½ΠΊΠΎΠ²Π΅ Ρ ΡΠ°Π·ΠΌΠ΅Ρ 48000Γ20 ms/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 = []ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΠΎΡΡΡΡΠΈΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΡΠΈΠ²Π°ΠΌΠ΅ Π½Π° github, Π³ΡΠ³Π»ΠΈΠΌ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½Π° ΡΠ°ΡΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ Π²Ρ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ, Π° ΠΎΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π΄Π° Π³ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° OpenVINO β IR (Intermediate Representation). ΠΡΠΎΠ±Π²Π°Π»ΠΈ ΡΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 5-7 ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ github, ΠΈ Π°ΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π·Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° Π΅ΠΌΠΎΡΠΈΠΈ Π·Π°ΡΠ°Π±ΠΎΡΠΈ Π²Π΅Π΄Π½Π°Π³Π°, ΡΠΎ Π·Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ΡΠΎ ΠΏΠΎ Π³Π»Π°Ρ Π½ΠΈ ΠΎΡΠ½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ β ΡΠ°ΠΌ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ.
Π‘ΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅:
- ΠΠΌΠΎΡΠΈΠΈ ΠΎΡ Π³Π»Π°ΡΠ° β
Π’Ρ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ: Π°ΡΠ΄ΠΈΠΎΡΠΎ ΡΠ΅ Π½Π°ΡΡΠ·Π²Π° Π½Π° ΠΎΡΠΊΡΡΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ, Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΎΡΠΊΡΡΠΈ ΠΈΠ·Π²Π»ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³ΠΈ ΠΏΠΎΠ΄Π°Π²Π°ΠΌΠ΅ Π½Π° Π²Ρ ΠΎΠ΄Π° Π½Π° CNN - Π Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ ΠΏΠΎ Π³Π»Π°Ρ β
Π’ΡΠΊ Π²ΠΌΠ΅ΡΡΠΎ MFCC ΡΠ°Π±ΠΎΡΠΈΠΌ ΡΡΡ ΡΠΏΠ΅ΠΊΡΡΠΎΠ³ΡΠ°ΠΌΠ°, ΡΠ»Π΅Π΄ FFT ΠΏΠΎΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠΈΠ³Π½Π°Π»Π° Π² CNN, ΠΊΡΠ΄Π΅ΡΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π³Π»Π°ΡΠ°.
ΠΠ°ΡΠ°ΡΡΠΊ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ ΠΎΡ ΡΠ΅ΠΎΡΠΈΡΡΠ°. OpenVINO Π²ΠΊΠ»ΡΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Π°:
- Open Model Zoo, ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠΈ
- Model Optimizer, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΌΠΎΠ΄Π΅Π»Π° ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΡΠΈΡΠ΅ (Tensorflow, ONNX ΠΈ Ρ.Π½.) Π² ΡΠΎΡΠΌΠ°Ρ 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ΠΠ°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π³Π»Π°ΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠΈ (Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠΈΠΌΠ° ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° Π΅ΠΊΠΈΠΏΠ°)
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ°Π½ Π³Π»Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Π±ΡΡΠ·ΠΎ ΡΡΡΠΈΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½Π΅, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠΏΠ΅ΠΊΡΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ Ρ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΡΠΎ 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 Π²ΡΡΡ Ρ tcp ΠΏΡΠΎΡΠΎΠΊΠΎΠ»).
ΠΡΡΠ²Π°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Raspberry, Ρ.Π΅. ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡΡΠ°, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΈ Π² json, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΏΡΡΡ ΡΠΈ ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°Ρ Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΎΡΠΌΠΈΡΠ°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° Π΅ΠΌΠΎΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡ ΡΠΎΠ½ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½ΡΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ Π΅Π½Π΄ΠΏΠΎΠΈΠ½ΡΠ° Π½Π° Π²Π΅Π±ΡΠΎΠΊΠ΅ΡΠ°. Π¦Π΅Π»ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ Π½Π° Π΅Π·ΠΈΠΊΠ° golang, ΠΊΠ°ΡΠΎ ΠΈΠ·Π±ΠΎΡΡΡ ΠΏΠ°Π΄Π½Π° Π²ΡΡΡ Ρ Π½Π΅Π³ΠΎ, Π·Π°ΡΠΎΡΠΎ Π΄ΠΎΠ±ΡΠ΅ ΡΠ΅ ΡΠΏΡΠ°Π²Ρ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ, Ρ ΠΊΠΎΠΈΡΠΎ Π³ΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²ΡΡ.
ΠΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΅Π½Π΄ΠΏΠΎΠΈΠ½ΡΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ° ΠΈ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΡ. Π ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ, ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΠΎΠ±ΡΠΈΡ Ρ ΡΠ±, ΠΎΡΠΊΡΠ΄Π΅ΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π½Π°ΠΏΡΠ΅Π΄ (Π½Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΎΠ½Ρ), Π° Π°ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π·Π°ΡΠ²ΠΎΡΠΈ Π²ΡΡΠ·ΠΊΠ°ΡΠ° (Raspberry ΠΈΠ»ΠΈ ΡΡΠΎΠ½ΡΠ°), Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½ΡΡΡ ΠΌΡ ΡΠ΅ Π°Π½ΡΠ»ΠΈΡΠ° ΠΈ ΡΠΎΠΉ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΠΎΡ Ρ ΡΠ±Π°.
ΠΡΠ°ΠΊΠ²Π°ΠΌΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ Π±Π΅ΠΊΠ΅Π½Π΄Π°Front-end ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΡΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° JavaScript, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° React Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ ΠΈ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π¦Π΅Π»ΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΡΡΠ΅Π· Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ Π½Π° back-end ΡΡΡΠ°Π½Π°ΡΠ° ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° Raspberry Pi. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΠ΅Π· react-router, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎΡΡΡΠΏΠ²Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΡΠ²ΡΡΠ° ΡΡΠ΅Π· ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° WebSocket. Raspberry Pi Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠ° Π³Π»Π°Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡΠ° ΠΊΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΎΠ²Π΅ΠΊ ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π°ΡΠ° Π±Π°Π·Π° ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠΏΠΈΡΡΠΊ Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ»ΠΈΠ΅Π½ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π°ΠΊΡΡΠ°Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π°Π²Π°ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΠΉΡΠΎ Ρ Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π² ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΅ΠΌΠΎΡΠΈΡΡΠ°, Ρ ΠΊΠΎΡΡΠΎ ΠΈΠ·ΡΠ°Π·ΡΠ²Π° Π΄ΡΠΌΠΈΡΠ΅.

ΠΠ»Π°Π²Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΎΠ±Π½ΠΎΠ²ΡΠ΅ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° Π·Π°Π²ΡΡΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠ°ΠΊΡΠΎ Π³ΠΎ Π±ΡΡ ΠΌΠ΅ Π·Π°ΠΌΠΈΡΠ»ΠΈΠ»ΠΈ, ΠΏΡΠΎΡΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅, Π·Π°ΡΠΎΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½Π°Π΄Π΅ΠΆΠ΄Π° Π±Π΅ΡΠ΅ Π½Π° Π΄Π΅ΠΌΠΎ, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΡΠ°Π±ΠΎΡΠΈ. Π ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° ΡΠ°Π·ΠΊΠ°Π·Π°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΡΡΡΠΎΠ΅Π½ΠΎ, ΠΊΠΎΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ ΠΈ Ρ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΌΠ΅ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°Π»ΠΈ. Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΠ°ΡΡ Π±Π΅ΡΠ΅ Π΄Π΅ΠΌΠΎ β Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Ρ ΠΎΠΆΠ΄Π°Ρ Π° ΠΈΠ· Π·Π°Π»Π°ΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΡΠ΅Π΄ ΠΈ ΡΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π²Π°Ρ Π° Π΄ΠΎ Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ. ΠΠ°Π΄Π°Π²Π°Ρ Π° Π²ΡΠΏΡΠΎΡΠΈ ΠΈ Π½Π° Π½Π°Ρ, Π²ΡΠ΅ΠΊΠΈ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠ΅ Π·Π° ΡΠ²ΠΎΡΡΠ° ΡΠ°ΡΡ, Π½Π° Π»Π°ΠΏΡΠΎΠΏΠ° ΠΎΡΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠ΅Π±Π°, ΠΈ Π²ΡΠΈΡΠΊΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°ΡΠ΅.
Π©Π΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅ΡΠ΅ 150$:
- Raspberry Pi 3 ~ 35$
- Google AIY Voice Bonnet (ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° respeaker) ~ 15$
- Intel NCS 2 ~ 100$
ΠΠ°ΠΊ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌ:
- ΠΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° β Π΄Π° ΠΏΠΎΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ
- ΠΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»Π°: ΠΏΠΎ Π³Π»Π°Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠΎΠ» ΠΈ Π²ΡΠ·ΡΠ°ΡΡ
- ΠΠ° ΡΠ°Π·Π΄Π΅Π»ΡΠΌΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π²ΡΡΠ°ΡΠΈ Π³Π»Π°ΡΠΎΠ²Π΅ (Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ)
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ:

Π£ΠΌΠΎΡΠ΅Π½ΠΈ, Π½ΠΎ ΡΠ°ΡΡΠ»ΠΈΠ²ΠΈ ΡΠΌΠ΅Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅. ΠΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅ Π΅ΠΊΠΈΠΏΠΈ Π»ΠΈΡΠ½ΠΎ Π½ΠΈ Ρ Π°ΡΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΈ ΠΏΠ°ΡΠΊΠΈΠ½Π³ ΠΌΠ΅ΡΡΠ°. ΠΠ° Π½Π°Ρ Π±Π΅ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΈΡΡΠ½ΠΎ ΠΏΡΠ΅ΠΆΠΈΠ²ΡΠ²Π°Π½Π΅, ΠΏΠΎΡΠ°ΠΏΡΠΉΠΊΠΈ ΡΠ΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅ Π² ΡΠ΅Π³ΠΈΠΎΠ½ΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Ρ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π½Π° ΡΠ΅ΠΌΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ AI.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com



