From 16d297e0385a95dfb4e500ff43c5e60f4ccb0b7a Mon Sep 17 00:00:00 2001 From: maxluli Date: Fri, 12 May 2023 14:09:01 +0200 Subject: [PATCH] Added to doc --- docs/Images/Screens/CroppedTyres.png | Bin 0 -> 15319 bytes docs/jdb.md | 111 ++++++++++++++++++++++++++- 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 docs/Images/Screens/CroppedTyres.png diff --git a/docs/Images/Screens/CroppedTyres.png b/docs/Images/Screens/CroppedTyres.png new file mode 100644 index 0000000000000000000000000000000000000000..6789817186b6f99b6099e5e201954e2b2a71b21e GIT binary patch literal 15319 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

tTgiZl7&zB64TSO_WP^9SAUxI zV~^DquP1L`4ZPZg@9-p#FLYZN_T$rZn5~wUPHA$Nm|g9ra%+3dw#6u>1!=Q=vO@8S z*J!=X^+iL5{Et`4x0TqQ!bdOJ3-yB^yk_UlpYe)Co69F=`REpHFL+dj=*{LsF#(6} zVyG049*wCx^s&Mx>LJ|nwO!0?y-LUlINi2psh!US1(GFSYC8Qv#*~}bJs_v2sflBf zSc$=^1T-ityYYK5FfcMOpJy1+@Gb=2g?4stw?B*Jx@Cq>oEWn6=g&!V&-)P(I8FXR zOIeSQclhKiX#nJr9|{5Hn7zv!>%jL6uUxrm|NH;^*1rDwnlG}$A{Au9ON8&mF-qW~ zEiiXb&d#ZmLw0hw#~K@|z1zgn(#MY{ZDMj#4$GXLZMX?%PZ1V?YtF+|wtQmN_xM)I z<5fSlzP8?)nj5XVr%PtJ*O&Ux6=FmzddH#L)8b~?zloUiEj`I10!;%ri;GKk^X6^e z9mz22$jGQYelqDEGfh$CMgDMN79jnsyaaN2eP51IB2NYr*sI&u*JbC=@-@&tnaoz@ zX=2{8Px7<;m7^Iru3>F$C7G`cLiTi&ZzabuD6QJs25YQubipwg(b3T+uergUI-EBu z2b;nM2M2u{Yp1$IO6Z)F!zb!E=ZfIpBV1Xr zEeSbJ0TQ1f$~wMtC@;C8iLZLMx{2P|-jX&=`$o6NPndXEu`}n++duzje_|IeoVD)G z4sWNCFkKk60)a4xbfFPGPSln!F1UH)mUsJRW@jW^KIeYZ78lUkXp&R>Ov(wo5&=K= zF-k>n{UTy;PJlS-BnX%IXftggU6`MoeLXwd|=pq^wyh7zh8ZEnQ7(8(4`9C znoheMrt{Lom#K0s+r-4Uo8bqe59J-N`J(!fk$d*^*|URXeL=j*;pYQo=MM%599Mtg z`@xd7dYd7W7(Yc2e_csd?pio*WKN;r^O0zrBIa)~y^I@k6rnR=d)M1!zV923GMu(qd9`d2Sy@@M zwbj+&n2Aw4yX+_kG|~k_$aItH>gv5LwQ{)V6IWGKI!+qckoNd78vTNOZmzC4JC zh02-m2Jav59>5P!tS|*gr2KgKywUrj`;+wAD^5r{&@0rVf5RU-@(OzZ$m}TXObL9l z<~>5hD`q7{^nMWvPL8k~-*FWuR9b0prf)U~C`iFtRtSzrl!McC zxFZpnNtX&?b5F&l;<_9lPi?MWRk$tX9R~Ena3?}>dJchHIe{ddLg36x=)o*HLo@L4 zW$`9L+C-CfW&uN3CSnrUSBNZdghD_I%ypn3ER#v1iRJ!3&v`@u*9FHj@DGC|*&LKY pKT6tw(m%3*lky%(z>aJ7{{UX2>w8?_H4p#*002ovPDHLkV1m8kU}XRR literal 0 HcmV?d00001 diff --git a/docs/jdb.md b/docs/jdb.md index 6c53792..628b4d5 100644 --- a/docs/jdb.md +++ b/docs/jdb.md @@ -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 : + +![Pneus cachés](./Images/Screens/CroppedTyres.png) + +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. \ No newline at end of file