Présenter par : Mounir GRARI

42
1 Présenter par : Mounir GRARI RAPPORT DE PROJET SOUS HTK Reconnaissance de mots isolés Et Reconnaissance de mots connectés

description

RAPPORT DE PROJET SOUS HTK Reconnaissance de mots isolés Et Reconnaissance de mots connectés. Présenter par : Mounir GRARI. Reconnaissance de mots isolés Et Reconnaissance de mots connectés. Plan. Introduction Construction de la base de données Construction de modèle de langage - PowerPoint PPT Presentation

Transcript of Présenter par : Mounir GRARI

Page 1: Présenter par : Mounir GRARI

1

Présenter par :Mounir GRARI

RAPPORT DE PROJET SOUS HTK

Reconnaissance de mots isolés Et

Reconnaissance de mots connectés

Page 2: Présenter par : Mounir GRARI

2

Plan

– Introduction – Construction de la base de données

• Construction de modèle de langage • Acquisition des fichiers sons • Étiquetage des fichiers sons • Représentation acoustique du signal

– Description des modèles • Modèles de Markov • Fichiers gabarits

– Apprentissage • Apprentissage avec l’algorithme Vitervi (HInit)• Apprentissage avec l’algorithme de Baum Welch (HRest)• Ré estimation avec l’algorithme de Baum Welch de tous les models a la fois (HERest)

– Reconnaissance • HVite et Hresults

– Etude d’autres possibilités; vocabulaire restreint, vocabulaire plus complexe, analyse par mots et analyse par phonème

– Etude du cas multi locuteur– Synthèse des résultats trouvés– Conclusion

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 3: Présenter par : Mounir GRARI

3

Introduction :• Le but est de construire un système de

reconnaissance de mots isolés et ensuite de phrase qui suive une certaine syntaxe de plusieurs mots et de le valider sous l'environnement HTK (Hidden Markov Model Toolkit)

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 4: Présenter par : Mounir GRARI

4

modèle de langage Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Début Fin

نادي

على

Pause

محمد

أمين

Pauseكلم

Pause

Pause

Pause

ركب

Pause

إهتف

لي

Pause

صفر

واحد

إثنان

عشرة

تسعون

عشرون

و

Page 5: Présenter par : Mounir GRARI

5

Acquisition des fichiers sons :Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 6: Présenter par : Mounir GRARI

6

Étiquetage des fichiers sons :• La santaxe de la Commande HSlab:

• HSlab –F WAVE –L labels/ihtif.lab Signal/ihtif.wav

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 7: Présenter par : Mounir GRARI

7

Étiquetage des fichiers sons :• Le résultat de cette phase est une base de données

des étiquettes des différents fichiers sons. (Les étiquettes sont dans le dossier labels)

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

HSlabLes fichiers sons (.wav)

Les étiquettes (.lab)

Enregistrement et étiquetage des fichiers sons

Page 8: Présenter par : Mounir GRARI

8

Représentation acoustique du signal :Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Hcopy

Les fichiers sons (.wav) (hcopyliste.conf)Ihtif.wavKallime.wavAmine.wav

Les Fichiers MFCC ihtif.mfcckallime.mfccmohammed.mfccetc

Représentation acoustique du signal

Fichier de configurationparametrisation.conf

parametrisation.confSOURCEFORMAT=WAVETARGETKIND=MFCC_E_DWINDOWSSIZE=250000.0TARGETRATE=10000.0NUMCEPS=8 # nb de coeff MFCCUSEHAMMING=TPREEMCOEF=0.97NUMCHANS=26CEPLIFTER=22

hcopyliste.confsignal/ihtif.wav mfcc/ihtif.mfccsignal/kallime.wav mfcc/kallime.mfccsignal/ala.wav mfcc/ala.mfccsignal/mohamed.wav mfcc/mohamed.mfcc....

Page 9: Présenter par : Mounir GRARI

9

Représentation acoustique du signal :• Le nombre de coefficients MFCC utilisé est 8 + l’energie + les dérivés (donc

18)

• Le résultat de cette phase est un ensemble de fichiers .mfcc dans le dossier mfcc contenant les coefficients.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 10: Présenter par : Mounir GRARI

10

Description des modèles :• Pour chaque entité lexicale, on définira le modèle associé. Pour cela, on

donnera la topologie de chaque modèle, le nombre d'états et les probabilités de transition entre les états.

• Exemple du model en phonétique représentant le mot du vocabulaire ihtif

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

sil ih tif sil

Page 11: Présenter par : Mounir GRARI

11

Description des modèles :• Fichiers gabarits : A chaque entité lexical (mot du vocabulaire) on va crée un

fichier Gabarit (model) représentant l’entité lexical dans la pratique.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

<BeginHMM> <NumStates> 4

<VecSize> 18 <MFCC_D_E> <State> 2 <Mean> 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 18 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <State> 3 <Mean> 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 18 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <TransP> 4 0.0 1.0 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.0 <EndHMM>

Exemple : fichier gabarits/ihtif

Page 12: Présenter par : Mounir GRARI

12

Apprentissage avec l’algorithme Vitervi (HInit)

• Apprentissage avec l’algorithme Vitervi (HInit)

• Chaque modèle doit être appris : les moyennes, les variances et les probabilités de transition entre états sont ré estimées jusqu'à ce qu'un seuil de convergence ou qu'un nombre maximum d'itération soient atteint. Ceci est fait par l'algorithme de Viterbi.

• Pour chaque phonème on applique la commande HInit

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 13: Présenter par : Mounir GRARI

13

Apprentissage avec l’algorithme Vitervi (HInit)

• Le fichier config/hinit.conf

• Le fichier listes/mfcc.lst

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

#Fichier de configuration pour l’initialisation des #modèles de Markov par l’algorithme de ViterbiTARGETKIND = MFCC_E_DLe fichier config/hinit.conf

mfcc/ihtif.mfccmfcc/kallime.mfccmfcc/ala.mfccmfcc/mohamed.mfccmfcc/amine.mfccmfcc/nadi.mfcc….

Page 14: Présenter par : Mounir GRARI

14

Apprentissage avec l’algorithme Vitervi (HInit)

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 15: Présenter par : Mounir GRARI

15

Apprentissage avec l’algorithme Vitervi (HInit)

• La syntaxe de la commande HInit

• HInit -C config/hinit.conf -A -o hinit/cif -l cif -L labels/ -i 20 -T 1 -m 2 gabarits/0 -S listes/mfcc.lst

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 16: Présenter par : Mounir GRARI

16

Apprentissage avec l’algorithme Vitervi (HInit)• Le fichier résultat de cette commande est hinit/ihtif qui contient 

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

~o<STREAMINFO> 1 18<VECSIZE> 18<NULLD><MFCC_E_D><DIAGC>~h "hinit/ihtif"<BEGINHMM><NUMSTATES> 4<STATE> 2<MEAN> 18 -6.005343e+000 -1.046386e+000 -7.661552e-001 8.069010e+000 -8.266843e+000 -5.747077e+000 -3.216688e-001 -8.078197e+000 8.653573e-001 1.482991e-002 -2.785692e-003 2.108349e-003 -1.385363e-003 -1.897629e-002 -1.652776e-002 -3.286432e-003 -2.792146e-002 2.159977e-004<VARIANCE> 18 7.077799e+001 4.468427e+001 8.880889e+001 4.942561e+001 9.471810e+001 7.407012e+001 4.695766e+001 7.936121e+001 1.000000e-002 1.238934e-001 1.128693e-001 1.343194e-001 1.521769e-001 2.594025e-001 2.268354e-001 2.340412e-001 2.891582e-001 1.000000e-002<GCONST> 4.371070e+001<STATE> 3<MEAN> 18 -4.115136e+000 4.821393e+000 2.416528e-001 4.906225e+000 -2.838504e+000 -3.414094e+000 1.463784e+000 -6.460936e+000 8.129345e-001 -3.213571e-002 1.019199e-002 -5.698932e-003 3.618972e-003 4.414299e-002 3.562211e-002 6.894447e-003 6.707498e-002 -5.552998e-004<VARIANCE> 18 1.517968e+001 2.769409e+001 1.666672e+001 2.582353e+001 4.500641e+001 9.010397e+001 2.904503e+001 7.800780e+001 1.000000e-002 2.547789e-002 5.287474e-002 7.262968e-002 9.334487e-002 1.291680e-001 1.512521e-001 1.913001e-001 1.906947e-001 1.000000e-002<GCONST> 3.316070e+001<TRANSP> 4 0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 9.977974e-001 2.202643e-003 0.000000e+000 0.000000e+000 0.000000e+000 9.944401e-001 5.559846e-003 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000<ENDHMM>

Page 17: Présenter par : Mounir GRARI

17

Apprentissage• Le résultat de cette phase est un ensemble de fichiers dans le dossiers hinit/

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 18: Présenter par : Mounir GRARI

18

Apprentissage avec l’algo de Baum Welch (HRest)• Les modèles sont ensuite estimés de façon indépendante avec l’algorithme de

Baum Welch en utilisant la commande HRest.

• Pour chaque phonème on applique la commande HRest

• Le fichier config/hrest.conf

• Le fichier listes/mfcc.lst : deja utilisé avec la commande hinit

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

#Fichier de configuration pour la re-estimation des #modèles de Markov par l’algorithme de ViterbiTARGETKIND = MFCC_E_D

Page 19: Présenter par : Mounir GRARI

19

Apprentissage avec l’algo de Baum Welch (HRest)• La syntaxe de la commande HRest :

• HRest -C config/hrest.conf -A -l aaich -M hrest/ -L labels/ -i 20 -T 1 -m 2 hinit/aaich -S listes/mfcc.lst

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 20: Présenter par : Mounir GRARI

20

Apprentissage avec l’algo de Baum Welch (HRest)• Le fichier résultat de cette commande est hrest/aaich qui contient :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

~o<STREAMINFO> 1 18<VECSIZE> 18<NULLD><MFCC_E_D><DIAGC>~h "aaich"<BEGINHMM><NUMSTATES> 4<STATE> 2<MEAN> 18 -4.522240e+000 -5.880653e-001 8.032802e+000 1.781352e+001 -1.238021e+001 -1.077035e+001 -7.107430e+000 -8.941146e+000 7.310240e-001 5.426434e-003 7.549872e-002 1.450049e-001 6.228557e-002 -2.826517e-002 -1.814440e-001 -7.717894e-002 -2.151994e-001 1.169653e-003<VARIANCE> 18 1.766042e+001 6.102851e+000 1.192767e+001 2.540695e+001 1.958749e+001 5.041793e+001 1.922638e+001 3.833256e+001 2.337085e-003 1.619523e-001 2.678286e-001 1.185456e-001 3.499088e-001 3.168113e-001 3.927653e-001 3.371374e-001 2.182082e-001 8.624458e-006<GCONST> 2.823985e+001<STATE> 3<MEAN> 18 -1.939978e+001 3.436779e+000 8.813956e+000 6.829864e+000 1.483930e+000 -5.005201e+000 -6.350124e+000 -7.545569e+000 7.231323e-001 6.521484e-002 -5.791717e-002 -7.582700e-002 1.413276e-002 -3.901125e-002 6.619526e-003 -4.050380e-003 -9.888211e-002 1.033234e-003<VARIANCE> 18 8.760622e+001 6.642943e+000 2.810736e+001 2.752651e+001 1.858868e+001 3.854350e+001 3.150053e+001 6.762994e+001 2.326111e-003 2.225343e-001 1.282824e-001 2.050075e-001 1.057131e-001 3.768567e-001 7.502362e-001 3.706125e-001 3.885895e-001 1.905958e-005<GCONST> 3.281725e+001<TRANSP> 4 0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 9.883134e-001 1.168664e-002 0.000000e+000 0.000000e+000 0.000000e+000 9.933964e-001 6.603613e-003 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000<ENDHMM>

Page 21: Présenter par : Mounir GRARI

21

Apprentissage avec l’algo de Baum Welch (HRest)• Le résultat de cette phase est un ensemble de fichiers dans le dossiers hrest/

• On remarque que mon langage contient 50 syllabes.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 22: Présenter par : Mounir GRARI

22

Reconnaissance  • On doit définir le modèle de notre langage ; la grammaire de notre langage

est définie dans le fichier listes/modeleLangage.txt :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

$chiff = ciffr | wahid |itnan | thalathah | arrbaaah | khamsah | sitah | sabaah | thamanniah | tisaah | aacharah | i7daaachar | ithnaaachar | thalathataaachar | arrbaaataaachar | khamsataaachar | sitataaachar| sabaataaachar | thamanniataaachar | tisaataaachar | aaichroun | thalatoun | arrbaaaoun | khamsoun | sitoun | sabaaoun | thamanoun | tisaaoun;$sil = sil ;$prenom = [ mohamed sil ] amine | mohamed ;$numerotel = $chiff $sil $chiff [ $sil wa $sil $chiff ] $sil ;

(SENT-START ( $sil ihtif $sil li $sil $numerotel )| ( $sil nadi $sil ala $sil $prenom $sil )| ( $sil kallime $sil $prenom $sil )| $chiffSENT-END)

Page 23: Présenter par : Mounir GRARI

23

Reconnaissance• On va appliquer la commande HParse à cette grammaire pour générer le

modeleDeMots

• La syntaxe de la commande HParse:

• HParse -T 1 listes/modelelangage.txt listes/modeledemots.txt

• Le résultat est un fichier listes/modeledemots.txt qui contient tous les mots de notre langage :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

VERSION=1.0N=151 L=266 I=0 W=!NULL I=1 W=!NULL I=2 W=SENT-START I=3 W=sil I=4 W=ihtif . . . .

Page 24: Présenter par : Mounir GRARI

24

Reconnaissance• Dictionnaire du langage :

• Un fichier listes/dictionnaire.txt contient le dictionnaire de notre langage :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

SENT-START [ ] SENT-END [ ]ciffr cif fr wahid wa hid itnan ith nan thalathah tha la thah arrbaaah arr ba aah khamsah kham sah sitah si tah sabaah sab aah thamanniah tha man niah tisaah tis aah aacharah aa cha rah

Page 25: Présenter par : Mounir GRARI

25

Reconnaissance• La reconnaissance sera ensuite effectuée sur chaque fichier en utilisant

successivement les modèles issus de HInit ceux issus de HRest et ceux de HERest afin d’évalué l’apport des divers apprentissage.

• Pour cela nous allons utiliser la commande HVite.

• La syntaxe de la commande HVite:

HVite -T 1 -A -w listes/modeledemots.txt -d hinit/ -l resultat/hinit/ -S listes/mfcc.ar.lst listes/dictionnaire.txt listes/listemodeles.txt

• Il utilise :– listes/modeledemots.txt générer avec HParse.

– listes/dictionnaire.txt qui contient le dictionnaire du langage.

– listes/listemodeles.txt qui contient les phonèmes du langage.

– hrest/ le dossier contenant les estimations par hinit hrest ou herest.

– resultat/hrest/ dans lequel les résultats de la commande serons mis.

– listes/mfcc.ar.lst la listes des fichiers MFCC des fichiers à reconnaître.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 26: Présenter par : Mounir GRARI

26

Reconnaissance les deux premières chaînes sont reconnues entièrement :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 27: Présenter par : Mounir GRARI

27

Reconnaissance• Le résultat est un fichier « .rec » pour chaque fichier à reconnaître.

• Par exemple pour ihtifli066ar.wav en utilisant les estimations par hinit le résultat est resultats/hinit/ihtifli066ar.rec

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

0 320000 sil -1088.285034320000 4620000 ihtif -9798.0156254620000 5030000 sil -1100.4816895030000 8090000 li -9363.4335948090000 8250000 sil -433.3799448250000 10290000 ciffr -4814.93896510290000 12160000 sil -4441.61132812160000 16880000 sitah -10271.93164116880000 17600000 sil -1854.31323217600000 19780000 wa -7324.11035219780000 20510000 sil -2059.96044920510000 27070000 sitoun -16285.65234427070000 27260000 sil -438.454254

Page 28: Présenter par : Mounir GRARI

28

L’évaluation des performances:• La syntaxe de la commande HResults:• HResults -T 1 -L labels/ listes/listemodeles.txt resultat/hinit/ihtifli066ar.rec

• On remarque que le taux de la reconnaissance est de 46.67% en utilisant les estimations de hinit, ou ceux de hrest.

• Analyse des résultats :• H = 7 : Nombre d'éléments bien classés • D =2 : Nombre d'éléments supprimés • S = 6 : Nombre d'éléments substitués • I = 0 : Nombre d'éléments insérés • N =15 : Nombre total d'éléments

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 29: Présenter par : Mounir GRARI

29

Langage restreint et reconnaissance par phonème

• On utilise la grammaire suivante 

• La reconnaissance donne ce qui suit :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

$chiff = ciffr | wahid ;$sil = sil ;$prenom = mohamed ;(SENT-START( $sil kallime $sil $prenom $sil )| $sil $chiff $silSENT-END)

Page 30: Présenter par : Mounir GRARI

30

Langage restreint et reconnaissance par phonème• On affiche les résultats avec HResults.

• Les résultats pour la reconnaissance de mots isolés :

• Les résultats pour la reconnaissance de mots connectés :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 31: Présenter par : Mounir GRARI

31

Langage restreint et reconnaissance par mot• Nous allons utiliser un vocabulaire de 4mots.

• Nous allons faire un étiquetage par mots (donc seulement 4 étiquette)

• On utilise la grammaire suivante 

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

$chiff = ciffr | wahid ;$sil = sil ;$prenom = mohamed ;(SENT-START( $sil kallime $sil $prenom $sil )| $sil $chiff $silSENT-END)

Page 32: Présenter par : Mounir GRARI

32

Langage restreint et reconnaissance par mot• La reconnaissance donne ce qui suit :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 33: Présenter par : Mounir GRARI

33

Langage restreint et reconnaissance par mot• On affiche les résultats avec HResults.

• Les résultats pour la reconnaissance de mots isolés :

• Les résultats pour la reconnaissance de mots connectés :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 34: Présenter par : Mounir GRARI

34

Langage complexe et reconnaissance par mot• Nous allons utiliser un vocabulaire de 36 mots.

• Nous allons faire un étiquetage par mots (donc seulement 37 étiquette)

• On utilise la grammaire suivante 

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

$chiff = ciffr | wahid ;$sil = sil ;$prenom = mohamed ;(SENT-START( $sil kallime $sil $prenom $sil )| $sil $chiff $silSENT-END)

Page 35: Présenter par : Mounir GRARI

35

Langage complexe et reconnaissance par mot• La reconnaissance donne ce qui suit :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 36: Présenter par : Mounir GRARI

36

Langage complexe et reconnaissance par mot• On affiche les résultats avec HResults.

• Les résultats pour la reconnaissance de mots isolés :

• Les résultats pour la reconnaissance de mots connectés :

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 37: Présenter par : Mounir GRARI

37

Synthèse des résultats trouvés :Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Reconnaissance par phonème

Reconnaissance par mot

Mots isolé Mots connectés

Mots isolé Mots connectés

Vocabulaire grand (36mots)

~50% ~ 35% - 46 % ~100% ~60%

Vocabulaire petit

(4 à 10 mots)

~50% ~ 40 % ~100% ~80%

Page 38: Présenter par : Mounir GRARI

38

Etude du cas multi locuteur • Nous allons utiliser deux locuteurs ; le résultat est :

• On remarque qu’il y reconnaissance totale des mots isolés.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 39: Présenter par : Mounir GRARI

39

Etude du cas multi locuteur

• On affiche les résultats avec HResults.

• Les résultats pour la reconnaissance de mots isolés du locuteur 1

• Un taux de reconnaissance est de 100% en utilisant les estimations de hinit et ceux de hrest

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 40: Présenter par : Mounir GRARI

40

Etude du cas multi locuteur

• On affiche les résultats avec HResults.

• Les résultats pour la reconnaissance de mots isolés du locuteur 2

• Un taux de reconnaissance est de 100% en utilisant les estimations de hinit et ceux de hrest

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 41: Présenter par : Mounir GRARI

41

Conclusion  :

• Le présent rapport vise à expliquer la construction d’un système de reconnaissance de mots isolés et de phrase (mots connectés) qui suive une certaine syntaxe de plusieurs mots. Avec une reconnaissance par phonème et une grammaire de langage plus simple j’ai arrivée a des taux de reconnaissance jusqu'à 46.67% pour des phrase comme « ihtif li 066 » ou même 50% pour des mots isolé « ciffr » et ensuite avec un modèle de langage plus complexe (plus utile) le taux diminue jusqu'à 40% pour une phrase tel que « ihtif li 0 66 58 11 69 », mais dans les deux cas les phrase sont souvent entièrement reconnue par le système Comme « kallime mohamed », ensuite j’ai fait une reconnaissance par mots qui donne de bons résultats surtout pour des mots isolés avec des taux de reconnaissance de 100%, et des taux entre 60% et 80% pour des mots connecté, et j’ai terminer avec un système multi locuteur qui fait une reconnaissance de 100% pour des mots isolés.

Reconnaissance de mots isolés Et Reconnaissance de mots connectés

Page 42: Présenter par : Mounir GRARI

42

Merci