рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо Node.js рдФрд░ рд╡реЗрдм рд╕реНрдкреАрдЪ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╛рдЬ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рд▓реЗ рдбреНрд░реЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗред рдХреЙрдкреНрдЯрд░ - рддреЛрддрд╛ рдПрдЖрд░рдбреНрд░реЛрди 2.0ред
рдЕрдиреБрд╕реНрдорд╛рд░рдХ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░рдЪрд╛рд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп 10 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо
"рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛ" .
рдкрд░рд┐рдЪрдп
рдбреНрд░реЛрди рдЕрджреНрднреБрдд рд╣реИрдВ. рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдХреНрд╡рд╛рдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛, рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд▓реЗрдирд╛ рдпрд╛ рдмрд╕ рдореМрдЬ-рдорд╕реНрддреА рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдирд╡рд░рд╣рд┐рдд рд╣рд╡рд╛рдИ рд╡рд╛рд╣рдиреЛрдВ (рдпреВрдПрд╡реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдордиреЛрд░рдВрдЬрди рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╕рд┐рдиреЗрдорд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЧреНрд▓реЗрд╢рд┐рдпрд░реЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реЗрдирд╛ рдФрд░ рдХреГрд╖рд┐ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рдбреНрд░реЛрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╣рд╛рдБ, рд╣реИрд▓реАрдХрд╛рдкреНрдЯрд░ рд╡рд╣реА рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдк рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЛ рдХрд╣реЗрдВрдЧреЗред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдпреВрдПрд╡реА рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдПрдХ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╣реИред
рд▓реЛрд╣рд╛
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рддреЛрддрд╛ рдПрдЖрд░рдбреНрд░реЛрди 2.0;
- рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓;
- рдЕрдЪреНрдЫрд╛ рдорд╛рдЗрдХреНрд░реЛрдлреЛрдиред
рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рдмрдВрдзрди рд╡рд┐рдВрдбреЛрдЬрд╝/рдореИрдХ/рдЙрдмрдВрдЯреВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ Mac рдФрд░ Ubuntu 18.04 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред
рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░
Node.js рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЬрд░реВрд░рдд рднреА рд╣реИ
рдХреЙрдкреНрдЯрд░ рдХреЛ рд╕рдордЭрдирд╛
рдЖрдЗрдП рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдкреИрд░рдЯ рдПрдЖрд░рдбреНрд░реЛрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЙрдкреНрдЯрд░ рдореЗрдВ рдЪрд╛рд░ рдореЛрдЯрд░реЗрдВ рд╣реИрдВ.
рд╡рд┐рдкрд░реАрдд рдореЛрдЯрд░реЗрдВ рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВред рдПрдХ рдЬреЛрдбрд╝рд╛ рджрдХреНрд╖рд┐рдгрд╛рд╡рд░реНрдд рдШреВрдорддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╡рд╛рдорд╛рд╡рд░реНрддред рдбреНрд░реЛрди рдкреГрдереНрд╡реА рдХреА рд╕рддрд╣ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЭреБрдХрд╛рд╡ рдХреЗ рдХреЛрдг рдХреЛ рдмрджрд▓рдХрд░, рдореЛрдЯрд░реЛрдВ рдХреЗ рдШреВрдордиреЗ рдХреА рдЧрддрд┐ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЧрддрд┐рд╢реАрд▓ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдЪрд▓рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХреЙрдкреНрдЯрд░ рдХреА рдЧрддрд┐ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рд░реЛрдЯрд╛рд░ рдХреА рдШреВрд░реНрдгрди рдЧрддрд┐ рдХреЛ рдХрдо рдпрд╛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдПрдХ рд░реЛрд▓ рдмрдирддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдбреНрд░реЛрди рдЖрдЧреЗ рдпрд╛ рдкреАрдЫреЗ рдЙрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдореЛрдЯрд░реЛрдВ рдХреА рдЧрддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдХреЛ рдмрджрд▓рдХрд░, рд╣рдо рдЭреБрдХрд╛рд╡ рдХреЛрдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЙрдкреНрдЯрд░ рдХреЛ рдЕрдиреНрдп рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдпреБрдЧрддрд┐рдХреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛрддрд╛ рдПрдЖрд░рдбреНрд░реЛрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдбреНрд░реЛрди рдПрдХ рд╡рд╛рдИ-рдлрд╛рдИ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рд╣реИред рдХреЙрдкреНрдЯрд░ рдХреЛ рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕реЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреНрд╡рд╛рдбрдХреЙрдкреНрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЬреИрд╕реЗ рд╣реА рдбреНрд░реЛрди рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдП, рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдЯреЗрд▓рдиреЗрдЯ 192.168.1.1 рдЦреЛрд▓реЗрдВ - рдпрд╣ рдХреЙрдкреНрдЯрд░ рдХрд╛ рдЖрдИрдкреА рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рд╣рдорд╛рд░рд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдЧрд╛:
- рдЖрд╡рд╛рдЬ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреАрдЪ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕;
- рдЖрджреЗрд╢реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдФрд░ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛;
- рдбреНрд░реЛрди рдХреЛ рдЖрджреЗрд╢ рднреЗрдЬрдирд╛;
- рд▓рд╛рдЗрд╡ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рдг.
рдПрдкреАрдЖрдИ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдИрдерд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!
рдХреЛрдб
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред
рдлрд┐рд░ рд╣рдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдиреЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдПрдирдПрдордкреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВтАК
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ:
- рдЙрдбрд╝рд╛рди рднрд░рдирд╛;
- рдЙрддрд░рдирд╛;
- рдКрдкрд░ - рдбреНрд░реЛрди рдЖрдзрд╛ рдореАрдЯрд░ рдКрдкрд░ рдЙрдарддрд╛ рд╣реИ рдФрд░ рдордВрдбрд░рд╛рддрд╛ рд╣реИ;
- рдиреАрдЪреЗ - рдЖрдзрд╛ рдореАрдЯрд░ рдЧрд┐рд░рддрд╛ рд╣реИ рдФрд░ рдЬрдо рдЬрд╛рддрд╛ рд╣реИ;
- рдмрд╛рдИрдВ рдУрд░ - рдмрд╛рдИрдВ рдУрд░ рдЖрдзрд╛ рдореАрдЯрд░ рдЬрд╛рддрд╛ рд╣реИ;
- рджрд╛рдИрдВ рдУрд░ - рджрд╛рдИрдВ рдУрд░ рдЖрдзрд╛ рдореАрдЯрд░ рдЬрд╛рддрд╛ рд╣реИ;
- рдШреВрд░реНрдгрди - рджрдХреНрд╖рд┐рдгрд╛рд╡рд░реНрдд 90 рдбрд┐рдЧреНрд░реА рдШреВрдорддрд╛ рд╣реИ;
- рдЖрдЧреЗ - рдЖрдзрд╛ рдореАрдЯрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ;
- рдкреАрдЫреЗ - рдЖрдзрд╛ рдореАрдЯрд░ рдкреАрдЫреЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд░реБрдХрдирд╛ред
рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ, рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдбреНрд░реЛрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
const express = require('express');
const bodyparser = require('body-parser');
var arDrone = require('ar-drone');
const router = express.Router();
const app = express();
const commands = ['takeoff', 'land','up','down','goleft','goright','turn','goforward','gobackward','stop'];
var drone = arDrone.createClient();
// disable emergency
drone.disableEmergency();
// express
app.use(bodyparser.json());
app.use(express.static(__dirname + '/public'));
router.get('/',(req,res) => {
res.sendFile('index.html');
});
router.post('/command',(req,res) => {
console.log('command recieved ', req.body);
console.log('existing commands', commands);
let command = req.body.command.replace(/ /g,'');
if(commands.indexOf(command) !== -1) {
switch(command.toUpperCase()) {
case "TAKEOFF":
console.log('taking off the drone');
drone.takeoff();
break;
case "LAND":
console.log('landing the drone');
drone.land();
break;
case "UP":
console.log('taking the drone up half meter');
drone.up(0.2);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "DOWN":
console.log('taking the drone down half meter');
drone.down(0.2);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOLEFT":
console.log('taking the drone left 1 meter');
drone.left(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},1000);
break;
case "GORIGHT":
console.log('taking the drone right 1 meter');
drone.right(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},1000);
break;
case "TURN":
console.log('turning the drone');
drone.clockwise(0.4);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOFORWARD":
console.log('moving the drone forward by 1 meter');
drone.front(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOBACKWARD":
console.log('moving the drone backward 1 meter');
drone.back(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "STOP":
drone.stop();
break;
default:
break;
}
}
res.send('OK');
});
app.use('/',router);
app.listen(process.env.port || 3000);
рдФрд░ рдпрд╣рд╛рдВ HTML рдФрд░ JavaScript рдХреЛрдб рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рдд рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИред
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Voice Controlled Notes App</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/shoelace-css/1.0.0-beta16/shoelace.css">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<h1>Voice Controlled Drone</h1>
<p class="page-description">A tiny app that allows you to control AR drone using voice</p>
<h3 class="no-browser-support">Sorry, Your Browser Doesn't Support the Web Speech API. Try Opening This Demo In Google Chrome.</h3>
<div class="app">
<h3>Give the command</h3>
<div class="input-single">
<textarea id="note-textarea" placeholder="Create a new note by typing or using voice recognition." rows="6"></textarea>
</div>
<button id="start-record-btn" title="Start Recording">Start Recognition</button>
<button id="pause-record-btn" title="Pause Recording">Pause Recognition</button>
<p id="recording-instructions">Press the <strong>Start Recognition</strong> button and allow access.</p>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="script.js"></script>
</body>
</html>
рдФрд░ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рднреА, рдЙрдиреНрд╣реЗрдВ рдиреЛрдб рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдирд╛ред
try {
var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
var recognition = new SpeechRecognition();
}
catch(e) {
console.error(e);
$('.no-browser-support').show();
$('.app').hide();
}
// other code, please refer GitHub source
recognition.onresult = function(event) {
// event is a SpeechRecognitionEvent object.
// It holds all the lines we have captured so far.
// We only need the current one.
var current = event.resultIndex;
// Get a transcript of what was said.
var transcript = event.results[current][0].transcript;
// send it to the backend
$.ajax({
type: 'POST',
url: '/command/',
data: JSON.stringify({command: transcript}),
success: function(data) { console.log(data) },
contentType: "application/json",
dataType: 'json'
});
};
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреЙрдкреНрдЯрд░ рд╡рд╛рдИ-рдлрд╛рдИ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рдФрд░ рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ)ред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:3000 рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ рд░рд┐рдХреЙрдЧреНрдирд┐рд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рд╣рдо рдбреНрд░реЛрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЦреБрд╢ рд╣реИрдВред
рдбреНрд░реЛрди рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рдг
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рд╡рд╣рд╛рдВ рдХреЙрдкреА рдХрд░реЗрдВ:
const http = require("http");
const drone = require("dronestream");
const server = http.createServer(function(req, res) {
require("fs").createReadStream(__dirname + "/public/video.html").pipe(res);
});
drone.listen(server);
server.listen(4000);
рдФрд░ рдпрд╣рд╛рдВ HTML рдХреЛрдб рд╣реИ, рд╣рдо рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд░рдЦрддреЗ рд╣реИрдВред
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Stream as module</title>
<script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h1 id="heading">Drone video stream</h1>
<div id="droneStream" style="width: 640px; height: 360px"> </div>
<script type="text/javascript" charset="utf-8">
new NodecopterStream(document.getElementById("droneStream"));
</script>
</body>
</html>
рдлреНрд░рдВрдЯ рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:8080 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рдЙрдкрдпреЛрдЧреА рд╕рд▓рд╛рд╣
- рдЗрд╕ рдбреНрд░реЛрди рдХреЛ рдШрд░ рдХреЗ рдЕрдВрджрд░ рдЙрдбрд╝рд╛рдПрдВ.
- рдЙрдбрд╝рд╛рди рднрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдбреНрд░реЛрди рдкрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╡рдЪ рд▓рдЧрд╛рдПрдВред
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рд╣реИ рдпрд╛ рдирд╣реАрдВред
- рдпрджрд┐ рдбреНрд░реЛрди рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкрдХрдбрд╝рдХрд░ рдкрд▓рдЯ рджреЗрдВред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдХреЙрдкреНрдЯрд░ рдХреЛ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдореЛрдб рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧреА рдФрд░ рд░реЛрдЯрд░ рддреБрд░рдВрдд рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рддреИрдпрд╛рд░ рдХреЛрдб рдФрд░ рдбреЗрдореЛ
рдпрд╣ рдирд┐рдХрд▓рд╛!
рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рдлрд┐рд░ рдорд╢реАрди рдХреЛ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдирд╛ рдЖрдкрдХреЛ рдЦреБрд╢реА рджреЗрдЧрд╛! рдЕрдм рд╣рдордиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдбреНрд░реЛрди рдХреЛ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рд╕реБрдирдирд╛ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреА рдкрд╣рдЪрд╛рди, рд╕реНрд╡рд╛рдпрддреНрдд рдЙрдбрд╝рд╛рдиреЗрдВ, рд╣рд╛рд╡рднрд╛рд╡ рдкрд╣рдЪрд╛рди рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:
- рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛
"рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ" .- рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо
"рдкреНрд░реЛрдлреЗрд╢рди рдлреНрд░рдВрдЯрдПрдВрдб рдбреЗрд╡рд▓рдкрд░" .- рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд░реНрд╖ рдкрд╛рдареНрдпрдХреНрд░рдо
"PHP рдбреЗрд╡рд▓рдкрд░ 0 рд╕реЗ PRO рддрдХ" .
рд╕реНрд░реЛрдд: www.habr.com