Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 31.03.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok NapísalOffline : 16.09.2017 1:44

Pojem ovládanie hlasom je dnes jednoznačne spojený s inteligentnou domácnosťou, či riadením procesov, modulov z internetu. Dnes vám prinášam spôsob, ako do vašich projektov priniesť interaktivitu v podobe ovládania hlasom. Existuje mnoho technológii, ktoré umožňujú prevod hlasu na text.
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty
V našom výukovom článku sa zameriame na technológiu Webkit Speech Recognition. Jedná sa o systém, ktorý umožňuje jednoducho a efektívne prevádzať reč na text. Jedným z parametrov technológie je výber jazyka. Plná podpora slovenčiny, češtiny je samozrejmosťou. Webaplikácia, postavená mnou, v ktorej technológia beží je postavená tak, že používateľ má dve varianty vstupu:
    Požiadavka zadaná textom do input poľa stránky.
    Požiadavka zadaná hlasom po kliknutí na obrázok mikrofónu na stránke.

Výsledok oboch variant je identický. Výsledok sa zapíše do .txt súboru, s ktorým vie následne každý mikroprocesor pracovať. Strana mikroprocesora je postavená jednoducho, čo zaručí porozumenie kódu každého programátora. Mikroprocesor si prečíta reťazec v .txt súbore a uloží ho do príslušnej premennej. Premenná sa dá následne porovnať s reťazcami v kóde, čo umožní následný výber akcie.

Je vhodné použiť viacero porovnateľných reťazcov pre jednu akciu, nakoľko preklad je dosť citlivý na vyslovenie jednotlivých hlások. Niekedy Webkit preloží led ako let, alebo zapíše veľkými písmenami LED. Občas sa stane, že medzi led a číslom ledky nie je medzera a reťazec ostane v tvare Zapni led2. Ak porovnávame identickosť reťazca s reťazcami v kóde, tak sa môže stať, že získame výstup: Zapni LED 1, ale v kóde budeme porovnávať reťazec s Zapni led 1. Požiadavka sa nevykoná, nakoľko reťazce nie sú identické, i keď sa v nich vyskytujú tie isté znaky. Pri Webkite je dôležitý výber jazyka. Pre výber slovenského jazyka nastavte v súbore index.php recognition.lang = "sk-SK"; v prípade českého jazyka nastavte recognition.lang = "cs-CZ";, v prípade angličtiny recognition.lang = "en-US";.
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty
Dobrou vecou je i vyhnúť sa diakritike, nakoľko na strane servera i klienta môže dôjsť k zmiešanému/rozdielnemu kódovaniu. Po uložení slova Čau si ho môže mikroprocesor stiahnuť ako ÄŚau, čo tiež veľmi nepomôže porovnaniu reťazcov. Toto riešenie je dobré napríklad pre spínanie svetiel, kedy si mikroprocesor raz prečíta požiadavku, vykoná a aj keď si ju stiahne opakovane, tak sa nič nedeje, nakoľko je na výstupe taká istá hodnota.

Čo ale použiť v prípade ovládania intenzity svetla, ak ju chceme navýšiť o 20% jeden krát?

Ak si mikroprocesor stiahne takýto reťazec opakovane, bude neustále navyšovať intenzitu do maximálneho možného štádia, ktoré je už limitované výstupom, alebo dôjde k zničeniu daného osvetlenia, diódy. Dobrou praxou je uložiť si predchádzajúci reťazec a porovnať s aktuálnym stiahnutým.

Tento postup umožní nevykonať akciu, pokým prijatý reťazec nebude iný ako terajší, prípadne je ho možné doplniť o podmienku s dodaním 1-krát, 2-krát... Projekt je veľmi jednoduché použiť i do projektov inteligentnej domácnosti, ovládania domu, monitoringu. Prostredníctvom hlasu môžeme ovládať aj vstupy, kedy po hlasovej požiadavke mikroprocesor získa zo vstupu údaj o teplote a vie ho zaslať/vypísať tam, kde používateľ potrebuje. V tomto systéme je veľmi jednoduché nakódovať automatický/manuálny režim.

Čo budem potrebovať na spustenie ovládania hlasom?

    Webserver (lokálny/verejný) s HTTPS protokolom
    PHP súbor
    .txt súbor
    Mikroprocesor (Arduino, NodeMCU, ESP32, Raspberry, Orange Pi.. a iné)
    Pripojenie k internetu
    Prehliadač Chrome

Testovanie prebiehalo s notebookom a smartfónom s prehliadačom Chrome. Prvý krát je potrebné mikrofón potvrdiť. Pri opakovanej návšteve stránky už mikrofón funguje bezproblémovo a nie je nutné ho potvrdiť. Mikrofón ale funguje výlučne na HTTPS stránke, nakoľko na nešifrovanej stránke ho blokuje samotný prehliadač.
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty
Na strane mikroprocesora som použil dosku NodeMCU v3 Lolin, kde som nenarazil na žiaden problém z pohľadu spracovania a vyhodnotenia stiahnutého obsahu súboru. Riešenie som testoval až pre 8 výstupov. V prípade použitia pripojenia na HTTPS stránku je nutné do kódu vložiť aj odtlačok HTTPS certifikátu stránky - (fingerprint) v kóde. Riešenie je kompatibilné aj s NodeMCU v2. Stiahnutý reťazec je v kóde pod premennou line. V kóde sa nachádza aj ukážka ovládania 4 led diód za pomoci stiahnutého reťazca, ktorý je možné pozmeniť hlasom. Fingerprint získate po návšteve vašej HTTPS stránky kliknutím pravým tlačidlom myši --> Preskúmať --> Security --> View certificate --> záložka Podrobnosti --> Odtlačok verejného kľúča. SHA1
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty
httpspripojenie.ino – súbor pre NodeMCU
Kód:
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
const int led1 = 16;
const int led2 = 5;
const int led3 = 4;
const int led4 = 0;
const char* ssid = "wifimeno";
const char* password = "heslo";
const char* host = "vasastranka.sk"; //bez https a www
const int httpsPort = 443;
const char* fingerprint = "13 9f 87 1d b1 85 be e6 bd 73 c1 8d 04 63 58 99 f0 32 43 92";

void setup() {
  Serial.begin(115200);
  Serial.println();
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
     pinMode(led4, OUTPUT);
  Serial.print("pripajam na ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi pripojene");
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP());

}

void loop() {

   WiFiClientSecure client;
  Serial.print("pripajam sa na ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("pripojenie neuspesne");
    return;
  }

  if (client.verify(fingerprint, host)) {
    Serial.println("certifikat zhodny");
  } else {
    Serial.println("certifikat nezhodny");
  }

String url = "/ preklady.txt";
  Serial.print("poziadavka na adresu: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: NodeMCU\r\n" +
               "Connection: close\r\n\r\n");

  Serial.println("poziadavka vykonana");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
   
    if (line == "\r") {
      Serial.println("hlavicka obdrzana");
      break;
    }
  }
  String line = client.readStringUntil('\n');
 
  Serial.println("Odpoved bola:");
  Serial.println("==========");
  Serial.println(line);

  if(line=="Zapni LED 1" || line =="Zapni led 1" || line =="Zapni let 1" || line =="Zapni LED jeden" || line =="Zapni LED1" || line =="Zapni led1"){
     digitalWrite(led1, HIGH);
    }
     if(line=="Vypni LED 1" || line =="Vypni led 1" || line =="Vypni let 1" || line =="Vypni LED jeden" || line =="Vypni LED1" || line =="Vypni led1"){
     digitalWrite(led1, LOW);
    }
      if(line=="Zapni LED 2" || line =="Zapni led 2" || line =="Zapni let 2" || line =="Zapni LED dva" || line =="Zapni LED2" || line =="Zapni led2"){
     digitalWrite(led2, HIGH);
    }
     if(line=="Vypni LED 2" || line =="Vypni led 2" || line =="Vypni let 2" || line =="Vypni LED dva" || line =="Vypni LED2" || line =="Vypni led2"){
     digitalWrite(led2, LOW);
    }
      if(line=="Zapni LED 3" || line =="Zapni led 3" || line =="Zapni let 3" || line =="Zapni LED tri" || line =="Zapni LED3" || line =="Zapni led3"){
     digitalWrite(led3, HIGH);
    }
     if(line=="Vypni LED 3" || line =="Vypni led 3" || line =="Vypni let 3" || line =="Vypni LED tri" || line =="Vypni LED3" || line =="Vypni led3"){
     digitalWrite(led3, LOW);
    }
      if(line=="Zapni LED 4" || line =="Zapni led 4" || line =="Zapni let 4" || line =="Zapni LED styri" || line =="Zapni LED4" || line =="Zapni led4"){
     digitalWrite(led4, HIGH);
    }
     if(line=="Vypni LED 4" || line =="Vypni led 4" || line =="Vypni let 4" || line =="Vypni LED styri" || line =="Vypni LED4" || line=="Vypni led4"){
     digitalWrite(led4, LOW);
    }
    if(line=="Vypni"){
     
      digitalWrite(led1, LOW);
       digitalWrite(led2, LOW);
        digitalWrite(led3, LOW);
        digitalWrite(led4, LOW);
    }
     if(line=="Zapni"){
     
      digitalWrite(led1, HIGH);
       digitalWrite(led2, HIGH);
        digitalWrite(led3, HIGH);
        digitalWrite(led4, HIGH);
    }
 


   
  Serial.println("==========");
  Serial.println("uzatvaram pripojenie");
}

PHP časť – web-serverová časť pozostáva z dvoch php súborov, css súboru a jedného obrázku.
index.php - -> zadávanie klávesnicou/hlasom - -> hlas sa aktivuje kliknutím na mikrofón na stránke, php kód v súbore spracuje požiadavku zadanú klávesnicou
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty
ajax.php --> spracuje výsledok reči na text a vloží ho do .txt súboru rovnako ako php kód na index.php
Decibel.png – obrázok mikrofónu - Non copyright
stylesheet.css – CSS štýly pre index.php súbor – grafika
preklady.txt --> textový súbor, ktorý sa neustále prepisuje php súbormi, sťahuje ho mikroprocesor
Knižnice k .ino súboru pre NodeMCU: https://ulozto.sk/!Yt4uR60DLSXO/nodemcu-rar
PHP súbory: https://ulozto.sk/!bnDe5YteJP4Y/ovladanie-hlasom-svetelektro-rar
Heslo: pcforum.sk
Video z testu s jednou LED-kou na ukážku funkčnosti:
https://www.youtube.com/watch?v=FwcPEALti4Y
Odporúčania: Skryte si PHP časť za heslo, stránku neindexujte, je to dobré pre zaistenie integrity ovládania práve vami. Nezabudnite na HTTPS protokol a prehliadač Chrome! Ak si po požiadavke hlasom prezeráte .txt súbor a nie je v ňom zmena, stlačte Ctrl+F5! Riešenie je možné použiť pre dosky Arduino, Raspberry, Orange Pi a akékoľvek iné, ktoré je možné napojiť do internetu akoukoľvek technológiou, Ethernet, Wifi, GSM, GPRS, 3G, LTE. Akonáhle certifikát expiruje, alebo je obnovený s novým --> iným odtlačkom, NodeMCU sa nepripojí na stránku! Sledujte preto dátum expirácie vášho HTTPS certifikátu.
V PHP súboroch sa využívajú užitočné funkcie pre uľahčenie práce s reťazcami:
htmlspecialchars --> prevod špeciálnych znakov na bezpečné, chráni pred XSS – spusteniu JS
trim --> Medzery orezané v reťazci napr „Ahoj ako? “ bude „Ahoj ako?“
Prajem veľa šťastia vo vašich interaktívnych projektoch!
Podporiť ma môžte a niečo zaujímavé nájsť na: https://arduino.php5.sk
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty


Offline

Užívateľ
Užívateľ
Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok NapísalOffline : 16.09.2017 9:16

Reagujem na "Vydal som aj článoček.. Môžeš mrk a skúsiť" z témy ohľadom čítania .txt súboru. Otestovať to teraz bohužiaľ nemám kde, možno až sa dostanem domov tak na CC3200.
Článok, resp. nápad určite zaujímaví a pre domáce použitie fajn, moc sa mi tam nepáči jedna vec.
Spracovanie textu - príkazu by podľa mňa nemalo byť na strane MCU ale na strane php. Čo tým chcem povedať, dajme tomu príkaz "Zapni LED 1" (neviem či tam ofic. má/nemá byť medzera medzi LED a číslom). Príde mi trochu crazy mať v MCU obrovský if/switch, kde budeš kontrolovať všetky možné kombinácie, tam už by mala byť jasná logika (jasný príkaz), tzn. napr. LED1 0; LED1 1 (čokoľvek, vymysli si vlastný vzor, ktorý budeš používať). Do tejto formy by to už malo napísať php, tzn. prečítaš ZapniLED1 (Zapni LED 1, Zapni LeD1, čokoľvek), tak nech s týmto "bojuje" php a nie MCU, na výstupe - v *.txt aby bol už jasný príkaz pre MCU.
Ten systém príkazov možno ešte jednoduchší, bavme sa napr. o LED, kde môže byť PWM 0-100. Takže si akoby definuješ nejakú prevodnú tabuľku a príkaz v *.txt môže vyzerať
(čo, pozícia, hodnota)
L 0 0
Tzn. LED 0 0% (LED zhasne)
L 0 100
Tzn. LED 0 100% (LED bude svietiť)
Môžeš mať nejaký bzučák, tak bude napr.
B 0 100
Tzn. BUZZER 0 100 (100-ka môže udávať frekvenciu).







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Odpovedať na tému [ Príspevkov: 2 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Ovládanie hlasom v slovenčine pre mikrokontroléry a mikropočítače

v Články

0

968

25.07.2018 19:33

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ESP8266 - Ovládanie hlasom cez Amazon Echo Dot

v Články

3

1234

30.05.2020 23:37

stiv Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Wokwi - simulátor pre Arduino projekty

v Články

0

1240

17.04.2022 20:14

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ponuka prace pre programatorov hier. ( nextgen projekty )

v Ponuka práce

0

3384

30.11.2006 15:00

maxman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Diaľkové ovládanie vhodné pre XBMC

v Ostatné

8

1515

31.12.2011 18:59

GIGN1987 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hlasom ovládané auto - ESP8266 (NodeMCU)

v Články

2

990

10.01.2020 18:25

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Moje projekty

v Webdesign

12

1626

19.08.2007 16:22

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. podobne webove projekty

v Obchody, reklamácie a právo

4

1074

17.03.2011 17:16

jablko05 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Java : projekty ku knihe

v Assembler, C, C++, Pascal, Java

2

1008

24.10.2009 11:31

mathias Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Projekty z NetBeans importovať do Eclipse

v Ostatné

2

1023

22.02.2010 20:33

petanorech Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Intel představuje další projekty do budoucna

v Novinky

1

1038

28.06.2009 11:18

allegro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. NB - vysoká škola - 3D projekty etc. +-500€

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Notebooky a netbooky

32

1787

16.12.2018 15:26

Juryoku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hľadám kodera/programatora na spoločné zaujímavé web projekty

v Ponuka práce

0

921

07.05.2015 12:42

matusy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. V príčinu projekty nenajdem ale pomocou programu áno

v Ostatné programy

1

807

17.01.2015 13:29

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1123

10.05.2016 14:59

evolvsys Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Dialkové ovládanie

v Elektronika

4

5033

19.12.2010 10:09

erikoo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra