рдпрд╛ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдордзреНрдпреЗ рдЖрдкрдг Node.js рдЖрдгрд┐ рд╡реЗрдм рд╕реНрдкреАрдЪ API рд╡рд╛рдкрд░реВрди рд╡реНрд╣реЙрдИрд╕ рдХрдВрдЯреНрд░реЛрд▓рд╕рд╣ рдбреНрд░реЛрдирд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдК. рдХреЙрдкреНрдЯрд░ - рдкреЛрдкрдЯ рдПрдЖрд░рдбреНрд░реЛрди 2.0.
рдЖрдореНрд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ: рд╕рд░реНрд╡ Habr рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдирд╛рд╡рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ 10 рд░реВрдмрд▓ рд╕рд╡рд▓рдд.
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ: рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдкреНрд░реЛ" .
рдкрд░рд┐рдЪрдп
рдбреНрд░реЛрди рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдЖрд╣реЗрдд. рдорд▓рд╛ рдорд╛рдЭреНрдпрд╛ рдХреНрд╡рд╛рдбрд╕реЛрдмрдд рдЦреЗрд│рдгреНрдпрд╛рдд, рдлреЛрдЯреЛ рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдХрд╛рдврдгреНрдпрд╛рдд рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдордЬрд╛ рдХрд░рд╛рдпрд▓рд╛ рдЖрд╡рдбрддреЗ. рдкрд░рдВрддреБ рдорд╛рдирд╡рд░рд╣рд┐рдд рд╣рд╡рд╛рдИ рд╡рд╛рд╣рдиреЗ (UAV) рдлрдХреНрдд рдордиреЛрд░рдВрдЬрдирд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддрд╛рдд. рддреЗ рд╕рд┐рдиреЗрдорд╛рдд рдХрд╛рдо рдХрд░рддрд╛рдд, рдЧреНрд▓реЗрд╢рд┐рдпрд░реНрд╕рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддрд╛рдд рдЖрдгрд┐ рд▓рд╖реНрдХрд░реА рдЖрдгрд┐ рдХреГрд╖реА рдХреНрд╖реЗрддреНрд░рд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзреА рд╡рд╛рдкрд░рддрд╛рдд.
рдпрд╛ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдордзреНрдпреЗ рдЖрдкрдг рдбреНрд░реЛрди рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдгрд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╡рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ. рд╡реНрд╣реЙрдЗрд╕ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рдгреЗ. рд╣реЛрдп, рд╣реЗрд▓рд┐рдХреЙрдкреНрдЯрд░ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧрд╛рд▓ рддреЗрдЪ рдХрд░реЗрд▓. рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдпреВрдПрд╡реНрд╣реА рдирд┐рдпрдВрддреНрд░рдгрд╛рдЪрд╛ рдПрдХ рддрдпрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЖрд╣реЗ.
рд▓реЛрдЦрдВрдб
рдЖрдореНрд╣рд╛рд▓рд╛ рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:
- рдкреЛрдкрдЯ рдПрдЖрд░рдбреНрд░реЛрди 2.0;
- рдЗрдерд░рдиреЗрдЯ рдХреЗрдмрд▓;
- рдЪрд╛рдВрдЧрд▓рд╛ рдорд╛рдпрдХреНрд░реЛрдлреЛрди.
Windows/Mac/Ubuntu рд╕рд╣ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рдиреНрд╕рд╡рд░ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛, рдореА Mac рдЖрдгрд┐ Ubuntu 18.04 рд╕рд╣ рдХрд╛рдо рдХреЗрд▓реЗ.
рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░
рдпреЗрдереВрди Node.js рдЪреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛
рддрд╕реЗрдЪ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рд╣реЗрд▓рд┐рдХреЙрдкреНрдЯрд░ рд╕рдордЬреВрди рдШреЗрдгреЗ
рдкреЛрдкрдЯ рдПрдЖрд░рдбреНрд░реЛрди рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдпрд╛ рдХреЙрдкреНрдЯрд░рдордзреНрдпреЗ рдЪрд╛рд░ рдореЛрдЯрд░реНрд╕ рдЖрд╣реЗрдд.
рд╡рд┐рд░реЛрдзреА рдореЛрдЯрд░реНрд╕ рддреНрдпрд╛рдЪ рджрд┐рд╢реЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рдПрдХ рдЬреЛрдбреА рдШрдбреНрдпрд╛рд│рд╛рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдлрд┐рд░рддреЗ, рджреБрд╕рд░реА рдШрдбреНрдпрд╛рд│рд╛рдЪреНрдпрд╛ рдЙрд▓рдЯ рджрд┐рд╢реЗрдиреЗ. рдбреНрд░реЛрди рдкреГрдереНрд╡реАрдЪреНрдпрд╛ рдкреГрд╖реНрдарднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рдЭреБрдХрд╛рд╡ рдХреЛрди рдмрджрд▓реВрди, рдореЛрдЯрд░реНрд╕рдЪреНрдпрд╛ рд░реЛрдЯреЗрд╢рдирдЪрд╛ рд╡реЗрдЧ рдмрджрд▓реВрди рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рдХреБрд╢рд▓ рд╣рд╛рд▓рдЪрд╛рд▓реАрдВрджреНрд╡рд╛рд░реЗ рд╣рд▓рддреЛ.
рдЬрд╕реЗ рдЖрдкрдг рд╡рд░реАрд▓ рдЖрдХреГрддреАрдордзреНрдпреЗ рдкрд╛рд╣реВ рд╢рдХрддреЛ, рд╡рд┐рд╡рд┐рдз рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдмрджрд▓рд▓реНрдпрд╛рдиреЗ рд╣реЗрд▓рд┐рдХреЙрдкреНрдЯрд░рдЪреНрдпрд╛ рд╣рд╛рд▓рдЪрд╛рд▓реАрдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдмрджрд▓ рд╣реЛрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбрд╛рд╡реНрдпрд╛ рдЖрдгрд┐ рдЙрдЬрд╡реНрдпрд╛ рд░реЛрдЯрд░реНрд╕рдЪреНрдпрд╛ рд░реЛрдЯреЗрд╢рдирдЪреА рдЧрддреА рдХрдореА рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рд╡рд╛рдврд╡рд┐рдгреЗ рдПрдХ рд░реЛрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ. рдпрд╛рдореБрд│реЗ рдбреНрд░реЛрдирд▓рд╛ рдкреБрдвреЗ рдХрд┐рдВрд╡рд╛ рдорд╛рдЧреЗ рдЙрдбрддрд╛ рдпреЗрддреЗ.
рдореЛрдЯрд░реНрд╕рдЪрд╛ рд╡реЗрдЧ рдЖрдгрд┐ рджрд┐рд╢рд╛ рдмрджрд▓реВрди, рдЖрдореНрд╣реА рдЭреБрдХрд╛рд╡ рдХреЛрди рд╕реЗрдЯ рдХрд░рддреЛ рдЬреЗ рдХреЙрдкреНрдЯрд░рд▓рд╛ рдЗрддрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢рд╛рдВрдордзреНрдпреЗ рд╣рд▓рд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рдПрд░реЛрдбрд╛рдпрдиреЕрдорд┐рдХреНрд╕рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдкреЛрдкрдЯ рдПрдЖрд░рдбреНрд░реЛрди рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ
рдбреНрд░реЛрди рд╣реЗ рд╡рд╛рдп-рдлрд╛рдп рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдЖрд╣реЗ. рдХреЙрдкреНрдЯрд░рд▓рд╛ рдЖрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкрд╛рдард╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдмрд┐рдВрджреВрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЕрд╕реЗ рдмрд░реЗрдЪ рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗрдд рдЬреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреНрд╡рд╛рдбрдХреЙрдкреНрдЯрд░реНрд╕ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд. рд╣реЗ рд╕рд░реНрд╡ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рддреЗ:
рдбреНрд░реЛрди рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛рдЪ, рдЯрд░реНрдорд┐рдирд▓ рдЙрдШрдбрд╛ рдЖрдгрд┐ рдЯреЗрд▓рдиреЗрдЯ 192.168.1.1 - рд╣рд╛ рдХреЙрдкреНрдЯрд░рдЪрд╛ рдЖрдпрдкреА рдЖрд╣реЗ. рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдЖрдордЪрд╛ рдХреЛрдб рдЦрд╛рд▓реАрд▓ рдореЙрдбреНрдпреВрд▓реНрд╕рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓рд╛ рдЬрд╛рдИрд▓:
- рдЖрд╡рд╛рдЬ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдкреАрдЪ API рд╕рд╣ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕;
- рдЖрджреЗрд╢ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдорд╛рдирдХрд╛рдВрд╢реА рддреБрд▓рдирд╛ рдХрд░рдгреЗ;
- рдбреНрд░реЛрдирд▓рд╛ рдЖрджреЗрд╢ рдкрд╛рдард╡рдгреЗ;
- рдереЗрдЯ рд╡реНрд╣рд┐рдбрд┐рдУ рдкреНрд░рд╕рд╛рд░рдг.
рдЬреЛрдкрд░реНрдпрдВрдд рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЖрд╣реЗ рддреЛрдкрд░реНрдпрдВрдд API рдХрд╛рд░реНрдп рдХрд░рддреЗ. рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЗрдерд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрддреЛ.
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ!
рдХреЛрдб
рдкреНрд░рдердо, рдПрдХ рдирд╡реАрди рдлреЛрд▓реНрдбрд░ рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВ.
рддреНрдпрд╛рдирдВрддрд░ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдбреНрд╕ рд╡рд╛рдкрд░реВрди рдиреЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░реВ.
рдкреНрд░рдердо, рдЖрдореНрд╣реА рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рд▓рдВрдмрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ.
рдПрдирдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рддтАК
рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЖрдЬреНрдЮрд╛рдВрдЪреЗ рд╕рдорд░реНрдерди рдХрд░реВ:
- рдЯреЗрдХрдСрдл;
- рдЙрддрд░рдгреЗ;
- рд╡рд░ - рдбреНрд░реЛрди рдЕрд░реНрдзрд╛ рдореАрдЯрд░ рдЙрдЧрд╡рддреЛ рдЖрдгрд┐ рдШрд┐рд░рдЯреНрдпрд╛ рдШрд╛рд▓рддреЛ;
- рдЦрд╛рд▓реА - рдЕрд░реНрдзрд╛ рдореАрдЯрд░ рдкрдбрддреЛ рдЖрдгрд┐ рдЧреЛрдарддреЛ;
- рдбрд╛рд╡реАрдХрдбреЗ - рдбрд╛рд╡реАрдХрдбреЗ рдЕрд░реНрдзрд╛ рдореАрдЯрд░ рдЬрд╛рддреЛ;
- рдЙрдЬрд╡реАрдХрдбреЗ - рдЕрд░реНрдзрд╛ рдореАрдЯрд░ рдЙрдЬрд╡реАрдХрдбреЗ рдЬрд╛рддреЗ;
- рд░реЛрдЯреЗрд╢рди - рдШрдбреНрдпрд╛рд│рд╛рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ 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>
рдЖрдгрд┐ рд╡реНрд╣реЙрдЗрд╕ рдХрдорд╛рдВрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА JavaScript рдХреЛрдб, рддреНрдпрд╛рдВрдирд╛ рдиреЛрдб рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдард╡рдгреЗ.
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