<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vision Par Ordinateur on Boris Dupoux</title><link>https://borisdupoux.com/fr/categories/vision-par-ordinateur/</link><description>Recent content in Vision Par Ordinateur on Boris Dupoux</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Thu, 01 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://borisdupoux.com/fr/categories/vision-par-ordinateur/index.xml" rel="self" type="application/rss+xml"/><item><title>Analyse vidéo géolocalisée et mesure des distances entre objets</title><link>https://borisdupoux.com/fr/research/video-geolocation/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://borisdupoux.com/fr/research/video-geolocation/</guid><description>&lt;h2 id="contexte"&gt;&lt;a href="#contexte" class="header-anchor"&gt;&lt;/a&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Les sites industriels sont souvent couverts par des caméras fixes dont les images ne sont consultées qu&amp;rsquo;après un incident et ne produisent aucune donnée exploitable. L&amp;rsquo;objectif était de transformer les caméras existantes, ainsi que des prises de vue ponctuelles par drone, en instrument de mesure : pour chaque objet détecté, une position en latitude/longitude et des distances métriques plutôt qu&amp;rsquo;une boîte en pixels.&lt;/p&gt;
&lt;p&gt;La difficulté tient à trois raisons. Une caméra unique ne donne pas de profondeur, si bien que l&amp;rsquo;échelle de la scène doit être inférée. La méthode de géoréférencement habituelle, une homographie du plan du sol, suppose un sol plat et échoue silencieusement pour les objets surélevés ou les terrains irréguliers. Enfin, la vidéo haute résolution est coûteuse à traiter, et le raccourci courant consistant à réduire l&amp;rsquo;image à 640 px élimine le détail géométrique dont dépendent les positions au sol.&lt;/p&gt;
&lt;h2 id="approche"&gt;&lt;a href="#approche" class="header-anchor"&gt;&lt;/a&gt;Approche
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 A["Source vidéo&lt;br/&gt;fichier · RTSP · séquence drone (jusqu'à 3840×2160)"] --&gt; B["Détecteur d'objets en résolution native&lt;br/&gt;détection · segmentation · pose · OBB"]
 A --&gt; C["Modèle de profondeur monoculaire métrique&lt;br/&gt;carte de profondeur"]
 B --&gt; D["Suivi multi-objets&lt;br/&gt;modèle de mouvement + association"]
 B --&gt; E["Profondeur par objet&lt;br/&gt;pixels du masque, rejet des aberrants"]
 C --&gt; E
 E --&gt; F["Lancer de rayon&lt;br/&gt;rayon pixel + profondeur métrique + pose caméra"]
 F --&gt; G["Position WGS84&lt;br/&gt;MNT optionnel pour l'altitude du sol"]
 E --&gt; H["Distances 3D&lt;br/&gt;entre masques · le long des trajectoires"]
 D --&gt; H
 G --&gt; I["Stockage SQLite&lt;br/&gt;détections · pistes · trajectoires GPS"]
 H --&gt; I
 I --&gt; J["Analyses&lt;br/&gt;zones · flux · superposition sur orthophoto"]&lt;/pre&gt;&lt;h2 id="méthodes"&gt;&lt;a href="#m%c3%a9thodes" class="header-anchor"&gt;&lt;/a&gt;Méthodes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Détection.&lt;/strong&gt; Un détecteur de la famille YOLO, en plusieurs tailles de modèle, dans quatre modes (détection, segmentation, pose, boîtes orientées). L&amp;rsquo;inférence s&amp;rsquo;exécute en résolution native, sans &lt;code&gt;imgsz&lt;/code&gt; imposé. La segmentation est le mode par défaut, car les masques fournissent des échantillons de profondeur plus propres que les boîtes. Les poids PyTorch, ONNX, TensorRT et CoreML sont acceptés (CUDA et Apple MPS).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profondeur monoculaire.&lt;/strong&gt; Un modèle de profondeur monoculaire métrique prédit une carte de profondeur, rééchantillonnée à la taille de l&amp;rsquo;image. La profondeur de chaque objet est une estimation robuste sur les pixels de son masque, après rejet des valeurs aberrantes. Une étape de validation compare la profondeur prédite à des zones de référence dont la distance est connue, afin de détecter une dérive de calibration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Géolocalisation par lancer de rayon.&lt;/strong&gt; Un rayon est lancé depuis le centre de la caméra à travers le pixel de l&amp;rsquo;objet et arrêté à la profondeur métrique de celui-ci. Le point obtenu est converti du repère caméra vers un repère local Nord-Est-Bas, puis en WGS84. Contrairement à une homographie, cette méthode ne suppose pas un sol plat. Un MNT optionnel fournit l&amp;rsquo;altitude du sol. Les positions peuvent être superposées à une orthophoto géoréférencée pour un contrôle visuel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suivi.&lt;/strong&gt; Un module de suivi multi-objets sur mesure, avec un modèle de mouvement, une association tenant compte de la confiance et une étape de fusion des pistes qui relie les fragments selon des seuils d&amp;rsquo;intervalle, de cap et de vitesse. Lorsque la profondeur est disponible, chaque piste conserve une trajectoire 3D, dont sont déduites la distance parcourue et la vitesse en m/s.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distances entre objets.&lt;/strong&gt; Fonction consolidée ultérieurement dans une bibliothèque de vision réutilisable. Deux objets segmentés sont rétroprojetés en 3D, et la distance minimale point à point est retournée. Des masques qui se chevauchent sont considérés comme en contact. Une simulation de Monte-Carlo perturbe la profondeur, la focale et les positions des pixels pour fournir un écart-type et un intervalle à 95 %. L&amp;rsquo;appartenance à une zone repose sur la part du masque située dans la zone, avec hystérésis, plutôt que sur un test du point central.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ingénierie.&lt;/strong&gt; La configuration permet une répartition sur deux GPU (détection sur un périphérique, estimation de la profondeur sur l&amp;rsquo;autre), la découverte et l&amp;rsquo;enregistrement de flux RTSP, ainsi que le traitement de plusieurs caméras en parallèle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="résultats"&gt;&lt;a href="#r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;Résultats
&lt;/h2&gt;&lt;p&gt;Mesures effectuées sur une seule NVIDIA RTX 5090. Le banc d&amp;rsquo;essai de détection ne couvre que la détection et le suivi, profondeur désactivée.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Configuration&lt;/th&gt;
					&lt;th&gt;Vidéo&lt;/th&gt;
					&lt;th&gt;Débit&lt;/th&gt;
					&lt;th&gt;Sortie&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Plus gros détecteur, batch 1&lt;/td&gt;
					&lt;td&gt;3840×2160, 50 fps, 3 301 images&lt;/td&gt;
					&lt;td&gt;5,1 fps&lt;/td&gt;
					&lt;td&gt;320 217 détections, 1 941 pistes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Plus petit détecteur, batch 1&lt;/td&gt;
					&lt;td&gt;3840×2160, 50 fps&lt;/td&gt;
					&lt;td&gt;13,0 fps&lt;/td&gt;
					&lt;td&gt;158 989 détections, 908 pistes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Plus gros détecteur, batch 1&lt;/td&gt;
					&lt;td&gt;2304×1296, 15 fps, 5 000 images&lt;/td&gt;
					&lt;td&gt;17,9 fps&lt;/td&gt;
					&lt;td&gt;73 502 détections, 2 706 pistes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Plus petit détecteur, batch 1&lt;/td&gt;
					&lt;td&gt;2304×1296, 15 fps&lt;/td&gt;
					&lt;td&gt;39,0 fps&lt;/td&gt;
					&lt;td&gt;51 890 détections, 1 499 pistes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Chaîne complète (détection + profondeur + suivi + stockage)&lt;/td&gt;
					&lt;td&gt;2304×1296, 300 images&lt;/td&gt;
					&lt;td&gt;2,02 fps&lt;/td&gt;
					&lt;td&gt;12,3 détections par image&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Sur l&amp;rsquo;exécution de la chaîne complète, l&amp;rsquo;estimation de la profondeur a pris 117,6 s sur 148,3 s au total (environ 80 %), et la détection 20,9 s. Le goulot d&amp;rsquo;étranglement est l&amp;rsquo;estimation de la profondeur, et non le détecteur. Sur des vidéos 4K, le plus gros détecteur tourne environ dix fois plus lentement que le temps réel. Cela convient à l&amp;rsquo;usage visé, à savoir l&amp;rsquo;analyse d&amp;rsquo;archives enregistrées et non l&amp;rsquo;alerte en direct.&lt;/p&gt;
&lt;h2 id="limites--suite"&gt;&lt;a href="#limites--suite" class="header-anchor"&gt;&lt;/a&gt;Limites &amp;amp; suite
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Aucune précision de géolocalisation n&amp;rsquo;a encore été mesurée par rapport à une vérité terrain levée. L&amp;rsquo;étape de lancer de rayon a été ajoutée après les mesures de temps ci-dessus ; son coût n&amp;rsquo;y est donc pas inclus.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;échelle métrique dépend du modèle de profondeur ainsi que de la pose et des paramètres intrinsèques de la caméra. Les erreurs d&amp;rsquo;inclinaison ou de focale se répercutent directement sur les positions au sol.&lt;/li&gt;
&lt;li&gt;Le modèle de profondeur prédit à sa propre résolution interne : le détail fin de la profondeur reste limité, même lorsque la détection s&amp;rsquo;exécute en 4K.&lt;/li&gt;
&lt;li&gt;Suite : une étude de précision avec des cibles levées au GNSS, le profilage de la répartition sur deux GPU, et la mesure de la justesse des intervalles de distance Monte-Carlo sur des objets à écartements connus.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stack-technique"&gt;&lt;a href="#stack-technique" class="header-anchor"&gt;&lt;/a&gt;Stack technique
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Python&lt;/code&gt; · &lt;code&gt;PyTorch&lt;/code&gt; · &lt;code&gt;OpenCV&lt;/code&gt; · &lt;code&gt;NumPy&lt;/code&gt; · &lt;code&gt;SciPy&lt;/code&gt; · &lt;code&gt;pyproj&lt;/code&gt; · &lt;code&gt;rasterio&lt;/code&gt; · &lt;code&gt;SQLite&lt;/code&gt; · &lt;code&gt;CUDA&lt;/code&gt; · &lt;code&gt;Apple MPS&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Détection de fissures submillimétriques sur ouvrages de génie civil</title><link>https://borisdupoux.com/fr/research/crack-detection/</link><pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate><guid>https://borisdupoux.com/fr/research/crack-detection/</guid><description>&lt;h2 id="contexte"&gt;&lt;a href="#contexte" class="header-anchor"&gt;&lt;/a&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Surveillance non destructive de l&amp;rsquo;état des ponts, bâtiments et infrastructures.
L&amp;rsquo;enjeu n&amp;rsquo;est pas seulement de &lt;strong&gt;détecter&lt;/strong&gt; les fissures, mais de les &lt;strong&gt;classer
selon leur ouverture&lt;/strong&gt; — sans contact ni échafaudage.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est l&amp;rsquo;ouverture qui compte pour l&amp;rsquo;inspection : selon la largeur d&amp;rsquo;une fissure,
&lt;strong&gt;la méthode de réparation (de remplissage) n&amp;rsquo;est pas la même&lt;/strong&gt;. Un système
d&amp;rsquo;inspection doit donc être très précis, car une mauvaise classe d&amp;rsquo;ouverture
conduit à une mauvaise prescription de réparation.&lt;/p&gt;
&lt;h2 id="quatre-classes-douverture"&gt;&lt;a href="#quatre-classes-douverture" class="header-anchor"&gt;&lt;/a&gt;Quatre classes d&amp;rsquo;ouverture
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Classe&lt;/th&gt;
					&lt;th&gt;Ouverture&lt;/th&gt;
					&lt;th&gt;Conséquence&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;&amp;lt; 0,3 mm&lt;/td&gt;
					&lt;td&gt;Fissures les plus fines — souvent plus étroites qu&amp;rsquo;un pixel ; réparation spécifique&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;0,3 – 0,7 mm&lt;/td&gt;
					&lt;td&gt;Méthode de réparation différente&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;0,7 – 1 mm&lt;/td&gt;
					&lt;td&gt;Méthode de réparation différente&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;≥ 1 mm&lt;/td&gt;
					&lt;td&gt;Méthode de réparation différente&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chaque classe appelle sa propre méthode de remplissage ou de réparation : la
classification conditionne donc directement la décision de maintenance.&lt;/p&gt;
&lt;h2 id="le-défi-du-sous-pixel"&gt;&lt;a href="#le-d%c3%a9fi-du-sous-pixel" class="header-anchor"&gt;&lt;/a&gt;Le défi du sous-pixel
&lt;/h2&gt;&lt;p&gt;La principale difficulté est de descendre &lt;strong&gt;sous la taille du pixel&lt;/strong&gt;. Une
fissure de 0,3 mm ne couvre même pas un pixel entier aux résolutions
d&amp;rsquo;inspection courantes — et le système doit pourtant la détecter, même lorsque
la résolution au sol est un peu plus grossière que 0,3 mm.&lt;/p&gt;
&lt;p&gt;Pourquoi est-ce possible ? Une fissure plus fine qu&amp;rsquo;un pixel ne disparaît pas :
elle occupe &lt;strong&gt;une partie&lt;/strong&gt; des pixels qu&amp;rsquo;elle traverse et modifie légèrement leur
intensité par rapport à la surface environnante. Pris isolément, ce signal de
pixel partiel est faible ; mais une fissure est un élément &lt;strong&gt;continu et allongé&lt;/strong&gt; :
le même contraste ténu se répète de façon cohérente sur de nombreux pixels
voisins. C&amp;rsquo;est en exploitant ce contraste et cette continuité qu&amp;rsquo;on peut détecter
la fissure — et estimer son ouverture — au-delà de la résolution nominale de l&amp;rsquo;image.&lt;/p&gt;
&lt;h2 id="acquisition--drone-et-smartphone"&gt;&lt;a href="#acquisition--drone-et-smartphone" class="header-anchor"&gt;&lt;/a&gt;Acquisition : drone et smartphone
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Photographie par drone&lt;/strong&gt; — acquisition haute résolution des surfaces des
ouvrages, pour les structures étendues ou difficiles d&amp;rsquo;accès.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Photographie au smartphone&lt;/strong&gt; — l&amp;rsquo;approche fonctionne aussi sur des images
prises au téléphone portable, ce que j&amp;rsquo;ai testé, ce qui permet une inspection
rapprochée avec un équipement courant.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="chaîne-de-traitement"&gt;&lt;a href="#cha%c3%aene-de-traitement" class="header-anchor"&gt;&lt;/a&gt;Chaîne de traitement
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 A["Prise de vue — drone ou smartphone"] --&gt; B["Découpage en tuiles &amp; calibration"]
 B --&gt; C["Segmentation des fissures — CV / DL"]
 C --&gt; D["Estimation sous-pixel de l'ouverture"]
 D --&gt; E["Classification de l'ouverture — 4 classes"]
 E --&gt; F["Carte des défauts &amp; rapport d'inspection"]&lt;/pre&gt;&lt;h2 id="méthodes"&gt;&lt;a href="#m%c3%a9thodes" class="header-anchor"&gt;&lt;/a&gt;Méthodes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Acquisition haute résolution des surfaces des ouvrages par drone ou smartphone.&lt;/li&gt;
&lt;li&gt;Segmentation des fissures par vision par ordinateur / apprentissage profond sur béton et maçonnerie.&lt;/li&gt;
&lt;li&gt;Calibration métrique et analyse &lt;strong&gt;sous-pixel&lt;/strong&gt; pour l&amp;rsquo;estimation de l&amp;rsquo;ouverture des fissures.&lt;/li&gt;
&lt;li&gt;Classification en quatre classes d&amp;rsquo;ouverture associées aux méthodes de réparation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="résultats"&gt;&lt;a href="#r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;Résultats
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Inspection non destructive et reproductible des ouvrages de génie civil.&lt;/li&gt;
&lt;li&gt;Cartes de défauts géolocalisées pour hiérarchiser les interventions de maintenance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Modèles et visuels à venir.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="stack-technique"&gt;&lt;a href="#stack-technique" class="header-anchor"&gt;&lt;/a&gt;Stack technique
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Python&lt;/code&gt; · &lt;code&gt;OpenCV&lt;/code&gt; · apprentissage profond · drone RVB haute résolution · imagerie smartphone · photogrammétrie&lt;/p&gt;</description></item></channel></rss>