30 рдирд╡рдВрдмрд░ - 1 рджрд┐рд╕рдВрдмрд░ рдХреЛ рдирд┐рдЬрд╝рдиреА рдиреЛрд╡рдЧреЛрд░реЛрдб рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдЙрддреНрдкрд╛рдж рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреИрд╕реЗ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рдЕрдВрддрддрдГ рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред
рд╣реИрдХрдереЙрди рдореЗрдВ 10 рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдореЛрдВ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдЖрдП рд╣реИрдВред рд╣реИрдХрдереЙрди рдХрд╛ рд╕реНрдерд╛рди "рдХреНрд░реЗрдорд▓рд┐рдВрд╕реНрдХреА рдСрди рдкреЛрдЪреЗрди" рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдерд╛, рдЬрд╣рд╛рдВ рдирд┐рдЬрд╝рдиреА рдиреЛрд╡рдЧреЛрд░реЛрдб рдХреА рдкреНрд░рд╛рдЪреАрди рддрд╕реНрд╡реАрд░реЗрдВ рдПрдХ рдШреЗрд░реЗ рдореЗрдВ рд▓рдЯрдХрд╛рдИ рдЧрдИ рдереАрдВ! (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдЗрдВрдЯреЗрд▓ рдХрд╛ рдХреЗрдВрджреНрд░реАрдп рдХрд╛рд░реНрдпрд╛рд▓рдп рдирд┐рдЬрд╝рдиреА рдиреЛрд╡рдЧреЛрд░реЛрдб рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ)ред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 26 рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдерд╛ред рдПрдХ рдЕрд▓рдЧ рдлрд╛рдпрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдбреЗрдореЛ рд╕рддреНрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рдереА рдХрд┐ рдЬреЛ рднреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереА рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд░рд╣ рдЧрдП рдереЗред рд╕рд╛рдорд╛рди, рдирд╛рд╢реНрддрд╛, рднреЛрдЬрди, рд╕рдм рдХреБрдЫ рд╡рд╣рд╛рдБ рднреА рдерд╛!
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЯреЗрд▓ рдиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкреАрдЖрдИ, рдиреНрдпреВрд░рд▓ рдХрдВрдкреНрдпреВрдЯ рд╕реНрдЯрд┐рдХ 2 рдкреНрд░рджрд╛рди рдХрд┐рдПред
рдХрд╛рд░реНрдп рдЪрдпрди
рдлреНрд░реА-рдлреЙрд░реНрдо рд╣реИрдХрдереЙрди рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЪреБрдиреМрддреА рдЪреБрдирдирд╛ рд╣реИред рд╣рдордиреЗ рддреБрд░рдВрдд рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЕрднреА рддрдХ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
- рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрдпреБрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдзреНрд╡рдирд┐ рдФрд░ рдЫрд╡рд┐ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- рдХреИрдорд░реЗ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдг рд╕рдВрдХреАрд░реНрдг рд╣реЛрддрд╛ рд╣реИ; рдПрдХ рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреИрдорд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; рдзреНрд╡рдирд┐ рдкрд░ рдРрд╕реА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ: рдЖрдЗрдП рдЦреБрджрд░рд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВред рдЖрдк рд╕реНрдЯреЛрд░ рдЪреЗрдХрдЖрдЙрдЯ рдкрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрддреБрд╖реНрдЯрд┐ рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ рд╕реЗ рдЕрд╕рдВрддреБрд╖реНрдЯ рд╣реИ рдФрд░ рдЕрдкрдирд╛ рд╕реНрд╡рд░ рдКрдВрдЪрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдорджрдж рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдорд╛рдирд╡ рдЖрд╡рд╛рдЬ рдкрд╣рдЪрд╛рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред рдЦреИрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреЛрд░ рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕реНрд╡рдпрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛, рдЯреАрдо рдореЗрдВ рдорд╛рд╣реМрд▓ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ!
рд╣рдо рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
- рд▓рдХреНрд╖реНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕рдВрдЪрд╛рд▓рди
- рдХрдо рдХреАрдордд
- рдЖрд╕рд╛рди рдорд╛рдкрдиреАрдпрддрд╛
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд▓рдХреНрд╖реНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 рд╕реА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ
рдпрд╣рд╛рдВ рдПрдирд╕реАрдПрд╕ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдпрд╣ рдорд╛рдирдХ рд╕реАрдПрдирдПрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдХрд╕реНрдЯрдо рдкрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВред
рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ: рдЖрдкрдХреЛ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдирд┐рдпрдорд┐рдд USB рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди RPI рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рднреА рд╕рдорд╛рдзрд╛рди рд╕рдЪрдореБрдЪ "рдкрд╛рд╕ рдореЗрдВ рд╣реА рд╣реИред" рдЖрд╡рд╛рдЬ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд┐рдЯ рд╕реЗ рд╡реЙрдпрд╕ рдмреЛрдирдЯ рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ
рд░рд╛рд╕реНрдкрдмрд┐рдпрди рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
arecord -d 5 -r 16000 test.wav
рдореБрдЭреЗ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдмрд╣реБрдд рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдФрд░ рд╢реЛрд░ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрд▓реНрд╕рд╛рдорд┐рдХреНрд╕рд░ рдкрд░ рдЬрд╛рдПрдВ, рдХреИрдкреНрдЪрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЪреБрдиреЗрдВ рдФрд░ рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рд╕реНрддрд░ рдХреЛ 50-60% рддрдХ рдХрдо рдХрд░реЗрдВред
рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдмреЙрдбреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдврдХреНрдХрди рдХреЗ рд╕рд╛рде рднреА рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рд╕рдВрдХреЗрддрдХ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛
AIY рд╡реЙрдпрд╕ рдХрд┐рдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ RGB рдмрдЯрди рд╣реИ, рдЬрд┐рд╕рдХреА рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо "Google AIY Led" рдЦреЛрдЬрддреЗ рд╣реИрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд╛рддреЗ рд╣реИрдВ:
рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 7 рд╡рд░реНрдЧ рд╣реИрдВ, рдФрд░ рдмрдЯрди рдореЗрдВ 8 рд░рдВрдЧ рд╣реИрдВ, рдмрд╕ рдЗрддрдирд╛ рд╣реА!
рд╣рдо рдмрдЯрди рдХреЛ GPIO рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЙрдпрд╕ рдмреЛрдирдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AIY рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
рдЖрдЗрдП рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╡рдирд╛ рдХрд╛ RGB рдЯреБрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд░рдВрдЧ рдФрд░ 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/30ms рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реАрдЦреЗрдВрдЧреЗ) 48kHz рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рдХрд░реЗрдВрдЧреЗ 48000├Ч20ms/1000├Ч1(рдореЛрдиреЛ)=960 рдмрд╛рдЗрдЯреНрд╕ рдЖрдХрд╛рд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред Webrtcvad рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рд╕рд╣реА/рдЧрд▓рдд рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬреЛ рдЦрдВрдб рдореЗрдВ рд╡реЛрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
- рд╣рдо рдЙрди рдЦрдВрдбреЛрдВ рдХреЛ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╡реЛрдЯ рд╣реИ; рдпрджрд┐ рдХреЛрдИ рд╡реЛрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЦрд╛рд▓реА рдЦрдВрдбреЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗред
- рдпрджрд┐ рдЦрд╛рд▓реА рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ >=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 = []
рдЕрдм рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рджреЗрдЦрдиреЗ, рдЬреАрдердм, рдЧреВрдЧрд▓ рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╣рдорд╛рд░реА рдПрдХ рд╕реАрдорд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЗрдВ рдУрдкрдирд╡рд┐рдиреЛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рд░реВрдк - рдЖрдИрдЖрд░ (рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдордиреЗ рдЬреАрдердм рд╕реЗ рд▓рдЧрднрдЧ 5-7 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдЖрдЬрд╝рдорд╛рдП, рдФрд░ рдпрджрд┐ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рдореЙрдбрд▓ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╛рдЬ рдкрд╣рдЪрд╛рди рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - рд╡реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- рд╡рд╛рдгреА рд╕реЗ рднрд╛рд╡ -
https://github.com/alexmuhr/Voice_Emotion
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдСрдбрд┐рдпреЛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдЕрдВрд╢реЛрдВ рдореЗрдВ рдХрд╛рдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рд╣рдо рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВрдПрдордПрдлрд╕реАрд╕реА рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕реАрдПрдирдПрди рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ - рдЖрд╡рд╛рдЬрд╝ рдкрд╣рдЪрд╛рди -
https://github.com/linhdvu14/vggvox-speaker-identification
рдпрд╣рд╛рдВ, рдПрдордПрдлрд╕реАрд╕реА рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рд╕реНрдкреЗрдХреНрдЯреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдПрдлрдПрдлрдЯреА рдХреЗ рдмрд╛рдж рд╣рдо рд╕реАрдПрдирдПрди рдХреЛ рд╕рд┐рдЧреНрдирд▓ рдлреАрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдЖрд╡рд╛рдЬ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдорд┐рд▓рддрд╛ рд╣реИред
рдЖрдЧреЗ рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдореЙрдбрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред OpenVINO рдореЗрдВ рдХрдИ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдореЙрдбрд▓ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдЦреЛрд▓реЗрдВ, рдЬрд┐рд╕рдХреЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдореЙрдбрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рдЖрдк рдПрдХ рдореЙрдбрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рд╛рд░реВрдкреЛрдВ (рдЯреЗрдиреНрд╕рд░рдлрд╝реНрд▓реЛ, рдУрдПрдирдПрдирдПрдХреНрд╕ рдЖрджрд┐) рд╕реЗ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЖрдЧреЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ
- рдЗрдВрдлрд╝рд░реЗрдВрд╕ рдЗрдВрдЬрди рдЖрдкрдХреЛ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░, рдЕрд╕рдВрдЦреНрдп рдЪрд┐рдкреНрд╕ рдФрд░ рдиреНрдпреВрд░рд▓ рдХрдВрдкреНрдпреВрдЯ рд╕реНрдЯрд┐рдХ рдПрдХреНрд╕реЗрд▓реЗрд░реЗрдЯрд░ рдкрд░ рдЖрдИрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
- OpenCV рдХрд╛ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рд╕рдВрд╕реНрдХрд░рдг (рдЗрдВрдлрд╝рд░реЗрдВрд╕ рдЗрдВрдЬрди рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде)
рдЖрдИрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рджреЛ рдлрд╛рдЗрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: .xml рдФрд░ .binред
рдореЙрдбрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рдХреЛ рдЖрдИрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: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 рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрддрдиреА рджреВрд░ рддрдХ рдЦреЛрдЬ рдирд╣реАрдВ рдХреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдбреАрдПрдирдПрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдИрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореЙрдбрд▓ рдХреЛ рдУрдкрдирд╕реАрд╡реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВредimport cv2 as cv emotionsNet = cv.dnn.readNet('emotions_model.bin', 'emotions_model.xml') emotionsNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдЖрдкрдХреЛ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдиреНрдпреВрд░рд▓ рдХрдВрдкреНрдпреВрдЯ рд╕реНрдЯрд┐рдХ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдмреБрдирд┐рдпрд╛рджреА рдЧрдгрдирд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдЯрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдЧрд▓рд╛, рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╣рдо рдЕрдкрдиреЗ рдСрдбрд┐рдпреЛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ 0.4 s рд╣реИ), рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ рдХреЛ 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 рдХрд╛ рд╕рдордп рд▓рдЧрд╛)ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдП рдореЙрдбрд▓ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ рдФрд░ рд╣рдордиреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд┐рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рд╣рдо рдШрд░ рд╕реЗ рдЕрдкрдиреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЙрдЯрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд▓реИрдкрдЯреЙрдк рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдмреИрдХрдПрдВрдб рдлреНрд░рдВрдЯ рдФрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рдмреАрдЪ рдПрдХ рдПрдВрдб-рдЯреВ-рдПрдВрдб рд╕рдВрджреЗрд╢ рдЪреИрдирд▓ рд╣реИ, рдЬреЛ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рддрдХрдиреАрдХ (http рдУрд╡рд░ рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдкрд╣рд▓рд╛ рдЪрд░рдг рд░рд╛рд╕реНрдкрдмреЗрд░реА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, json рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЧрдП рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛, рдЬреЛ рдЙрдирдХреА рдпрд╛рддреНрд░рд╛ рдХреЗ рдЖрдзреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╡рдирд╛рддреНрдордХ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред рдпрд╣ рдкреИрдХреЗрдЯ рдлрд┐рд░ рдлреНрд░рдВрдЯрдПрдВрдб рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрдкреВрд░реНрдг рдмреИрдХрдПрдВрдб рддрдВрддреНрд░ рдЧреЛрд▓рд╛рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕рдХрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣рдм рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рд╕рдВрджреЗрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдЧреЗ (рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмреНрдб рдлреНрд░рдВрдЯ рдкрд░) рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрд╢рди (рд░рд╛рд╕реНрдкрдмреЗрд░реА рдпрд╛ рдлреНрд░рдВрдЯ) рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрдВрджреНрд░ред
рд╣рдо рдкреАрдЫреЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВрдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬ рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдмреИрдХ-рдПрдВрдб рд╕рд╛рдЗрдб рдкрд░ рдФрд░ рд╕реАрдзреЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╣реИред рдкреГрд╖реНрда рдореЗрдВ рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрднрд╛рдЧреАрдп рд░реВрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд░реБрдЪрд┐ рдХрд╛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдореБрдЦреНрдп рдкреГрд╖реНрда рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рддрдд рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдПрдХ рдЖрд╡рд╛рдЬ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреА рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрдВрдЬреАрдХреГрдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрдХреНрддрд┐ рдХреА рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕реВрдЪреА рднреЗрдЬрддреА рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╡реАрдирддрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЕрд╡рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╕рдВрднрд╡рддрдГ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд╣ рднрд╛рд╡рдирд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд░рддрд╛ рд╣реИред
рдЕрджреНрдпрддрди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рд╣реЛрдо рдкреЗрдЬрдирд┐рд╖реНрдХрд░реНрд╖
рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рд╕рдордп рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдбреЗрдореЛ рдореЗрдВ рдореБрдЦреНрдп рдЖрд╢рд╛ рдереА, рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреМрди рд╕реЗ рдореЙрдбрд▓ рдЕрдкрдирд╛рдП, рдЙрдиреНрд╣реЗрдВ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЕрдЧрд▓рд╛ рдбреЗрдореЛ рднрд╛рдЧ рдерд╛ - рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХрдорд░реЗ рдореЗрдВ рдШреВрдореЗ рдФрд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдорд╕реЗ рднреА рдкреНрд░рд╢реНрди рдкреВрдЫреЗ, рд╕рднреА рдиреЗ рдЕрдкрдиреЗ-рдЕрдкрдиреЗ рдЙрддреНрддрд░ рджрд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╡реЗрдм рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдореБрдЭреЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд $150 рдереА:
- рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 ~ $35
- Google AIY рд╡реЙрдпрд╕ рдмреЛрдирдЯ (рдЖрдк рд░рд┐рд╕реНрдкреАрдХрд░ рд╢реБрд▓реНрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ) ~15$
- рдЗрдВрдЯреЗрд▓ рдПрдирд╕реАрдПрд╕ 2 ~ 100$
рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдП:
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкрд╛рда рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ
- рдХреБрдЫ рдФрд░ рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ: рдЖрдк рдЖрд╡рд╛рдЬ рд╕реЗ рд▓рд┐рдВрдЧ рдФрд░ рдЙрдореНрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- рдПрдХ рд╕рд╛рде рдмрдЬрдиреЗ рд╡рд╛рд▓реА рдЖрд╡рд╛рдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ (рдбрд╛рдпрд░рд╛рдЗрдЬреЗрд╢рди)
рднрдВрдбрд╛рд░:
https://github.com/vladimirwest/OpenEMO
рд╣рдо рдердХреЗ рд╣реБрдП рд╣реИрдВ рд▓реЗрдХрд┐рди рдЦреБрд╢ рд╣реИрдВрдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЖрдпреЛрдЬрдХреЛрдВ рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЕрдиреНрдп рдЯреАрдореЛрдВ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ, рд╣рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд┐рдГрд╢реБрд▓реНрдХ рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдЖрдпрд╛ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпрд╣ рдЙрддреНрдкрд╛рдж рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рддрд▓реНрд▓реАрдирддрд╛ рдХрд╛ рдПрдХ рдмреЗрд╣рдж рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдЖрдИ рд╡рд┐рд╖рдпреЛрдВ рд╕рд╣рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рд╕реНрд░реЛрдд: www.habr.com