Audio FingerPrint em Python

Audio  Fingerprint é o ato de reconhecer um determinado audio dentro de um amplo número de sons…

Este conceito é utilizado pelo Shazam, que tem o poder de lhe retornar o nome de uma música com uma pequena amostra a partir de qualquer pedaço de uma canção.

Ao ler um post escrito por Roy Van Rijn  decidi tentar escrever algo semelhante seguindo todos os passos descrito em seu blog.

Aproveitei um pedaço de um projeto antigo  esteganografia-spectrograma-em-arquivos-de-audio reescrevi minha função para visualizar spectrogramas para melhor se adaptar ao novo código, para testar o novo spectrograma peguei dois arquivos fract.mp3 e mandel.mp3 eles podem ser encontrados neste site.

Primeiro converti os dois arquivos em .WAV os deixando em Mono, o mpg123 me ajudou neste trabalho de coversão!

E aqui esta os resultados do meu Spectrograma:

Para o Mandel.wav


E agora o fract.wav

Legal minha função para mostrar o Spectograma funciona perfeitamente!

Vamos agora para o próximo passo descrito por Roy Van Rijn, encontrar as maiores frequencias dentro de cada tempo de uma música.

Com esta etapa concluida eu consigo montar uma “Constelation Map” contendo os maiores pontos (frequencias) dentro de um spectrograma, para demonstrar eu plotei o resultado da música inteira “Rihanna feat David Guetta – Whos That Chick(Radio Edit)”

Resultado mostrando a “Constelation Map” para a música Rihanna feat David Guetta – Whos That Chick(Radio Edit):

Todos os pontos em vermelho são onde encontrei as maiores frequencias correspondentes a cada tempo dentro da canção!

O proximo passo é indexar estes valores dentro de um arquivo .txt por exemplo!

Em meu arquivo .txt tenho:

[142, 393, 578, 1802]
[71, 378, 400, 1725]
[52, 204, 406, 753]
[51, 205, 425, 773]
[137, 392, 697, 833]
[140, 201, 660, 773]
[53, 300, 666, 776]
[51, 342, 497, 701]
[50, 200, 414, 731]
[57, 367, 697, 833]
[85, 223, 690, 783]
[55, 234, 697, 845]
[50, 204, 403, 773]
[121, 238, 571, 714]
[52, 370, 544, 721]
[132, 325, 463, 794]
[164, 226, 515, 712]

.

.

.

Indexei cerca de 1000 canções eu precisei converter todas para .wav sempre em mono!

Lol após isso é importante colocar todos estes valores dentro de uma grande hash table para uma melhor performace.

E vamos ao grande teste pegar um pedaço de qualquer canção indexada e ver se conseguimos o retorno correto !

Vamos tentar 18 segundos de áudio bem sujo e ver o resultado!

Primeiro tentei este pedaço Chick_noise2.wav

Ual funciona !

O som está bem degradado e sujo, decidi pegar um som gravado do microfone de meu smart phone quando estava dentro de um shopping escutando um som ambiente, ajustei para obter os acertos comparando menos frequencias pois o áudio estava deplorável a gravação é esta Clipe som 03.wav

Resultado:

Funcionou !

Vamos tentar outra música também gravada do microphone de meu smart phone dentro do shopping Clipe som 06.wav

Resultado:

Funcionou novamente!

Estas demonstrações são de arquivos com áudio bem degradados e sujos, podemos perceber que em todas elas temos um grande nível de ruido e mesmo assim funciona!

Um agradecimento especial ao Roy que postou em seu blog todos os passos para este feito!

Eng Eder de Souza

  1. Ron
    junho 4, 2011 às 7:41 am

    Hey great post read it through Google Translate, is it possible to receive the source code please? 🙂

  2. tal bar
    junho 7, 2011 às 7:43 pm

    Amazing!!!
    Could you please send me the code ..
    10x dude .

    tal2001@walla.co.il

  3. junho 12, 2011 às 11:13 pm

    Please share a copy of the source code with me .. mahamovie@gmail.com

    Thanks!

  4. Therry
    junho 15, 2011 às 5:14 am

    Great Job Dude ! Finally you create the music DNA !
    Can U share the source code with me too ?
    Thx 😉

  5. junho 15, 2011 às 8:51 am

    Fala Eder, blza? Te conheço da Lista Asterisk Brasil… há algum tempo vc me ajudou a criar AGI em Java, etc…

    Estava lendo, parece que o autor do Roy Van Rjin teve alguns impecilhos com a fabricante do Shazam por postar o código no blog…

    Mas aqui é o Brasil e aqui não tem lei nem pra bandido, então tem como vc postar o seu código pra gnt?

    Estou tentando implementar o código em Java do Roy e têm dado certo! 🙂

  6. mars
    junho 15, 2011 às 11:58 am

    hi

    can you help me?

    Im tryng make one audio accust-Id for my thesy

    Tks

  7. junho 24, 2011 às 6:46 am

    That’s awesome job! May I get a copy of the source code? I want to make a duplicate audio files detector. I think this will work fine.
    Thank you very very much!
    windviki@gmail.com

  8. zuma
    julho 30, 2011 às 6:48 pm

    Hello Ederwander,

    amazing work I’m trying to do the same, you could share with me your source code.

  9. Rodrigo M. Palheta
    agosto 26, 2011 às 12:51 pm

    Sensacional!!! PARABÉNS!!!

  10. Jose
    outubro 14, 2011 às 9:37 pm

    Alo Eder! Belos artigos!
    Pode enviar também pra mim seu código Python?
    Muito obrigado!

  11. dezembro 12, 2011 às 4:55 pm

    Awesome. Would you be willing to share the source code? My email is adolfox@gmail.com.

    Thanks in advance 🙂

  12. andres
    abril 3, 2012 às 2:09 pm

    Excelente trabalho! Eu poderia passar o código por favor?

  13. Sneha
    abril 16, 2012 às 5:55 am

    Please mail me code as i am doinf project for sound comaprison i am not able to comapre the two sounds

  14. hana
    outubro 22, 2012 às 2:49 am

    awesome job!…. i’ve been looking on how to do this in python. can you send me the source codes?
    hanani.yusof@gmail.com

    thanks 🙂

  15. nimol
    dezembro 1, 2012 às 6:58 am

    All above is what i need. could u please send me that codes ? nimol.elixir@gmail.com
    thz, in advance 🙂

  16. Diogo
    abril 5, 2013 às 2:40 pm

    Ola Eder, muito bom seu post! Poderia me enviar uma cópia do código para que eu possa estudar? Segue meu email: diogovilab@gmail.com
    Grato!

  17. abril 7, 2013 às 8:43 am

    Hi! I’m doing a course work on comparation of audio fingerprint algorithms, can you, please, send me a copy of your code to mr.alinaki@gmail.com, please? Thank you!

  18. Alberto
    abril 25, 2013 às 8:06 am

    Hi!! Really nice job!! Could you please share the source code? My email is rolimat@gmail.com I will so glad if you send me the code… Im working on the analysis of an accesibility open source project about sound recognisement for deaf people and this example could help us a lot.

    Thanks!!

  19. Mario
    maio 4, 2013 às 7:58 am

    Hi!, I’m currently developing a similar system for an student project. I’ve seen the work of the Finish guy (if i’m not wrong), but I don’t have clear the matching process. Because I’ve got a full song and the same cropped and by looking to the fingerprints, It doesn’t match at all. Can you share the code, please? mariottf@hotmail.com

    Thanks in advance!

  20. Paul
    junho 9, 2013 às 10:49 pm

    Great Job, can you can share the source ?

  21. Hegang
    novembro 11, 2013 às 9:52 pm

    Awesome wrok. I am working a similar project like this . Could you share the source code with me? dongbeihegang[at]163.com

  22. Johan
    dezembro 4, 2013 às 6:47 pm

    I am working on similar project may I have the source code please!!!
    johan.kalamas@hotmail.com

  23. outubro 31, 2014 às 12:08 am

    I am working on similar project may I have the source code please!!!
    ffzhihua@126.com

  24. Anand Patel
    novembro 20, 2014 às 8:32 pm

    I was wondering if you send me source code for this. Thanks a lot

  25. jose carlos
    dezembro 17, 2014 às 12:20 pm

    Parabéns cara.
    Poderia compartilhar o código?
    Meu email: zekarlos@gmail.com

    Abs.

  26. Hello Thank you for this great effort, please share the code with me andrymirija@yahoo.fr
    janeiro 19, 2015 às 7:48 am

    Hello Thank you for this great effort, please share the code with me andrymirija@yahoo.fr

  27. março 14, 2015 às 3:45 pm

    Hi Eder! Could you please share this code with me? I need to develop a similar project. Thanks a lot! ( humoib aaat gmail.com )

    Obrigado!
    –Hugo

  28. Gui
    abril 13, 2015 às 4:46 pm

    Olá Eder… pode enviar o python source codepra mim tambem? gsm arroba machados ponto org
    Abraço!

  29. biRuk
    abril 18, 2015 às 11:19 am

    Hi I am working on a project similar as this. can i get the source code please. forbiruk@gmail.com

  30. Lucas
    maio 4, 2015 às 11:44 am

    Muito bom manow, estou muito interessado em fazer alguns testes, poderia me enviar o código por favor ? meu email : antoniassi.paiva@gmail.com

  31. Tyrone
    julho 3, 2015 às 9:51 am

    Ola Eng. Awesome work on this project. Would also love a copy of the source code for testing 🙂

  32. Slim
    julho 17, 2015 às 6:30 am

    Good job, man! It’s awesome!
    Can you give me the source code for referring.
    My email: tunm@hanet.com

  33. Vishnu Kumar
    agosto 7, 2015 às 12:11 am

    Hey man really cool! Mind sharing the code? You can reach me here: vishnuk9695@gmail.com

  34. Ruggiero
    outubro 8, 2015 às 10:49 am

    Hi, I would also be intereste din the code you used. Could you send me it at cwz.dargenio@gmai.com?

  35. kakaroto2
    novembro 13, 2015 às 4:33 pm

    Boa Eder,

    Vou querer o código também, estou curioso se poderia aplicá-lo no reconhecimento de cantos de pássaros com a mesma eficiência que você teve com músicas. miudera1@gmail.com

  36. kakaroto2
    novembro 13, 2015 às 4:36 pm

    Boa Eder,

    Gostaria de ver o código também. Queria testá-lo frente ao reconhecimento de canto de pássaros para ver se a eficiência é a mesma. miudera1@gmail.com

  37. rahmouni
    dezembro 17, 2015 às 5:46 am

    Hi Eder,
    good work, i work in a similar project, Could you please share with me this code. Thank you very mutch . rahmounikhaldoune@gmail.com

  38. rahmouni
    dezembro 17, 2015 às 5:52 am

    awesome job!…. i’ve been looking on how to do this in python. can you send me the source codes? rahmounikhaldoune@gmail.com

  39. Clausius Reis
    fevereiro 25, 2016 às 10:06 pm

    Olá Eder, parabéns pelo trabalho, muito interessante. Seria possível me enviar o código que você desenvolveu em Python? Estou desenvolvendo um trabalho com visualização e acho que seria interessante adicionar a parte de Fingerprint. Se possível meu e-mail é: clausiusreis@gmail.com

  40. abhinav
    fevereiro 27, 2016 às 9:40 am

    Hello eder !! great work.I am working on something similar and it would be really helpful if you could share the code. Thanks in advance. You can reach me at: abhinavreddy94@gmail.com

  41. abhinav
    fevereiro 27, 2016 às 9:43 am

    Hello Eder ! great work. I am presently working on something similar and it would be really helpful you could share the code. Thanks in advance. You can reach me at : abhinavreddy94@gmail.com

  42. Paul
    abril 5, 2016 às 1:51 pm

    Hey Eder, nice! It’d be cool if you could share the code with me too paulsmithirl93@gmail.com – cheers!

  43. junho 13, 2016 às 4:19 am

    Hello Eder, Great job that you did.Can you please share your code or if it is possible to send it to my gmail adress maalej.sonda.m@gmail.com. thank you !

  1. No trackbacks yet.

Deixe um comentário