480 lines
24 KiB
HTML
480 lines
24 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html class="no-js" lang="en">
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta content="width=device-width,initial-scale=1" name="viewport"/>
|
||
<meta content="Rohmer Maxime" name="author"/>
|
||
<link href="assets/images/favicon.png" rel="icon"/>
|
||
<meta content="mkdocs-1.4.3, mkdocs-material-8.5.0" name="generator"/>
|
||
<title>Cahier des charges - Documentation Track Trends</title>
|
||
<link href="assets/stylesheets/main.2e8b5541.min.css" rel="stylesheet"/>
|
||
<link href="assets/stylesheets/palette.cbb835fc.min.css" rel="stylesheet"/>
|
||
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
||
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" rel="stylesheet"/>
|
||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||
<link href="assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>html.glightbox-open { overflow: initial; height: 100%; }</style><script src="assets/javascripts/glightbox.min.js"></script></head>
|
||
<body data-md-color-accent="" data-md-color-primary="" data-md-color-scheme="default" dir="ltr">
|
||
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
|
||
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
|
||
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
|
||
<label class="md-overlay" for="__drawer"></label>
|
||
<div data-md-component="skip">
|
||
<a class="md-skip" href="#cahier-des-charges">
|
||
Skip to content
|
||
</a>
|
||
</div>
|
||
<div data-md-component="announce">
|
||
</div>
|
||
<header class="md-header" data-md-component="header">
|
||
<nav aria-label="Header" class="md-header__inner md-grid">
|
||
<a aria-label="Documentation Track Trends" class="md-header__button md-logo" data-md-component="logo" href="index.html" title="Documentation Track Trends">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>
|
||
</a>
|
||
<label class="md-header__button md-icon" for="__drawer">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
|
||
</label>
|
||
<div class="md-header__title" data-md-component="header-title">
|
||
<div class="md-header__ellipsis">
|
||
<div class="md-header__topic">
|
||
<span class="md-ellipsis">
|
||
Documentation Track Trends
|
||
</span>
|
||
</div>
|
||
<div class="md-header__topic" data-md-component="header-topic">
|
||
<span class="md-ellipsis">
|
||
|
||
Cahier des charges
|
||
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<form class="md-header__option" data-md-component="palette">
|
||
<input aria-hidden="true" class="md-option" data-md-color-accent="" data-md-color-media="(prefers-color-scheme: light)" data-md-color-primary="" data-md-color-scheme="default" id="__palette_1" name="__palette" type="radio"/>
|
||
<input aria-hidden="true" class="md-option" data-md-color-accent="" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-primary="" data-md-color-scheme="slate" id="__palette_2" name="__palette" type="radio"/>
|
||
</form>
|
||
<label class="md-header__button md-icon" for="__search">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
|
||
</label>
|
||
<div class="md-search" data-md-component="search" role="dialog">
|
||
<label class="md-search__overlay" for="__search"></label>
|
||
<div class="md-search__inner" role="search">
|
||
<form class="md-search__form" name="search">
|
||
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
|
||
<label class="md-search__icon md-icon" for="__search">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
|
||
</label>
|
||
<nav aria-label="Search" class="md-search__options">
|
||
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"></path></svg>
|
||
</button>
|
||
</nav>
|
||
</form>
|
||
<div class="md-search__output">
|
||
<div class="md-search__scrollwrap" data-md-scrollfix="">
|
||
<div class="md-search-result" data-md-component="search-result">
|
||
<div class="md-search-result__meta">
|
||
Initializing search
|
||
</div>
|
||
<ol class="md-search-result__list"></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
</header>
|
||
<div class="md-container" data-md-component="container">
|
||
<main class="md-main" data-md-component="main">
|
||
<div class="md-main__inner md-grid">
|
||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
<nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
|
||
<label class="md-nav__title" for="__drawer">
|
||
<a aria-label="Documentation Track Trends" class="md-nav__button md-logo" data-md-component="logo" href="index.html" title="Documentation Track Trends">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>
|
||
</a>
|
||
Documentation Track Trends
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="index.html">
|
||
Rapport Track Trends V1.0
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--active">
|
||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" id="__toc" type="checkbox"/>
|
||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||
Cahier des charges
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<a class="md-nav__link md-nav__link--active" href="CahierDesCharges.html">
|
||
Cahier des charges
|
||
</a>
|
||
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#contexte">
|
||
Contexte
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#projet">
|
||
Projet
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#realisation">
|
||
Réalisation
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#cas-dutilisation">
|
||
Cas d'utilisation
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#difficultes-techniques">
|
||
Difficultés techniques
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="jdb.html">
|
||
Journal de bord
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" id="__nav_4" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_4">
|
||
Code
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-label="Code" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_4">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Code
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/ConfigurationTool.html">
|
||
ConfigurationTool.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverGapToLeaderWindow.html">
|
||
DriverGapToLeaderWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverPositionWindow.html">
|
||
DriverPositionWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/F1TVEmulator.html">
|
||
F1TVEmulator.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Program.html">
|
||
Program.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Window.html">
|
||
Window.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverData.html">
|
||
DriverData.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverLapTimeWindow.html">
|
||
DriverLapTimeWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverSectorWindow.html">
|
||
DriverSectorWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Form1.html">
|
||
Form1.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Reader.html">
|
||
Reader.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Zone.html">
|
||
Zone.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverDrsWindow.html">
|
||
DriverDrsWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverNameWindow.html">
|
||
DriverNameWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/DriverTyresWindow.html">
|
||
DriverTyresWindow.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/OcrImage.html">
|
||
OcrImage.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/Settings.html">
|
||
Settings.cs
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="Code/recoverCookiesCSV.html">
|
||
recoverCookiesCSV.py
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#contexte">
|
||
Contexte
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#projet">
|
||
Projet
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#realisation">
|
||
Réalisation
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#cas-dutilisation">
|
||
Cas d'utilisation
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#difficultes-techniques">
|
||
Difficultés techniques
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="md-content" data-md-component="content">
|
||
<article class="md-content__inner md-typeset">
|
||
<h1 id="cahier-des-charges">Cahier des charges</h1>
|
||
<p>Cahier des charges "Track Trends" Travail de diplôme Maxime Rohmer 2023</p>
|
||
<h2 id="contexte">Contexte</h2>
|
||
<hr/>
|
||
<p>Je suis le "Live Ticker" chargé de la Formule 1 pour le 20 minutes. On peut traduire cela comme commentateur de F1, avec tout de même l'importante subtilité que je ne commente pas avec la voix, mais avec le clavier. Mes commentaires sont sous la forme de commentaires écrits live qui s'ajoutent au fur et à mesure de l'évènement.
|
||
Par exemple : "Tour 28/54, Hamilton a fini par s'arrêter et chausser des gommes tendres 13 tours après Verstappen. L'Anglais va voir plus de 15 secondes à rattraper, mais les gommes neuves et plus tendres que son rival devraient lui permettre s'il ne se fait pas trop ralentir par le trafic". En général avec un peu plus d'infos quand même et cela tous les 3-4 tours </p>
|
||
<p>Voici quelques exemples de précédents commentaires (Conseil : il y a un bouton pour montrer le feed dans l'ordre chronologique) :</p>
|
||
<ul>
|
||
<li><a href="https://www.20min.ch/fr/story/les-leaders-du-championnat-en-fond-de-grille-937035758708">"Commentaire Grand Prix de Belgique 2022"</a></li>
|
||
<li><a href="https://www.20min.ch/fr/story/singapour-sous-la-pluie-depart-repousse-432150037887">"Commentaire du Grand Prix de Singapour 2022"</a></li>
|
||
</ul>
|
||
<figure class="figure-image">
|
||
<a class="glightbox" href="./Images/Screens/ExampleLiveTicker.png"><img alt="" commentaires""="" exemple="" src="./Images/Screens/ExampleLiveTicker.png"/></a>
|
||
<figcaption>"Exemple commentaires"</figcaption>
|
||
</figure>
|
||
<p>Pendant un Grand Prix, je dois constamment :</p>
|
||
<ul>
|
||
<li>Écrire ce qu'il se passe dans le grand prix et expliquer les enjeux</li>
|
||
<li>Chercher régulièrement des médias à inclure pour diversifier mon live (Tweets, Images etc.)</li>
|
||
<li>Changer le titre et la description du live en fonction de l'évolution du Grand prix</li>
|
||
<li>Et accessoirement regarder le grand prix pour y comprendre quelque chose</li>
|
||
</ul>
|
||
<p>Avec tout ça, il est très difficile de garder un œil sur la page DATA de la F1TV qui fournit pourtant des informations précieuses.</p>
|
||
<p>Je me retrouve parfois par exemple à ne pas parler de dépassements dans le peloton, car ils ne sont pas retransmis à la télé alors que c'est une information importante. Autre exemple, occasionnellement le classement ne reflète pas les vraies positions des pilotes. Les arrêts aux stands font que du coup des pilotes qui devraient être 15èmes se retrouvent 8ᵉ puisqu'ils ne sont pas encore arrêtés. Cela peut de temps en temps prêter à confusion.</p>
|
||
<h2 id="projet">Projet</h2>
|
||
<hr/>
|
||
<p>Un outil de style compagnon sous forme d'application C# Windows Form qui récupère en temps réel les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'améliorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS.</p>
|
||
<p>Exemples:</p>
|
||
<ul>
|
||
<li>Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre).</li>
|
||
<li>Les pilotes qui améliorent leur temps au tour et ceux qui perdent le plus de temps</li>
|
||
<li>Le classement pondéré tenant compte des futurs arrêts au stand</li>
|
||
</ul>
|
||
<p>Maintenant afficher différemment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites prédictions.</p>
|
||
<p>Exemples : </p>
|
||
<ul>
|
||
<li>Prédire les arrêts aux stands en prenant en compte les baisses de performances des pneus</li>
|
||
<li>Prédire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour</li>
|
||
<li>Prédire dans combien de tour tel pilote va rattraper tel autre pilote</li>
|
||
<li>Prédire combien de temps le pilote va perdre dans les stands en fonctions des arrêts précédents</li>
|
||
</ul>
|
||
<h2 id="realisation">Réalisation</h2>
|
||
<p>Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet "simplement".
|
||
La raison la plus probable étant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux télévisé et il doit y avoir un contrat d'exclusivité.</p>
|
||
<p>Il existe des API "Pirates" faites par la communauté, le problème est qu'elles ne sont pas forcément des plus pratiques à utiliser.</p>
|
||
<p>Mais comme je possède un abonnement premium ++ à la F1TV, j'ai accès pour chaque grand prix à un flux vidéo nommé : DATA F1 CHANNEL</p>
|
||
<p>Qui ressemble à ça :</p>
|
||
<figure class="figure-image">
|
||
<a class="glightbox" href="./Images/Screens/Formula1DataChannel.png"><img alt="" channel="" data="" exemple""="" src="./Images/Screens/Formula1DataChannel.png"/></a>
|
||
<figcaption>"Data channel exemple"</figcaption>
|
||
</figure>
|
||
<p>Donc la seule façon que je vois de récupérer ces données est de les prendre directement sur ce feed.</p>
|
||
<p>Même si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout être la récupération des données et leur stockage.</p>
|
||
<p>Les données viennent du flux vidéo et ainsi dans un premier temps, il va falloir récupérer d'une manière ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion.</p>
|
||
<p>Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie prévue pour (exemple Tesseract) et vérifier l'intégrité de ces dernières pour qu'on puisse ensuite les stocker.</p>
|
||
<p>Dans un troisième temps, il faut stocker toutes ces données dans une forme qui permette d'aller facilement faire des requêtes de récupération et déjà préparer des méthodes qui permettent de récupérer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arrêt etc.) pour faciliter la dernière étape</p>
|
||
<p>Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data.</p>
|
||
<p>La dernière étape est donc l'affichage. L'idée est de créer une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce à quoi l'application pourrait ressembler)</p>
|
||
<p>Voici la liste des données qui pourraient être affichées (Non contractuel, simplement des idées).</p>
|
||
<ul>
|
||
<li>Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre).</li>
|
||
<li>Les pilotes qui améliorent leur temps au tour et ceux qui perdent le plus de temps</li>
|
||
<li>Le classement pondéré tenant compte des futurs arrêts au stand</li>
|
||
<li>La moyenne de temps que les pilotes perdent dans les stands</li>
|
||
<li>La performance moyenne des 5 types de pneus</li>
|
||
<li>La moyenne de temps de chaque pilote sur le pneu actuel</li>
|
||
<li>Le nombre de points que chaque pilote gagnerait selon sa position</li>
|
||
<li>Le classement de la course</li>
|
||
</ul>
|
||
<p>Voire même si c'est possible :</p>
|
||
<ul>
|
||
<li>Prédire les arrêts aux stands en prenant en compte les baisses de performances des pneus</li>
|
||
<li>Prédire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour</li>
|
||
<li>Prédire dans combien de tour tel pilote va rattraper tel autre pilote</li>
|
||
<li>Prédire combien de temps le pilote va perdre dans les stands en fonctions des arrêts précédents</li>
|
||
<li>Prédire les temps au tour de chaque pilote selon l'usure des pneus</li>
|
||
</ul>
|
||
<p>Voici un exemple d'interface possible pour une page :</p>
|
||
<figure class="figure-image">
|
||
<a class="glightbox" href="./Images/Figma/Prototype.png"><img alt="" proto""="" src="./Images/Figma/Prototype.png"/></a>
|
||
<figcaption>"Proto"</figcaption>
|
||
</figure>
|
||
<h2 id="cas-dutilisation">Cas d'utilisation</h2>
|
||
<hr/>
|
||
<p>*On va considérer que tous les user ont un abonnement F1 TV PRO</p>
|
||
<p>Un user veut récupérer les data :</p>
|
||
<ul>
|
||
<li>Il ouvre son navigateur et lance la page DATA de la F1 TV</li>
|
||
<li>Il calibre la capture des data via le programme (pour la première utilisation).</li>
|
||
<li>Il confirme que les données initiales sont bonnes (pour la première utilisation).</li>
|
||
<li>Il regarde tranquille son Grand Prix</li>
|
||
</ul>
|
||
<p>Le programme récupère les data :</p>
|
||
<ul>
|
||
<li>Il récupère des images depuis la F1TV</li>
|
||
<li>Il utilise Tesseract (ou autre) pour en récupérer les infos.</li>
|
||
<li>Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hiérarchiser les data</li>
|
||
</ul>
|
||
<p>Pour ce qui est de l'affichage, l'idée est de faire une application C# comme on l'a appris à l'école, mais avec assez de style pour qu'elle puisse être agréable à utiliser.</p>
|
||
<p>Quand le programme affiche les data :</p>
|
||
<ul>
|
||
<li>Il prend les données venant directement de la F1TV.</li>
|
||
<li>Il affiche différemment les données pour permettre une meilleure lisibilité</li>
|
||
<li>Il interprète avec des règles plutôt simples certaines data pour faire des miniprédictions ou aider à la lecture</li>
|
||
<li>Il récupère des infos d'autres courses pour les comparer et proposer des prédictions plus intéressantes</li>
|
||
</ul>
|
||
<h2 id="difficultes-techniques">Difficultés techniques</h2>
|
||
<hr/>
|
||
<ul>
|
||
<li>Récupérer un flux vidéo plutôt propre malgré les contres mesures de la F1 TV pour en empêcher la lecture par un logiciel</li>
|
||
<li>Si on doit passer par une capture d'écran, trouver un moyen de stocker les données de manière à prévoir que parfois un tour pourrait avoir plus de données qu'un autre, que le user peut mettre pause, ou même qu’il revienne en arrière.</li>
|
||
<li>Développer des algorithmes pour récupérer les données comme les différents pneus utilisés ou l'activation du DRS ainsi que développer des moyens de nettoyer les résultats de l'OCR (Par exemple utiliser différents champs redondants pour comparer les résultats)</li>
|
||
<li>Stocker les données sur une base pour les traiter plus tard tout en prévoyant un moyen de voir les stats live</li>
|
||
<li>Développer des algorithmes de prédiction qui prennent en compte d'anciennes courses pour tenter de prédire des choses comme les arrêts aux stands par exemple.</li>
|
||
</ul>
|
||
</article>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
<footer class="md-footer">
|
||
<nav aria-label="Footer" class="md-footer__inner md-grid">
|
||
<a aria-label="Previous: Rapport Track Trends V1.0" class="md-footer__link md-footer__link--prev" href="index.html" rel="prev">
|
||
<div class="md-footer__button md-icon">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
|
||
</div>
|
||
<div class="md-footer__title">
|
||
<div class="md-ellipsis">
|
||
<span class="md-footer__direction">
|
||
Previous
|
||
</span>
|
||
Rapport Track Trends V1.0
|
||
</div>
|
||
</div>
|
||
</a>
|
||
<a aria-label="Next: Journal de bord" class="md-footer__link md-footer__link--next" href="jdb.html" rel="next">
|
||
<div class="md-footer__title">
|
||
<div class="md-ellipsis">
|
||
<span class="md-footer__direction">
|
||
Next
|
||
</span>
|
||
Journal de bord
|
||
</div>
|
||
</div>
|
||
<div class="md-footer__button md-icon">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"></path></svg>
|
||
</div>
|
||
</a>
|
||
</nav>
|
||
<div class="md-footer-meta md-typeset">
|
||
<div class="md-footer-meta__inner md-grid">
|
||
<div class="md-copyright">
|
||
<div class="md-copyright__highlight">
|
||
©CFPTI Tech2
|
||
</div>
|
||
|
||
|
||
Made with
|
||
<a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
|
||
Material for MkDocs
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
<div class="md-dialog" data-md-component="dialog">
|
||
<div class="md-dialog__inner md-typeset"></div>
|
||
</div>
|
||
<script id="__config" type="application/json">{"base": ".", "features": [], "search": "assets/javascripts/workers/search.ecf98df9.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||
<script src="assets/javascripts/bundle.48f2be22.min.js"></script>
|
||
<script>document$.subscribe(() => {const lightbox = GLightbox({"touchNavigation": true, "loop": false, "width": "100%", "height": "auto", "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom"});})</script></body>
|
||
</html> |