ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 126
Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 100
Abonament PDF

Speech-to-text pentru Web

Ionuț Iacob
Frontend Software Developer @ Kronsoft Development



PROGRAMARE


De obicei, există tentația de "reinventa roata" când se lucrează la un proiect. Poate e din cauza dorinței de a implementa o funcționalitate mai interesantă sau din cauza unei politici mai restrictive legate de utilizarea dependințelor externe care descurajează utilizarea acestora.

Când ar trebui ales un serviciu/ bibliotecă în locul unei implementări noi? Nu există un răspuns simplu și depinde de context, disponibilitatea acestor soluții externe, licențe, timp de dezvoltare și de altele.

Însă când discuția este despre soluții disponibile pentru problema transcrierii vocii în text (Speech-to-text), cred că este mult mai ușor de decis. Principalele motive sunt:

Context

Analiza soluțiilor Speech-to-text disponibile este realizată doar pentru soluțiile disponibile pentru aplicații Web (soluțiile desktop cum ar fi Dragon Professional nu sunt analizate) și pentru soluții care oferă posibilitatea transcrierii mai multor limbi (Rev nu este analizat deoarece oferă doar limba engleză).

Aplicațiile web sunt centrul acestei analize deoarece acest context de utilizare apare din ce în ce mai frecvent din cauza creșterii complexității soluțiilor web. Aceste aplicații pot simula sau înlocui acum funcționalități specifice (Speech-to-text în cazul curent) unui desktop și pot oferi mai multă valoare de business unui produs.

Deși partea de client web a avansat mult în ultimii ani, procesarea problemelor complexe (cum ar fi Speech-to-text) este realizată de cele mai multe ori de server.

Soluții

Soluții Cloud (SaaS)

Tabelul de mai jos reprezintă unele dintre cele mai populare soluții cloud care oferă opțiuni de transcriere a vocii în text. Tabelul conține și câteva metrici relevante pentru fiecare soluție.

Din comparația de mai sus, au fost alese primele două opțiuni (pe baza raportului preț/ calitate) pentru o analiză legată de integrarea acestor servicii.

Detalii legate de integrarea Google Speech-to-text API

API-ul de la Google oferă opțiuni de autentificare limitate. De obicei, serviciile Google Cloud oferă posibilitatea autentificării prin trei modalități, însă pentru serviciul de Speech-to-text, doar două modalități sunt disponibile:

Pentru cele mai multe cazuri, autentificarea individuală de către client nu este o soluție.

Acest lucru înseamnă că soluția de la Google necesită un wrapper în partea de server care să funcționeze ca un intermediar între aplicația web și serviciul de transcriere.

Alte detalii:

Detalii legate de integrarea Microsoft Azure Speech-to-text API

Soluția oferită de Microsoft este similară în privința funcționalităților aduse cu cea de la Google. Diferența majoră este că oferă o acuratețe puțin mai scăzută la un preț mai bun.

Dispune de opțiuni multiple de autentificare, printre care și opțiunea care lipsește de la Google și anume:

Alte detalii:

Soluții On-Premise

Există și soluții on-premise disponibile, soluții care au avantaje/ dezavantaje:

Cele două variante de soluții on-premise alese sunt doar o parte din opțiunile disponibile, dar sunt cele mai populare.

Se observă că acuratețea acestor soluții gratuite scade din cauza lipsei de 'antrenament' a algoritmilor din spate și necesită timp suplimentar pentru îmbunătățirea acestora.

Soluții în Browser web

Aceste soluții aduc o implementare nativă inclusă în anumite browsere web fiind în concordanță cu API-ul nativ Web Speech API.

Cu toate că această funcționalitate există în specificațiile oficiale, implementarea propriu-zisă se află în puține browsere așa cum apare în lista de compatibilitate.

În practică însă, singura soluție funcțională la momentul redactării acestui articol este cea din Chrome.

Soluția oferită de Chrome (și Chrome for Android) are câteva particularități specifice:

Un exemplu de aplicație web care folosește cu succes acest tip de soluție este Dictation.io.

Exemplu de implementare

Pentru acest capitol este folosit ca exemplu următorul caz: un formular simplu, unde utilizatorul poate introduce informațiile atât folosind tastatura cât și dictând conținutul în engleză.

În exemplul de față am ales implementarea nativă din browserul Chrome datorită mai multor motive:

Aplicația descrisă mai sus are următorul format:

Aplicația poate fi accesată și testată la adresa: https://ionut-iacob-kronsoft.github.io/stt-ng10-example/.

Aplicație Web (Angular 10)

Aplicația descrisă mai sus a fost implementată într-un proiect nou de Angular 10. Componenta nouă care facilitează accesul la funcționalitatea de Speech-to-text este directiva speechToText.

Această directivă are rolul de a oferi o implementare generică și ușor de reutilizat pentru funcționalitatea de transcriere.

Aceasta funcționează în felul următor:

Codul aplicației poate fi accesat la adresa: https://github.com/ionut-iacob-kronsoft/stt-ng10-example

Concluzie

Speech-to-text este o funcționalitate care a fost perfecționată mult în ultimii ani și sunt o mulțime de servicii disponibile care se pliază pentru orice context.

Suportul pentru aplicațiile Web este în continuă dezvoltare, iar variantele native (e.g. Google Chrome) oferă o modalitate foarte ușoară și gratuită de a integra Speech-to-text în orice aplicație.

API-ul nativ din browsere e o modalitate bună de a testa, valida, idea și a decide dacă o implementare mai complexă este necesară.

Bibliografie

  1. https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API

  2. https://medium.com/descript/which-automatic-transcription-service-is-the-most-accurate-2018-2e859b23ed19

  3. https://www.techradar.com/news/best-speech-to-text-app

  4. https://alphacephei.com/vosk/accuracy

  5. https://blog.timbunce.org/2018/05/15/a-comparison-of-automatic-speech-recognition-asr-systems/

  6. https://www.twilio.com/blog/speech-recognition-browser-web-speech-api

  7. https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API

  8. https://undraw.co/

VIDEO: NUMĂRULUI 126

Sponsori

  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • Connatix
  • BoatyardX
  • AboutYou
  • Telenav
  • .msg systems
  • Colors in projects