Added modifications to the OCR documentation
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 986 B |
+63
-2
@@ -1208,6 +1208,10 @@ Pour résumer le fonctionnement dans l'ordre :
|
||||
- On nettoie le résultat Tesseract pour compenser certains biais
|
||||
- On convertis le résultat en milisecondes
|
||||
|
||||
###### les chiffres (2)
|
||||
|
||||
Il faut savoir que avec la dernière version de l'émulateur (dont je vais parler un peu plus tard)
|
||||
|
||||
###### Pneus
|
||||
|
||||
La on arrive sur la partie la plus pénible.
|
||||
@@ -1431,9 +1435,60 @@ Il y aussi d'autre methodes comme un filtre Gaussien ou *Highlight countour* que
|
||||
|
||||
###### Petit point résolution
|
||||
|
||||
Un petit peu embarassant, vers les deux tiers du projet j'ai découvert un moyen de récupèrer des images 4K (ou presque) et du coup la reconnaissance était beaucoup moins demandeuse en filtres et en modifications.
|
||||
Comme on peut l'imaginer la résolution est extrêmement importante pour l'OCR. Et en avancant sur le projet de l'émulateur je me suis rendu compte qu'il était possible de récupèrer des images en 4K (Plutôt 1080 avec l'upscaling du lecteur). Cela est une superbe nouvelle car cela permet de simplifier énormément le processing sur les différentes windows.
|
||||
|
||||
Donc même si toutes ces techniques sont encore utilisées pour certains cas spécifiques. Vers la fin du projet j'ai pu simplifier énormément la reconnaissance pour certaines windows en retirant certains filtres qui étaient redondants.
|
||||
Quelques exemples pour se faire une idée
|
||||
|
||||
;
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Mais il faut savoir que grâce à cette simplification j'ai pu aussi créer d'autres methodes de filtrage pour certaines parties. Mais la simplification était obligatoire car avec des images aussi grande il n'était simplement pas possible de venir appliquer les mêmes filtres car le temps de traitement serait beaucoup plus long.
|
||||
|
||||
J'indique ces changements que après l'explication d'avant car ce sont des changements un peu de dernière minute et que la logique expliquée plus haut a été très importante pour le projet OCR même si tout n'est plus forcément utilisé maintenant que j'ai des images de meilleure qualité.
|
||||
|
||||
Dans la version actuellement disponible la reconnaissance a été simplifiée sous cette forme :
|
||||
|
||||
- Le "GapToLeader" est décodé avec un premier passage de *Tresholding* à 165 puis un *Resize* de 2 et une *Dilatation* de 1 pour retirer le flou
|
||||
- Les "Sectors" sont décodés en utilisant une toute nouvelle methode *VanishOxyAction* à cause des couleurs parfois appliquées et ensuite simplement une methode de *Tresholding* de 150 pour rendre le résultat assez propre pour l'OCR.
|
||||
- Le "LapTime" est dabord passé par un *Tresholding* très strict de 185 pour préparer la *SobelEdgeDetection* qui est également une nouvelle methode qu'il a été possible d'utiliser grâce à la simplification du reste des processus.
|
||||
- Le "Text" est décodé simplement avec un tresholding de 165 maintenant grâce à l'image 4K.
|
||||
- Les pneus ont leur propre traitement comme expliqué plus haut auquel on ajoute la *Dilatation* de 1.
|
||||
|
||||
Comme on peut le voir le traitement est pas mal plus simple mais cela ne veut pas dire que les autres methodes que je n'utilise plus ne sont pas utiles. La reconnaissance n'est pas encore parfaite et je pense que leur utilisation pourrait aider à améliorer les résultats. (Et parfois ces anciennes methodes sont utiles dans les traitements personnalisés des windows elle mêmes comme par exemple les pneus qui utilisent la methode *GrayScale* pour isoler les couleurs)
|
||||
|
||||
*VanishOxyAction*
|
||||
|
||||
Cette methode est une methode plutôt simple mais qui est importante. Elle se base beaucoup sur le code de la methode *Grayscale* et sur la methode *Tresholding* car elle essaie de regrouper le meilleur des deux en règlant quelques soucis que ces dernières crééent.
|
||||
|
||||
Le soucis avec la methode grayscale c'est que quand le texte est de couleur (Ce qui arrive souvent pour les temps de secteurs) la methode *GrayScale* rend les couleurs dans une nuance de gris un peu trop sombre ce qui fait que ensuite la methode de *Tresholding* défonce tout.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
L'idée est alors de prendre pour chaque pixel et de garder uniquement la valeur de R,G ou B la plus haute et de mettre les deux autres canaux au même niveau pour avoir une image blanchie qui puisse être ensuite utilisée avec la methode de *Tresholding* sans soucis.
|
||||
|
||||

|
||||
*SobelEdgeDetection*
|
||||
|
||||
On pourrait se dire que avec ce genre de methode le tresholding est inutile ensuite mais ca n'est pas le cas car le tresholding sert ensuite pour rendre les contours plus ou moins aggressif. Car même si l'image ressemble à une image binarisée, il reste des nuances que le treshold va pouvoir utiliser.
|
||||
|
||||
*SobelEdgeDetection*
|
||||
|
||||
Cette methode est une methode assez classique que je n'ai pas designé moi même alors je ne vais pas trop m'épancher dessus.
|
||||
|
||||
En gros on utilise une matrice et une formule mathématique pour redessiner une image et le résultat est une image avec des contours. Je ne l'ai utilisé que pour les temps au tour car ce sont les plus récalcitrants.
|
||||
|
||||
Cette methode a besoin d'une image passée en noir et blanc au préalable à laquelle on applique ensuite les matrrices de filtres. Et avec ces filtres ajoutés à l'image on peut ensuite calculer le "Gradient" pour créer les bords.
|
||||
|
||||
Le seul soucis de cette methode c'est qu'elle est assez gourmande et qu'elle fournit des formes creuses dû à la nature des matrices données.
|
||||
|
||||
Voici un exemple de ce dont cette méthode est capable :
|
||||
|
||||

|
||||
|
||||
### Interprétation des données
|
||||
|
||||
@@ -1467,6 +1522,12 @@ Donc même si toutes ces techniques sont encore utilisées pour certains cas sp
|
||||
|
||||
[A remplir à la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)]
|
||||
|
||||
## Utilisation de Chat GPT
|
||||
|
||||
----
|
||||
|
||||
[A remplir à la fin du projet]
|
||||
|
||||
## Améliorations futures
|
||||
|
||||
----
|
||||
|
||||
@@ -3023,3 +3023,7 @@ J'ai mis des notes sur mon code au cas ou des gens viennent à le lire. J'y déc
|
||||
|
||||
Bon aujourd'hui je dois encore avancer sur la partie nettoyage de code et avant de sortir la première release Beta je vais tenter d'installer le projet sur un autre pc pour voir ce que je n'ai pas mentionné dans mon ReadMe.
|
||||
|
||||
Bon j'ai pu rendre à M.Jayr mon evaluation intermédiaire et j'ai fait les dernières modifications sur le projet pour que je puisse sortir une release correcte. Maintenant je vais me mettre à la documentation. Il va falloir que je revoie ce que j'ai déja écrit en ce qui concerne l'OCR car j'ai fait des modifications depuis et j'ai ajouté la methode de SOBEL.
|
||||
|
||||
Il faut peut-être aussi que je parle vite fait dans la partie Emulation que j'ai du changer les variables d'environnement pour faire fonctionner le système en 4K.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user