Comment repasser des photos par l'étape de détection

Bonjour

comme évoqué lors du temps d’échange d’hier notamment par @StephaneP on constate que certaines photos ont été “oubliées” par la détection, probablement lié aux évolutions qui ont eu lieu depuis le début du projet.

Du coup la question qui se pose est, comment faire pour faire passer ces images de nouveau par l’étape de la détection, notamment en le faisant éventuellement “chez soi”.

En fait je me demande si ce serait à ma portée, en admettant que je dispose d’un ordi assez puissant (on a un apprenti en 3D qui a un PC boosté, y’a peut-être moyen de mettre à profit les semaines où il est à l’école… je vais me renseigner sur sa carte graphique).

Quelle serait alors la procédure à suivre ?

Edit : carte graphique NVIDIA GeForce RTX 5070

En gros j’ai des briques à droite à gauche, mais il faut mettre un peu de mortier entre tout ça.

Je pense que tu souhaiterais que ces photos repassent:

  1. en détection pour repérer les panneaux
  2. puis en classification de ces panneaux
  3. ajouter l’annotation correspondante dans l’image

J’ai actuellement deux briques séparées:

  1. la détection qui est dans l’API de floutage dont le code se trouve sur Panoramax / Server / SGBlur · GitLab qui comporte deux webservice, un pour faire le floutage, qui appelle le second qui lui ne fait que la détection (ce serait celui à utiliser).
  2. la classification+annotation qui pour l’instant est un script que je fais tourner depuis chez moi et qui n’est pas “industrialisé” (c’est l’occasion)

J’ai commencé à mettre ça ensemble pour le tester sur l’instance NL.

Les modèles utilisés pour la détection puis la classification sont tous disponibles sur huggingface:

En cas d’impatience forte, ils peuvent être utilisés hors de l’API de floutage et de mon script de classification.

Pour le GPU, la RTX5070 c’est amplement suffisant !

bonjour

merci déjà pour ces éléments.
J’ai la carte graphique OK, maintenant je vais peut-être essayer de trouver un collègue qui puisse me donner un coup de main !

Je suis en vacances vendredi pour 2 semaines, alors ce sera un peu plus tard, et… ça vous fera des vacances aussi :sweat_smile:

ça laisse aussi 2 semaines pour mettre un peu de mortier entre les briques :wink:

@StephaneP était intéressé aussi pour réchauffer son bureau

1 Like

Bonjour,

j’ai demandé de l’aide et on a commencé à regarder l’API de floutage et de détection (sur un autre ordi car étant en congés).

L’installation (sous windows) semble se passer correctement : création et activation du venv, installation des dépendances. Mais arrivé là, on ne comprend pas ce qu’il faut faire pour lancer effectivement le programme. Faut-il absolument passer par docker ?

Car là en l’état, en ouvrant demo.html dans un navigateur et en y téléchargeant un jpg, on a un retour “file:// Error. Please, try again!”.

Et de toute façon en faisant netstat -ab on ne voit pas de port 8000/8001 d’ouvert, donc on se doute qu’il manque une étape de “lancement”.

merci d’avance

Non, je n’utilise pas du tout docker, pas indispensable mais ça peut être plus simple.

Il y a deux webservices à faire tourner, celui de floutage qui par défaut tourne sur le port 8000 qui appelle celui de détection qui écoute sur le port 8001.

Pour les lancer (dans deux terminaux différents):

  • uvicorn src.detect.detect_api:app --reload --port 8001
  • uvicorn src.blur.blur_api:app --reload --port 8000 --workers 8

Je signale que j’ai jamais testé sous windows, et n’ai pas de quoi tester.

suite des tests, voici le message de mon testeur (détaillé au cas où d’autres personnes testeraient aussi) :
uvicorn src.detect.detect_api:app --reload --port 8001 renvoie une erreur liée à TurboJPEG dont le dossier n’est pas trouvé par défaut

En allant ici libjpeg-turbo | Documentation / Official Binaries et en téléchargeant et installant la version Visual C++, l’erreur ne se produit plus mais une autre erreur arrive :

AssertionError: Torch not compiled with CUDA enabled

Et là j’ai beau aller sur CUDA Toolkit 13.2 Update 1 Downloads | NVIDIA Developer afin de télécharger et installer CUDA, puis aller sur https://pytorch.org/get-started/locally/ et rentrer la commande qui m’y est donnée ( pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu132 ), j’ai toujours la même erreur. D’ailleurs la commande ne semble rien faire du tout car ça ne réinstalle rien :

(env) D:\Panoramax_detection\sgblur>pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu132
Looking in indexes: https://download.pytorch.org/whl/cu132
Requirement already satisfied: torch in d:\panoramax_detection\sgblur\env\lib\site-packages (2.6.0)
Requirement already satisfied: torchvision in d:\panoramax_detection\sgblur\env\lib\site-packages (0.21.0)
Requirement already satisfied: fsspec in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (2026.4.0)
Requirement already satisfied: jinja2 in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (3.1.6)
Requirement already satisfied: typing-extensions>=4.10.0 in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (4.15.0)
Requirement already satisfied: filelock in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (3.29.0)
Requirement already satisfied: networkx in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (3.4.2)
Requirement already satisfied: sympy==1.13.1 in d:\panoramax_detection\sgblur\env\lib\site-packages (from torch) (1.13.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in d:\panoramax_detection\sgblur\env\lib\site-packages (from sympy==1.13.1->torch) (1.3.0)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in d:\panoramax_detection\sgblur\env\lib\site-packages (from torchvision) (11.1.0)
Requirement already satisfied: numpy in d:\panoramax_detection\sgblur\env\lib\site-packages (from torchvision) (2.2.6)
Requirement already satisfied: MarkupSafe>=2.0 in d:\panoramax_detection\sgblur\env\lib\site-packages (from jinja2->torch) (3.0.3)

(bizarre d’ailleurs… alors qu’on avait fait la commande pip install torch==2.6.0 torchvision==0.21.0 pour “downgrader” les versions, car l’ordinateur sur lequel nous testons a une 1080 TI, la réinstallation sans préciser la version ne cherche pas à changer et mettre la version la plus récente, instinctivement j’aurai pensé que ça aurait été le cas)

Merci pour l’aide apportée !

bonjour,

oups, en fait il fallait purger le cache des modules avec pip cache purge (j’ai également forcé pip uninstall torch torchvision pour être bien sûr), et là après il retélécharge bien les versions avec CUDA quand on tape pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu132.

Du coup j’ai bien 2 terminaux qui semblent fonctionner :

Terminal 1 :
(env) E:\Panoramax_detection\sgblur>uvicorn src.detect.detect_api:app --reload --port 8001 INFO: Will watch for changes in these directories: ['E:\\Panoramax_detection\\sgblur'] INFO: Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit) INFO: Started reloader process [103808] using StatReload loading yolo11m model with MIN_CONF=0.3 API is preparing to start... INFO: Started server process [108988] INFO: Waiting for application startup. INFO: Application startup complete.

Terminal 2 :
(env) E:\Panoramax_detection\sgblur>uvicorn src.blur.blur_api:app --reload --port 8000 --workers 8 INFO: Will watch for changes in these directories: ['E:\\Panoramax_detection\\sgblur'] WARNING: "workers" flag is ignored when reloading is enabled. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [98404] using StatReload API is preparing to start... INFO: Started server process [110384] INFO: Waiting for application startup. INFO: Application startup complete.
(note le warning : il y a peut-être quelque chose à creuser même si ça n’est sans-doute pas grave)

Sauf que… l’ouverture de demo.html dans un navigateur me donne la même chose qu’avant, à savoir une boîte de dialogue modale qui indique :

File://
Error. Please, try again!

(test fait sur un autre PC perso avec une RTX 4090)

Suite et fin des tests :

j’ai modifié le fichier demo.html parce être sûr que l’appel se faisait bien sur le bon port, en mettant :

<form method="post" action="http://127.0.0.1:8001/detect/" enctype="multipart/form-data" novalidate class="">

Et là le terminal 1 réagit, mais m’affiche une erreur qui me paraît insoluble à notre niveau : le dossier “/dev/shm/detect108988.jpg” ne me paraît pas possible dans un environnement Windows (ça correspond davantage à du linux / macos)

INFO: [127.0.0.1:50443](http://127.0.0.1:50443) - "POST /detect/ HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\uvicorn\protocols\http\h11_[impl.py](http://impl.py)", line 403, in run_asgi

result = await app( # type: ignore[func-returns-value]

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\uvicorn\middleware\proxy_[headers.py](http://headers.py)", line 60, in __call__

return await [self.app(scope](http://self.app(scope), receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\fastapi\[applications.py](http://applications.py)", line 1054, in __call__

await super().__call__(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[applications.py](http://applications.py)", line 112, in __call__

await self.middleware_stack(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\middleware\[errors.py](http://errors.py)", line 187, in __call__

raise exc

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\middleware\[errors.py](http://errors.py)", line 165, in __call__

await [self.app(scope](http://self.app(scope), receive, _send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\middleware\[exceptions.py](http://exceptions.py)", line 62, in __call__

await wrap_app_handling_exceptions([self.app](http://self.app), conn)(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\_exception_[handler.py](http://handler.py)", line 53, in wrapped_app

raise exc

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\_exception_[handler.py](http://handler.py)", line 42, in wrapped_app

await app(scope, receive, sender)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[routing.py](http://routing.py)", line 714, in __call__

await self.middleware_stack(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[routing.py](http://routing.py)", line 734, in app

await route.handle(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[routing.py](http://routing.py)", line 288, in handle

await [self.app(scope](http://self.app(scope), receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[routing.py](http://routing.py)", line 76, in app

await wrap_app_handling_exceptions(app, request)(scope, receive, send)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\_exception_[handler.py](http://handler.py)", line 53, in wrapped_app

raise exc

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\_exception_[handler.py](http://handler.py)", line 42, in wrapped_app

await app(scope, receive, sender)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\starlette\[routing.py](http://routing.py)", line 73, in app

response = await f(request)

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\fastapi\[routing.py](http://routing.py)", line 301, in app

raw_response = await run_endpoint_function(

File "E:\Panoramax_detection\sgblur\env\lib\site-packages\fastapi\[routing.py](http://routing.py)", line 212, in run_endpoint_function

return await [dependant.call](http://dependant.call)(**values)

File "E:\Panoramax_detection\sgblur\src\detect\detect_[api.py](http://api.py)", line 14, in detect_api

result = detect.detector(picture.file, cls)

File "E:\Panoramax_detection\sgblur\src\detect\[detect.py](http://detect.py)", line 138, in detector

with open(tmp, 'w+b') as jpg:

FileNotFoundError: [Errno 2] No such file or directory: '/dev/shm/detect108988.jpg'

INFO: [127.0.0.1:50444](http://127.0.0.1:50444) - "GET /favicon.ico HTTP/1.1" 404 Not Found
PS

à titre perso, j’ai rien compris à ce que j’ai écris dans ces messages :laughing: (mais j’ai confiance en la personne qui me les a soufflés !)

Ah oui… vraiment testé uniquement sous Linux…

/dev/shm est un directory dans un ramdisk qui est utilisé pour stocker temporairement pas mal de petits fichiers.

Aucune idée de l’équivalent sous Windows (et si il y a un équivalent).

merci. Cette première phase de test aura eu au moins le mérite de faire ce constat…
L’ordi auquel je pense au bureau est aussi sur Windows (c’est vrai que j’aurais pu le préciser dès le début)