Derniers Articles
Commenter

Nous étions à Devoxx France 2016

Devoxx France 2016 s’est déroulée du 20 au 22 avril 2016 au Palais des Congrès de Paris. 5 techniques de SII Rennes étaient présents : Nicolas ROUSSEL, Valentin GOT et Aurélien BAUDET côté développement et Thomas MAINGUY et Nicolas BOURON côté infrastructure. Eymeric VIEUILLE était le représentant de SII IDF.

Devoxx France

Devoxx France c’est une conférence de 3 jours qui réunit environ 2 500 développeurs passionnés, plus de 200 orateurs pour environ 250 conférences.

Les thèmes de cette Devoxx 2016 étaient :

  • JavaJava, JVM, Javas SE/EE
  • Mobile et Internet of Things
  • Web, HTML5 et UX
  • Architecture, Performance & Sécurité
  • DevOps, Agilité, Méthodologie & Tests
  • Cloud et Scaling
  • BigData et Analytics
  • Future, Robotique
  • Langages alternatifs

En savoir plus

Commenter

Ma journée à Agile Laval 2016

Je déplore mon manque de rigueur sur la rédaction d’articles. Le partage d’expériences est pour moi l’un des moyens les plus efficaces pour apprendre autour de l’Agilité. Cette envie d’apprendre, de progresser, de partager avec les autres, au-delà des notions de confidentialité, de concurrence ou de “je suis le gourou” m’a toujours séduit dans la communauté Agile.

J’ai d’ailleurs rencontré Eric Siber lors de cette conférence et alors que je critiquais les propos que je venais d’entendre à une session, il m’a rappelé l’importance de cet état d’esprit de partage. Le contenu n’est donc peut-être pas le plus important mais c’est dans l’intention, l’envie de partager et surtout dans les échanges que ces événements ont une très grande valeur (spéciale dédicace à la première valeur du manifeste Agile).

Bref, j’écris cet article pour partager ma journée à Agile Laval 2016, car c’était justement un super moment de partage.

Keynote #1 : Etes vous prêts pour le grand saut ? Aurélien Morvant

En savoir plus

Commenter

La Reconnaissance Automatique du Locuteur

La Reconnaissance Automatique du Locuteur (RAL), à ne pas confondre avec la reconnaissance vocale, permet à un système (votre voiture, téléphone, banque, porte, frigo, etc) de vous identifier à partir de votre voix.

Il faut savoir que le traitement automatique de la parole est étudié depuis les années 60, mais ce n’est que dernièrement que sont apparus des systèmes de RAL suffisamment robustes.

Dans ce qui suit, je vous donne un minuscule aperçu du sujet. J’ai fait attention à ne pas écrire des insultes de formules mathématiques qui pourraient démotiver le lecteur. Vous avez juste besoin de vous remémorer vos années lycée, pour peu qu’elles ne vous ont pas traumatisé.

Vous avez ma parole

Commençons par les modalités de reconnaissance !

Il existe différentes façons de reconnaître la voix d’un individu. On peut le faire, par exemple, à partir d’une phrase lue par une personne. Dans ce cas la reconnaissance sera dite text-dependant. Si le locuteur est libre de raconter ce qu’il veut, elle sera alors dite text-independant.

Ensuite, à partir d’un panel d’utilisateurs dont les caractéristiques vocales sont enregistrées dans une base de données, on peut procéder de deux façons pour reconnaître un individu.

La première se nomme vérification du locuteur. De la même façon qu’on se connecte à sa session sur ordinateur en rentrant son identifiant, notre individu se présente sous une certaine identité qui sera confirmée (ou non) par sa voix en lieu et place du mot de passe.

Une autre alternative est l’identification du locuteur. Là il faut que le système arrive à deviner l’identité du locuteur sans autre indication que sa voix (et que l’utilisateur ait préalablement été enregistré bien sûr…)

Cette dernière façon de procéder est évidement la plus délicate. Car en procédant ainsi, il faut une grande quantité d’enregistrements (généralement supérieurs à 30 secondes) dans des conditions acoustiques et avec un parler à peu près similaire afin d’être fiable. Plus il y a de différences d’un enregistrement à l’autre (manière de parler, bruit acoustique, laps de temps entre les enregistrements, etc.) et plus les performances sont dégradées. Autant dire ce n’est pas gagné…

On parle tous avec un filtre

Qu’est ce que la voix ?

La voix, pour faire simple, c’est un flux d’air généré par les poumons qui fait vibrer les cordes vocales. Cet air pulsé (ou non) est ensuite modulé par la cavité buccale et/ou nasale pour donner des sons intelligibles selon votre état.

Notre voix possède des caractéristiques physiologiques liées à la façon dont nos parents nous ont fait, sur lesquelles reposent des caractéristiques comportementales (liées au aléas de la vie). Comme la vitesse d’élocution, les accents, les émotions, etc. C’est pourquoi la Reconnaissance Automatique du Locuteur est à cheval entre la biométrie physique (comme les empreintes digitales, le visage) et la biométrie comportementale. C’est cet ensemble complexe qui forme ce que l’on nomme la signature vocale.

Regardons maintenant la voix sous un l’aspect traitement du signal…

Comme pour les instruments de musique, les cordes vocales produisent un son composé d’une fréquence fondamentale et de plusieurs harmoniques. Ci-dessous des cordes vocales en pleine action.

Ce son est ensuite modulé par tout ce qui se présente (dents, lèvres, langues, palais, cavité nasale, nourriture, etc) en fonction de ce que l’on souhaite dire.

Sont alors mises en avant certaines zones de fréquences ! Ces zones, qui ont plus d’énergie que d’autres, permettent de différencier le timbre d’un individu. On les appelle les formants.

5A7B7E93-C967-A47F-2FF4-5A8EFA7A0B79.jpg

Il apparaît alors simple de modéliser la production vocale par une source (les impulsions glottales) suivie d’un filtre (cavité nasale / buccale).

3BA57BF2-4C3D-28ED-CDC7-D78AFB6CA8C6.jpg

Chacun sa voix

Maintenant découpons un signal sonore en plusieurs petites tranches de 20 ms toutes les 10 ms (typiquement). Sur chacune d’elles, on effectue une transformée de Fourier discrète permettant d’obtenir la répartition énergétique des fréquences qui composent le signal. Si on met bout à bout ces spectres sur l’échelle du temps, on obtient ce que l’on appelle un spectrogramme. En plus d’être agréable à regarder, il donne tout un tas d’informations. Il permet notamment de deviner les mots prononcés à partir des formants et de la répartition du bruit. Mais plus que ça, il vous est unique.

DEA97636-012E-F4F7-934C-2B7299EDCD7B.jpg

Comment faire pour y extraire notre identité vocale ?

Grâce à la magie des mathématiques, il est possible d’obtenir pour chaque tranche une poignée de valeurs qui suffisent à vous caractériser.

Pour cela, il existe déjà plusieurs techniques dont les noms ne vous parleront probablement pas :

  • Mel-Frequency Cepstrum Coefficients (MFCC),
  • Real Cepstral Coefficients (RCC),
  • Linear Predictive Cepstral Coefficients (LPCC),
  • Perceptual Linear Predictive Cepstral Coefficients (PLPC).

Nous n’allons garder que la première, les MFCC.

Les Mel-Frequency Cepstrum Coefficients ont été élaborés dans les années 80 et restent aujourd’hui encore assez solides pour être couramment utilisés.

Gardons en tête qu’un système doit reconnaître un individu par sa voix comme un humain le ferai. Car c’est bien notre oreille qui nous dit s’il s’agit de votre copine ou non lorsqu’il fait noir. Cet organe de perception ne sélectionne que ce qui l’intéresse. Par exemple, à intensité égale nous entendons mieux les aiguës (fréquences élevées) que les graves (fréquences basses), ou encore nous distinguons plus facilement deux fréquences proches dans les graves que dans les aiguës. Par conséquent pour savoir si deux voix sont identiques pour nos oreilles, et non celles de votre chat, nous devons tenir compte de nos propres spécificités.

Pour le calcul des coefficients MFCC il suffit d’appliquer cette recette :

1. Préaccentuation

Le rôle de la préaccentuation est d’augmenter les hautes fréquences. Et ce pour se caler sur notre perception des aiguës. Il serait dommage de négliger ces zones qui contiennent beaucoup d’information (c’est à cet endroit que l’on retrouve l’énergie des fricatives).

2. Fenêtrage

Le fenêtrage c’est tout simplement le découpage du signal. Il se fera en petits morceaux de 20 à 30 ms toutes 10-15 ms. A partir desquels nous obtiendrons nos fameux coefficients pour chacun d’entre eux. Pourquoi découper le signal ? Tout simplement parce que nos lèvres, notre langue et notre glotte, pour ne citer qu’eux n’arrêtent pas de bouger quand on parle. Hors il est plus simple de s’appuyer sur des informations qui ne dépendent pas du temps. Et donc on estime qu’entre 20 et 30 ms notre bouche bouge peu et donc que le signal de parole produit sur cette durée possède des propriétés stochastiques variant peu. On dit alors que le signal est stationnaire. Le décalage de 10 à 15 ms quant à lui ben… c’est simplement pour balayer finement le signal.

3. Pondération de notre fenêtre carré par une fenêtre de Hamming

En coupant net le signal on introduit un début et une fin de signal abruptes. Or une variation rapide dans le temps implique l’apparition de hautes fréquences parasites. Voilà pourquoi, pour éviter les effets de bord, on adoucie le début et la fin en multipliant chaque morceau par une fenêtre de Hamming en forme de petite colline, mais la encore c’est vous choisissez.

4. Estimation du spectre

Passage du domaine temporel vers le domaine spectral !
Ici on calcul une estimation du spectre de chaque trame à l’aide de la transformée de Fourier discrète  (DFT – Discrete Fourier transform).

5. Bancs de filtres Mels

Encore une fois il s’agit d’approcher du fonctionnement de l’oreille. Nous n’entendons pas de la même façon les fréquences contiguës selon qu’elles soient graves ou aiguës. Les fréquences basses (graves) sont beaucoup mieux discriminées par la cochlée qui agit comme une série de filtres contigus de différentes largeurs. Nous n’avons plus qu’à faire la même chose avec notre spectre.
Pour cela nous allons appliquer un banc de filtres dont les largeurs de bandes et l’espacement correspondent à l’échelle Mel.



En calculant la somme des énergies contenues dans chaque filtre nous obtenons autant de valeurs représentatives que de filtres.

6. Calcul du logarithme de chaque énergie

Ceci est également motivé par l’ouïe humaine : nous ne percevons pas l’intensité sonore au travers d’une échelle linéaire. En gros, pour percevoir un son deux fois plus fort, il faut multiplier par huit sa puissance d’émission.

7. Calcul de la transformé en cosinus discrète inverse (IDCT in english)

Cette transformée nous fait revenir dans un pseudo-domaine temporel (d’où le nom de cepstre, quéfrence, …). En général on ne garde que les 13 premiers coefficients. Le premier étant proportionnel au log de l’énergie moyenne il est tout simplement remplacé par l’énergie de la trame. Question de représentativité.

On peut voir ça comme une étape de compression. Les coefficients les plus élevés apportent un niveau de détail inutile, voir contre productif pour la suite.

Ce n’est pas fini…

Voilà. Le signal est haché menu, transformé, et chaque morceau en est réduit à 13 coefficients.

Mais on ne va pas s’arrêter en si bon chemin car on peut encore faire mieux…

Nous savons que le signal de parole n’est pas constant. Ces variations peuvent elles aussi être propres à un individu. Il est donc utile de consigner la façon dont les coefficients varient dans le temps.

C’est chose faite avec le calcul des coefficients différentiels (appelé également deltas) et d’accélération (double-deltas) dont le détail ne sera pas donné ici, mais retenez simplement qu’ils représentent la trajectoire des coefficients dans le temps, c’est à dire la partie dynamique des caractéristiques vocales (pentes des formants, etc).

Au final nous obtenons donc une série de vecteurs acoustiques de 39 coefficients toutes les 10ms :

  • 12 MFCC (MFCC (mel frequency cepstral coefficients)
  • 12 delta MFCC
  • 12 double deltas MFCC
  • 1 coefficient d’énergie
  • 1 coefficient delta d’énergie
  • 1 coefficient double delta d’énergie

Enfin la reconnaissance

Nous sommes fin prêt pour la reconnaissance du locuteur.

Pour cela, un “modèle du monde” (UBM – Universal Background Model) est construit à partir de vecteurs acoustiques de locuteurs lambdas (calculés comme expliqué précédemment). Il est préalablement apprit sur un ensemble d’échantillons le plus représentatif possible. Ce modèle se présente sous la forme d’une addition de lois Gaussiennes dont les moyennes et écart-type sont pondérés.

Ensuite, à partir des vecteurs acoustiques d’un locuteur à reconnaître dans le futur, on adapte cette UBM pour obtenir un nouveau mélange de lois gaussiennes (GMM – Gaussian Mixture modele) qui sera LE modèle d’un unique locuteur.

On répète ainsi l’opération pour chaque locuteur qui devra être reconnu.

Lorsque l’on souhaite savoir à qui appartient la voix en question, on compare la probabilité que cette voix corresponde à un locuteur cible (Targeted Speaker Model), donc autorisé, à la probabilité qu’elle appartienne au modèle du monde. Si le rapport est au dessus d’un certain seuil alors le locuteur est reconnu, sinon c’est un imposteur.

Le modèle GMM-UBM fut pendant 10 ans la référence, mais la reconnaissance du locuteur évolue à vitesse grand V. Depuis sont apparus de nouveaux algorithmes de modélisation tels que les GSV-SVM, puis les JFA ou encore les i-Vector qui sont actuellement la dernière tendance.

Pour les ingénieurs

Les ingénieurs souhaitant mettre la main à la pâte sont aidés. Puisque, même si c’est encore tout chaud, quelques bonnes âmes ont développé des API, toolbox ou autre framework. Même Microsoft s’y est mis depuis peu. Ci-dessous quelques exemples.

C#
Microsoft Speaker Recognition API

Python
BOB.Spear
VoiceID

Java
MARF
Recognito

C++
Alize
spkrid

 

Commenter

Devoxx France 2016 : Frontend

Cet article présente les différentes conférences Front vues lors du Devoxx France 2016 :

En savoir plus

Commenter

Devoxx France 2016 : Backend

Cet article présente les différentes conférences Backend vues lors du Devoxx France 2016 :

En savoir plus