Sari la conținut
ELFORUM - Forumul electronistilor

Program pic16F recunoastere vocala - ajutor


Postări Recomandate

https://www.youtube.com/watch?v=2xHpuzvGrxQ

 

Recunoastere vocala cu un "banal" PIC16F...

 

Daca cei din videoclip mint, mint si eu....(vreau sa spun ca acel link este si sursa mea de la care am plecat)

 

Acum, ei rostesc undeva cuvintele 1,2,3, in engleza si apoi cu ajutorul cuvintelor rostite aprint/sting becurile 1,2,3

 

Va rog un algoritm de inspiratie ca sa nu o iau de la 0.  Un algoritm pentru pic 16f.

 

Stiu, recunosterea cu pic30F, dar acolo e alta putere de calcul.

 

Doar daca va intereseaza scopul, vreau ca atunci cand a bag in pat, sa rostesc sa se stinga lumina si chiar sa se stinga.

Link spre comentariu
  • Răspunsuri 15
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Doar pe un PIC poate fi destul de greu. In video se vad si conectori seriali acuma nu stiu daca e folosit in alt scop sau chiar e legat de PC , PIC ul doar transmite datele de la mic. PC ul processeaza si trimite datele inapoi la PIC.

 

In principiu algoritmii de gen functioneaza pe comparare si calcul de probabilitate. Adica este stocata data de la mic.  dupa care cand se rosteste ceva se iau din nou datele de la mic. se compara cu cel deja definit , si se calculeaza probabilitatea de comparare ( in ce procentaj este aceeasi chestie , si se definesta sa spunem ca un procentaj mai mare de 75% se ia ca si cand cuvantul o fi acelasi.)

 

 

Mai simplu are fi un clap-switch , unde se masoara nivelul zgomotului detectat de mic. si durata acestuia , de acolo se poate detecta daca a fost un zgomot oarecare sau chiar o bataie din palme.

Editat de bandi12
Link spre comentariu

<Poate autorul este dispus sa impartaseasca metoda>

Eu i-am scris, videoclipul e de la inceputul lui 2013, asa ca sanse mari sa raspunde nu ma astept.

 

<cand se rosteste ceva se iau din nou datele de la mic. se compara cu cel deja definit >

Pai cum asta asta e intrebarea ?

Pentru ca tu poti pronunta mai lent sau mai rapid.  Frame-urile nu se vor suprapune una peste alta ca sa le scazi.

La redare MP3 ai "96 to 320 kilobytes per second (Kbps)"

La PIC16F sa zicem ca  ai doar 256B RAM

-----------------------------------------------------------------------------------------------

Despe recunoasterea vocala (ce am citit):

Poate fi:

- speaker independent

Asa cum este biblioteca definita pentru PIC30F. Reteaua neurala fost antrenata pentru o serie de cuvinte in engleza pentru mai multe voci, barbati/ femei, din diferite popoare, diferite moduri de a rosti.

Dezavantaj ai doar o lista de cuvinte pe care le recunoaste.

- speaker dependent

Inregistrezi un cuvant, recunoaste doar pronuntia ta.

 

Poate fi:

- pentru cuvinte luate separat
Cand incepi sa vorbesti retine perimele 1-2 secunde. Pauza, nivel sonor scazut marcheaza inceputul cuvantuli.

- pentru cuvinte in fraza

In vorbirea curenta, analizat spectal, cuvintele par legate intre ele. E mul tmai dificila analiza.

 

-----------------------------------------------------

 

http://ww1.microchip.com/downloads/en/DeviceDoc/51465b.pdf

'The Speech Recognition algorithm is written in assembly
language to optimize performance and minimize RAM usage.'

 

"The data is processed a frame at a time, and when a word ending is
detected, the received word is identified using Hidden Markov
Model processing"

 

La inceput pe Wiki despre model:

http://en.wikipedia.org/wiki/Hidden_Markov_model

 

Mai este:

http://www.geocities.ws/xxxtoytech/Stewart-91.pdf

Programul se descarca de aici: http://www.dtweed.com/circuitcellar/caj00091.htm

 

Dar acum ce sa fac? Sa traduc un program in ASM pentru un procesor in ASM pentru alt procesor ? E munca inutila. 

Link spre comentariu
  • 3 săptămâni mai târziu...

http://sijcmi.weebly.com/uploads/1/4/2/5/14259986/speech_recognition_of_industrial_robot.pdf

 

recunosterea se face cu ajutorul PIC16f877? sau are integratul asta: HM2007 si restul e vorbarie?

 

incepe asa: "The first speech recognizer appeared in 1952". Ce e asta e poveste ?

Sa zicem ca ai 128 RAM disponibil in micro controller.

Conversia A/D este de obicei la 4KS/s. Ar fi nevoie de 4K RAN/s

 

Sa alegi valoare maxima la fiecare grup de 32 samples achizitionate. Abia ai acoperi 1s cu RAM-ul disponibil.

 

Apoi sa folosesti un ANN antrenat doar pentru cateva cuvinte ?

Link spre comentariu

HM2007 e destul de scump, e undeva la 50RON. In plus nici macrar nu il gasesc la magazinele cunoscute. Am vazut pe youtube teste, nu e mare lucru, mai incurca cuvintele la fel ca recunosterea cu PIC16F... si ca aia cu PIC30F. La fel de slabe.

 

Macar la PIC30F e independenta de vorbitor. Dar e doar in engleza si acolo doar pentru o serie de cuvinte predefinite.

 

Pana una alta am pe masa si PIC16F si PIC30F si PIC12F.

Am fi mai simplu sa caut pe NET un program sa le testez.

Link spre comentariu

Spre deosebire de uChip, mikroe nu e producator de cipuri, e producator de placi/software.

Daca uChip e interesat sa-ti dea unelte ca sa cumperi dupa aia circuitele lor, mikro e n-are nici un interes sa "ti-l construiesti singur".

Oricum, s-ar putea sa iei plasa, ca pa speak-up (de)codarea audio o face vs1053, care livreaza microcontrollerului semnalul audio "digitalizat". Algoritmul pe care il cauti s-ar putea sa fie o "simpla  cautare" intr-o lista (probabil ca e mai complicat decat atat).

 

LE Vezi ca in manualul de utilizare au ceva povesti si despre algoritm.

Editat de Liviu M
Link spre comentariu

Multumesc pentru raspunsuri.

 

Din pacate pe cel de la Microchip il stiu cu pic30F. Este doar pentru cuvinte in engleza. Si alea cateva.

 

vs1053 e codec audio adica un simplu A/D care mai are si o procesare analogica pe intrare - adica specializat pentru sunet.

 

 

 

< Algoritmul pe care il cauti s-ar putea sa fie o "simpla  cautare" intr-o lista (probabil ca e mai complicat decat atat).>

Ar fi prea tare o simpla cautare in lista.....si prea simplu.

 

Sa dau un exemplu - sa zicem ca ai la intrare sinus 1KHz si nu un cuvant.

In microcontroller ai dupa A/D:

Inregistrare: 0,1,3,4,5,4,3,1,0,-1,-3,-4,-5,-4,-3 (sinus scris digital)

Trebuie sa recunosca: 4,5,4,3,1,0,-1,-3,-4,-5,-4,-3,-1,0 (acelasi sinus scris digital) Testezi daca e acelasi lucru ? cum ?

Si asta e simplu ca volumul s-a pastrat constant, dar daca nu ar fi constant si am avea:

0,3,9,12,15,12,.... (x3 primul)

sau

12,15,12,.....(x3 al doilea)

 

Si daca faci FFT obtii un spectru care la fiecare rostire a cuvantului nu va fi acelasi. Dar ai mai mari sanse sa potrivesti asa.

Recunosterea unui pattern nu-i a treba simpla.

----------------------------------------------------------------------------------------

Ar fi util cam orice program in C de recunostere vocala, chiar si pentru PC, dar nu prea sunt.

Toti spus sec - vezi ca se face automat, vezi ca se face instand x,y,z, sau Windows face automat asta,......

Ca sa nu mai pun ca nu pronunti mereu cuvantul cu acceasi viteza, adica asta:

Inregistrare: 0,1,3,4,5,4,3,1,0,-1,-3,-4,-5,-4,-3 (sinus scris digital)

comparat cu: 0,3,5,3,0,-3,-5 trebuie sa de ca e la fel.

 

Eu cred ca si spectru de frecventa poate diferi, adica ca la opera: aia poate canta acelasi cuvant pe tonalitate mai inalta sau mai joasa. Alte note acelasi cuvant.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări