{"id":6176,"date":"2026-08-24T19:51:06","date_gmt":"2026-08-24T17:51:06","guid":{"rendered":"https:\/\/gpmfactory.com\/?p=6176"},"modified":"2026-08-24T19:59:03","modified_gmt":"2026-08-24T17:59:03","slug":"radar-arriere-pour-pieton","status":"publish","type":"post","link":"https:\/\/gpmfactory.com\/index.php\/2026\/08\/24\/radar-arriere-pour-pieton\/","title":{"rendered":"Radar arri\u00e8re pour Pi\u00e9ton"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Radar Pi\u00e9ton : d&rsquo;un capteur radar \u00e0 la reconnaissance d&rsquo;image en temps r\u00e9el<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le point de d\u00e9part<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;id\u00e9e initiale \u00e9tait simple : permettre \u00e0 un pi\u00e9ton de savoir si un v\u00e9lo, une trottinette ou un cycliste approche par l&rsquo;arri\u00e8re, sans avoir \u00e0 se retourner r\u00e9guli\u00e8rement. Le cas d&rsquo;usage vis\u00e9 \u00e9tait la marche ou la course sur des voies partag\u00e9es, o\u00f9 un usager plus rapide peut arriver sans que le pi\u00e9ton l&rsquo;entende ou l&rsquo;anticipe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re piste envisag\u00e9e reprenait le principe des radars d\u00e9j\u00e0 utilis\u00e9s c\u00f4t\u00e9 cyclistes, comme le Garmin Varia : un capteur mont\u00e9 \u00e0 l&rsquo;arri\u00e8re qui d\u00e9tecte les v\u00e9hicules approchants et d\u00e9clenche une alerte progressive selon la distance. L&rsquo;objectif \u00e9tait d&rsquo;adapter cette logique \u00e0 un usage pi\u00e9ton, avec un budget et une complexit\u00e9 de fabrication r\u00e9duits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exploration des capteurs radar, ultrason et LiDAR<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Plusieurs familles de capteurs ont \u00e9t\u00e9 test\u00e9es ou \u00e9valu\u00e9es pour cette premi\u00e8re approche :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ultrason (HC-SR04)<\/strong> : peu co\u00fbteux et simple \u00e0 mettre en \u0153uvre, mais avec une port\u00e9e et un angle de d\u00e9tection trop limit\u00e9s pour capter un objet en approche rapide \u00e0 plusieurs m\u00e8tres de distance.<\/li>\n\n\n\n<li><strong>Radar Doppler (RCWL-0516)<\/strong> : d\u00e9tecte le mouvement mais ne fournit aucune information de distance ni de direction, ce qui le rend inutilisable pour distinguer un objet qui s&rsquo;approche d&rsquo;un simple mouvement lat\u00e9ral (pi\u00e9ton croisant, feuillage, etc.).<\/li>\n\n\n\n<li><strong>Radar mmWave (HLK-LD2410 \/ LD2450)<\/strong> : plus prometteur, avec une d\u00e9tection de pr\u00e9sence et de mouvement plus fine, mais une port\u00e9e et une r\u00e9solution angulaire qui restaient insuffisantes pour un usage fiable en ext\u00e9rieur \u00e0 faible co\u00fbt.<\/li>\n\n\n\n<li><strong>LiDAR (TF-Luna)<\/strong> : bonne pr\u00e9cision de distance sur un axe, mais un champ de d\u00e9tection ponctuel (un seul point, pas une zone), ce qui aurait n\u00e9cessit\u00e9 un m\u00e9canisme de balayage pour couvrir un angle utile derri\u00e8re le pi\u00e9ton.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aucune de ces solutions, prise isol\u00e9ment et \u00e0 ce niveau de budget, n&rsquo;offrait le compromis n\u00e9cessaire entre port\u00e9e, angle de couverture et fiabilit\u00e9 en conditions r\u00e9elles de marche. Le choix s&rsquo;est donc port\u00e9 vers une approche diff\u00e9rente : utiliser une cam\u00e9ra et un traitement d&rsquo;image, plut\u00f4t qu&rsquo;un capteur de distance d\u00e9di\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le changement d&rsquo;approche : cam\u00e9ra et intelligence artificielle embarqu\u00e9e<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le nouveau principe repose sur l&rsquo;utilisation de la cam\u00e9ra d&rsquo;un smartphone, associ\u00e9e \u00e0 un mod\u00e8le de reconnaissance d&rsquo;objets ex\u00e9cut\u00e9 directement sur l&rsquo;appareil, sans envoi d&rsquo;image vers un serveur distant. Le projet a pris la forme d&rsquo;une PWA (Progressive Web App), h\u00e9berg\u00e9e sur GitHub Pages, utilisant TensorFlow.js et le mod\u00e8le pr\u00e9-entra\u00een\u00e9 COCO-SSD (variante l\u00e9g\u00e8re <code>lite_mobilenet_v2<\/code>) pour analyser en continu le flux de la cam\u00e9ra arri\u00e8re du t\u00e9l\u00e9phone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le principe de fonctionnement retenu est le suivant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la cam\u00e9ra du t\u00e9l\u00e9phone, port\u00e9e dans le dos, filme en continu ;<\/li>\n\n\n\n<li>chaque image est r\u00e9duite et analys\u00e9e par le mod\u00e8le de d\u00e9tection d&rsquo;objets ;<\/li>\n\n\n\n<li>la taille de la silhouette d\u00e9tect\u00e9e dans l&rsquo;image, et sa vitesse de grossissement d&rsquo;une image \u00e0 l&rsquo;autre, servent de proxy pour estimer la proximit\u00e9 et la vitesse de rapprochement d&rsquo;un objet ;<\/li>\n\n\n\n<li>selon ces valeurs, l&rsquo;application d\u00e9clenche une alerte progressive (vibration, son, puis annonce vocale).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cette approche ne mesure pas de distance r\u00e9elle au sens strict : elle s&rsquo;appuie sur un mod\u00e8le g\u00e9om\u00e9trique simplifi\u00e9 (une projection de type st\u00e9nop\u00e9), en supposant une taille humaine moyenne et un champ de vision de cam\u00e9ra connu, pour convertir la taille apparente d&rsquo;une personne dans l&rsquo;image en une distance approximative, puis en une vitesse de rapprochement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Premiers ajustements apr\u00e8s tests de terrain<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les premiers tests en conditions r\u00e9elles ont fait appara\u00eetre un probl\u00e8me inattendu : le mod\u00e8le de d\u00e9tection, initialement configur\u00e9 pour reconna\u00eetre sp\u00e9cifiquement la classe \u00ab\u00a0v\u00e9lo\u00a0\u00bb (<code>bicycle<\/code>), ne parvenait \u00e0 identifier un v\u00e9lo que lorsqu&rsquo;il \u00e9tait vu de profil. Un v\u00e9lo vu de face ou de trois-quarts, configuration la plus fr\u00e9quente pour un objet qui approche par l&rsquo;arri\u00e8re, n&rsquo;\u00e9tait simplement pas reconnu comme tel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La solution retenue a \u00e9t\u00e9 de changer de classe cible : plut\u00f4t que de chercher \u00e0 reconna\u00eetre le v\u00e9lo lui-m\u00eame, l&rsquo;application d\u00e9tecte d\u00e9sormais toute silhouette humaine (classe <code>person<\/code>), que la personne soit \u00e0 pied ou \u00e0 v\u00e9lo. Cette classe reste identifiable sous la plupart des angles, contrairement \u00e0 la forme d&rsquo;un v\u00e9lo. Une estimation de vitesse de rapprochement, calcul\u00e9e \u00e0 partir du mod\u00e8le de distance d\u00e9crit plus haut, permet ensuite de formuler une hypoth\u00e8se : au-del\u00e0 d&rsquo;un certain seuil de vitesse relative (5 km\/h, au-dessus d&rsquo;une allure de marche normale), l&rsquo;application suppose qu&rsquo;il s&rsquo;agit d&rsquo;un v\u00e9lo plut\u00f4t que d&rsquo;un pi\u00e9ton, et l&rsquo;annonce vocalement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un second probl\u00e8me est apparu au cours des m\u00eames tests : une surchauffe notable du t\u00e9l\u00e9phone apr\u00e8s quelques minutes d&rsquo;utilisation continue. Plusieurs optimisations ont \u00e9t\u00e9 mises en place pour y r\u00e9pondre :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>r\u00e9duction de la r\u00e9solution de capture cam\u00e9ra et de l&rsquo;image effectivement transmise au mod\u00e8le de d\u00e9tection ;<\/li>\n\n\n\n<li>cadence de d\u00e9tection adaptative, ralentie tant qu&rsquo;aucune personne n&rsquo;est d\u00e9tect\u00e9e, acc\u00e9l\u00e9r\u00e9e d\u00e8s qu&rsquo;un suivi est en cours ;<\/li>\n\n\n\n<li>arr\u00eat complet de la cam\u00e9ra et de la boucle de d\u00e9tection lorsque l&rsquo;application passe en arri\u00e8re-plan.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Adaptation \u00e0 un usage sans regarder l&rsquo;\u00e9cran<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;usage r\u00e9el du dispositif \u2014 t\u00e9l\u00e9phone port\u00e9 dans une pochette dans le dos \u2014 a orient\u00e9 plusieurs \u00e9volutions vers une interface pens\u00e9e pour \u00eatre entendue plut\u00f4t que vue :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ajout d&rsquo;annonces vocales (\u00ab\u00a0Pi\u00e9ton\u00a0\u00bb \/ \u00ab\u00a0V\u00e9lo\u00a0\u00bb) via la synth\u00e8se vocale du navigateur, qui transitent par la sortie audio active du t\u00e9l\u00e9phone, \u00e9couteurs Bluetooth compris ;<\/li>\n\n\n\n<li>conservation des vibrations en compl\u00e9ment du son ;<\/li>\n\n\n\n<li>ajout d&rsquo;un mode \u00ab\u00a0\u00e9cran \u00e9teint\u00a0\u00bb masquant l&rsquo;aper\u00e7u cam\u00e9ra et l&rsquo;affichage des d\u00e9tections, ne conservant qu&rsquo;un indicateur de statut minimal, pour r\u00e9duire la consommation li\u00e9e au rendu visuel ;<\/li>\n\n\n\n<li>persistance des r\u00e9glages (seuils de sensibilit\u00e9, de confiance de d\u00e9tection, pr\u00e9f\u00e9rences son\/vibration) d&rsquo;une session \u00e0 l&rsquo;autre.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un point de vigilance structurel est apparu au cours de ces tests : que ce soit sur Android ou iOS, le syst\u00e8me d&rsquo;exploitation suspend l&rsquo;ex\u00e9cution du code JavaScript et coupe l&rsquo;acc\u00e8s \u00e0 la cam\u00e9ra d\u00e8s que l&rsquo;\u00e9cran s&rsquo;\u00e9teint ou que l&rsquo;application passe r\u00e9ellement en arri\u00e8re-plan. L&rsquo;\u00e9cran doit donc rester allum\u00e9 (bien que non regard\u00e9) pendant toute la dur\u00e9e d&rsquo;utilisation, ce qui constitue une contrainte incontournable pour une application fonctionnant dans un navigateur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vers une cam\u00e9ra d\u00e9port\u00e9e<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour ne pas mobiliser en permanence le t\u00e9l\u00e9phone comme unique support de la cam\u00e9ra, plusieurs pistes ont \u00e9t\u00e9 explor\u00e9es afin de d\u00e9porter la fonction cam\u00e9ra vers un module externe, connect\u00e9 en USB :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la r\u00e9utilisation d&rsquo;une cam\u00e9ra CSI (Arducam IMX708) d\u00e9j\u00e0 utilis\u00e9e sur un autre projet a \u00e9t\u00e9 envisag\u00e9e, mais n\u00e9cessite un adaptateur CSI vers USB d\u00e9di\u00e9, dont le co\u00fbt rejoint celui d&rsquo;une cam\u00e9ra USB neuve ;<\/li>\n\n\n\n<li>il a \u00e9t\u00e9 \u00e9tabli qu&rsquo;aucune cam\u00e9ra USB, aussi bien reconnue soit-elle par le syst\u00e8me Android, n&rsquo;est directement accessible depuis un navigateur : Chrome pour Android ne remonte pas les cam\u00e9ras UVC externes \u00e0 l&rsquo;API <code>getUserMedia<\/code>, contrairement \u00e0 Chrome sur ordinateur. Seule une application native (ou un empaquetage via un framework comme Capacitor) peut acc\u00e9der \u00e0 ce type de p\u00e9riph\u00e9rique.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Une cam\u00e9ra USB compacte, UVC, \u00e0 focale fixe (3,6 mm, environ 90\u00b0 de champ de vision, capteur 2MP) a finalement \u00e9t\u00e9 choisie et achet\u00e9e, en remplacement de la piste de r\u00e9utilisation de la cam\u00e9ra existante. Le passage \u00e0 une version native de l&rsquo;application, seule \u00e0 m\u00eame d&rsquo;exploiter cette cam\u00e9ra externe, reste l&rsquo;\u00e9tape suivante, une fois les tests de calibration termin\u00e9s sur la version actuelle en PWA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O\u00f9 en est le projet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 ce stade, l&rsquo;approche de reconnaissance en temps r\u00e9el \u2014 d\u00e9tection de personnes par cam\u00e9ra et mod\u00e8le embarqu\u00e9, estimation de proximit\u00e9 et de vitesse de rapprochement, distinction pi\u00e9ton\/v\u00e9lo par la vitesse relative, alerte progressive sonore et vibratoire \u2014 fonctionne et a \u00e9t\u00e9 valid\u00e9e par des premiers tests en conditions r\u00e9elles, jug\u00e9s fiables et robustes. Les \u00e9volutions en cours portent d\u00e9sormais sur la partie mat\u00e9rielle : le passage \u00e0 une cam\u00e9ra externe d\u00e9port\u00e9e, et l&#8217;empaquetage de l&rsquo;application en version native pour lever les limitations propres au navigateur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><a href=\"https:\/\/patrickmonaco.github.io\/pietonCamera\/\" target=\"_blank\" rel=\"noreferrer noopener\">Last version of prototype RadarPieton<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Radar Pi\u00e9ton : d&rsquo;un capteur radar \u00e0 la reconnaissance d&rsquo;image en temps r\u00e9el Le point de d\u00e9part L&rsquo;id\u00e9e initiale \u00e9tait simple : permettre \u00e0&#8230;<\/p>\n","protected":false},"author":1,"featured_media":6179,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"ppma_author":[150],"class_list":["post-6176","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe"],"authors":[{"term_id":150,"user_id":1,"is_guest":0,"slug":"admin8700","display_name":"Patrick","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/41853cbf3fae9c0c46c0ba5e68839a78c20aabbcd1db74702bbda2c9d3980676?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/6176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/comments?post=6176"}],"version-history":[{"count":3,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/6176\/revisions"}],"predecessor-version":[{"id":6183,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/6176\/revisions\/6183"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/media\/6179"}],"wp:attachment":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/media?parent=6176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/categories?post=6176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/tags?post=6176"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/ppma_author?post=6176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}