Added to doc
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
+109
-2
@@ -2607,9 +2607,9 @@ Et normalement la lecture devrait être encore plus simple.
|
||||
|
||||
En fait c'était pas beaucoup plus simple mais au moins maintenant ca marche. Je vais pas mettre le code de lecture ici car c'est un peu trop long donc il va falloir me croire sur parole. (Ou aller sur Git)
|
||||
|
||||
Bon bah on est au même endroit qu'hier...
|
||||
Bon bah on est au même endroit qu'hier...
|
||||
|
||||
Bon pour demain le plan de bataille ca va être :
|
||||
Bon pour demain le plan de bataille ca va être :
|
||||
|
||||
Changer complêtement la methode "GetTimeFromPng" pour qu'elle prenne en compte toutes les possibilités de bugs et d'oubli de '.' ou de ':' mais pas selon le nombre de blocs mais selon le type de temps que l'on cherche
|
||||
|
||||
@@ -2618,3 +2618,110 @@ Pour le moment je regarde le nombre de blocs et si il y en a deux alors c'est qu
|
||||
Il faut que je bosse juste un peu vite fait la dessus et que j'arrête de putain de crasher dès que un truc est pas au bon format. Ensuite quand ca aura arrêté de crasher je vais reprendre l'OCR et voir pourquoi les resultats sont nuls a chier comme ca.
|
||||
|
||||
Et le but c'est que demain soir j'ai une reconnaissance de caractères plus proche de ce que j'avais dans d'autres projets... J'y croit 0 mais bon l'espoir fait vivre comme on dit.
|
||||
|
||||
## vendredi 12 Mai 2023
|
||||
|
||||
Bon aujourd'hui il faut que ca marche.
|
||||
|
||||
On va y aller par étape. Je vais revoir toutes les methodes d'OCR et essayer de réapliquer les filtres differemment et revenir au point de départ.
|
||||
|
||||
Avant de commencer je note plusieurs soucis avec les premiers tests :
|
||||
|
||||
- Les positions des pilotes ont l'air pas mal (Pas besoin de tout changer mais peut-être simplement checker que les filtres sont bons)
|
||||
- L'écart avec le leader est étonnamment pas mal aussi
|
||||
- Le temps au tour est tout simplement horrible. Aucun n'est juste et de très loin même si les décimales ne sont pas forcément loin
|
||||
- Le DRS je n'ai pas eu l'occasion de bien le tester mais je dirais que ca devrait être bon (à verifier quand le reste sera bon)
|
||||
- Les pneus ne sont étonnamment pas SI horribles, même si parfois les lettres sont prises comme des chiffres
|
||||
- Les noms de pilotes sont très bon (pas étonnant vu le système de distance de Levenstein donc ca mérite quand même un petit check)
|
||||
- Les secteurs sont en général horribles mais pas toujours. C'est peut-être un soucis de décimale ou des 4 qui se transforment en 1
|
||||
|
||||
J'ai remarqué que les 4 sont souvent pris comme des 1. Peut-être que en ayant des images 4K l'interpolation est un peu différente de ce que j'ai l'habitude de voir.
|
||||
|
||||
Mais donc le plan aujourd'hui c'est de checker tous ces points et les faire fonctionner (youpi...)
|
||||
|
||||
J'ai désactivé toutes les methodes de cette facon :
|
||||
|
||||
```Csharp
|
||||
int sectorCount = 0;
|
||||
DriverData result = new DriverData();
|
||||
foreach(Window w in Windows)
|
||||
{
|
||||
// A switch would be prettier but I dont think its supported in this C# version
|
||||
if (w is DriverNameWindow)
|
||||
//result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList);
|
||||
result.Name = "Unknown";
|
||||
if (w is DriverDrsWindow)
|
||||
//result.DRS = (bool)await (w as DriverDrsWindow).DecodePng();
|
||||
result.DRS = false;
|
||||
if (w is DriverGapToLeaderWindow)
|
||||
//result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng();
|
||||
result.GapToLeader = 0;
|
||||
if (w is DriverLapTimeWindow)
|
||||
//result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng();
|
||||
result.LapTime = 0;
|
||||
if (w is DriverPositionWindow)
|
||||
//result.Position = (int)await (w as DriverPositionWindow).DecodePng();
|
||||
result.Position = 0;
|
||||
if (w is DriverSectorWindow)
|
||||
{
|
||||
sectorCount++;
|
||||
if (sectorCount == 1)
|
||||
//result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng();
|
||||
result.Sector1 = 0;
|
||||
if (sectorCount == 2)
|
||||
//result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng();
|
||||
result.Sector2 = 0;
|
||||
if (sectorCount == 3)
|
||||
//result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng();
|
||||
result.Sector3 = 0;
|
||||
}
|
||||
if (w is DriverTyresWindow)
|
||||
//result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng();
|
||||
result.CurrentTyre = new Tyre(Tyre.Type.Undefined,0);
|
||||
}
|
||||
return result;
|
||||
```
|
||||
|
||||
Le but c'est que ensuite je puisse y aller étape par étape.
|
||||
|
||||
Position :
|
||||
|
||||
Alors pour cette reconnaissance je dirais que la 4K fait des merveilles qui permettent de retirer du processing. La position après un simple Treshold est assez bien reconnue et la dilataion et/ou Erosion ne sont pas nescessaires finalement.
|
||||
|
||||
On va donc pouvoir gagner un certain temps et c'est un bon signe pour la suite.
|
||||
|
||||
On peut aussi noter que quand un pilote est hors course toutes ses valeurs sont grisées et sa position est prise comme un -1
|
||||
|
||||
Sectors, alors j'ai refait toute la partie qui concerne les secteurs et qui les nettoie. Et je me suis rendu compte qu'ils étaient bien souvent juste, le seul truc c'est que ils s'affichent de manière un peu spéciale. En fait dans la page de la F1TV les secteurs peuvent faire plus de 60 secondes sans passer sur un affichage de minutes. Ce qui fait que c'est un peu bizarre à regarder mais c'est parfaitement juste.
|
||||
|
||||
J'ai aussi pu simplifier la reconnaissance grâce à l'image de meilleure qualité et maintenant les temps de secteur sont plutôt corrects.
|
||||
|
||||
En fait le plus long et complexe c'est de prévoir les cas particuliers ou un '.' a été mal interprêté... Et en parlant de ca, je vais aller m'occuper des temps au tour qui ajoutent une couche de complexité avec un '.' ET un ':' qui peuvent être oubliés...
|
||||
|
||||
Oh et j'y pense, un truc malin pourrait être de comparer les temps au tour et les temps de secteur. Ils devraient concorder normalement je pense.
|
||||
|
||||
Ok je viens de finir la gestion des temps au tour... J'ai un code de genre 170 lignes pour juste nettoyer le resultat dans le cas ou des '.' n'ont pas été trouvés ou des ':' ont été n'ont pas été trouvé ou si l'un des deux s'est transformé en chiffre etc.. etc.. etc..
|
||||
|
||||
Le soucis c'est que la maintenant je me rend compte que les écarts entre les pilotes vont juste être un enfer à nettoyer... Ils peuvent aussi bien être "0.760" comme "1:34.456" du coup... je sais pas vraiment comment faire pour tout nettoyer.
|
||||
|
||||
Je pense que je vais juste en avoir rien à faire et tant pis si de temps en temps c'est pas génial.
|
||||
|
||||
Bon du coup j'ai pas pris en compte TOUS les cas possibles mais déja un certain nombre et c'est déja pas mal. Sur les différents Grand Prix d'exemples ca a l'air de plutôt bien tourner !
|
||||
|
||||
Mais ca demande tellement de tests et de code que c'est un peu ridicule...
|
||||
|
||||
La methode "GetTimeFromPng" fait déja presque 430 lignes à cause de tous les cas possibles et tous les try catch. Ca peut paraître peu élégant mais j'ai essayé de mettre des commentaires un peu partout pour permettre à nimporte qui de comprendre ce qui se passe.
|
||||
|
||||
J'ai aussi pu faire les pneus et maintenant (roulement de tambour) Ca marche (presque)
|
||||
|
||||
En fait j'ai des soucis parfois quand les pneus sont un peu cachés dans les permiers tours :
|
||||
|
||||

|
||||
|
||||
Le soucis c'est que du coup le chiffre est un peu illisible... mais je pense que avec l'historique il devrait y avoir moyen de ne pas prendre en compte les chiffres de pneus pendant cinq tours après le changement de pneu ou de simplement tenter de faire les calculs de pneus.
|
||||
|
||||
Pour conclure la journée je pense que je devrais avoir le temps de faire un système qui permet de refresh à volonté.
|
||||
|
||||
Par contre je viens de découvrir que quand un temps de secteur est en couleur on arrive pas à le lire.
|
||||
|
||||
Ah et la detection prend un peu moins de trois secondes sur mon pc je crois. Mais c'est seulement si les driver zones sont faites en même temps mais en faisant ca de temps en temps ca crash et à chaques fois c'est d'un endroit différent du coup je comprend pas vraiment. Sinon ca prend dix secondes.
|
||||
Reference in New Issue
Block a user