Immich avancé : reconnaissance objet et géolocalisation pour archivage chantier — tutoriel 2026
Ce tutoriel fait partie du cluster Médias self-hosted. Pour la vue d’ensemble des trois plateformes (Jellyfin, PeerTube, Immich), lire d’abord le pilier avant de suivre ce guide.
Introduction
Sur un chantier de construction à Dakar, un chef de projet reçoit chaque semaine des centaines de photos prises par ses équipes terrain : état d’avancement des fondations, livraisons de matériaux, positions des équipements lourds, vues aériennes par drone des parcelles. Ces images s’accumulent dans des dossiers partagés sans structure, sans métadonnées exploitables, et sans moyen de retrouver rapidement « toutes les photos de la grue de chantier prises entre mars et avril 2026 sur le site de Plateau ». Le résultat habituel : des heures perdues à fouiller des dossiers mal nommés, des rapports d’avancement basés sur des souvenirs plutôt que sur des preuves photographiques datées et géolocalisées.
Immich résout ce problème de fond. C’est une plateforme d’archivage photographique self-hosted, open source, déployable sur votre propre serveur, et dotée depuis 2024 d’un moteur de machine learning embarqué capable de reconnaître automatiquement les objets présents dans vos photos : véhicules de chantier, équipements électriques, panneaux solaires, structures métalliques, réservoirs, câblage, parcelles agricoles délimitées. Couplé à la lecture automatique des métadonnées GPS (EXIF) générées par tous les smartphones modernes, ce moteur permet d’organiser automatiquement vos archives par site géographique, de regrouper les photos d’un même équipement sur toute sa durée de vie, et d’exporter des rapports structurés pour vos clients ou vos bailleurs de fonds.
Ce tutoriel couvre le déploiement complet d’Immich en version avancée sur un serveur Linux, l’activation de la reconnaissance d’objets professionnels, la configuration de la géolocalisation EXIF par cluster de chantier, et l’organisation des albums partagés pour vos équipes terrain. Le cadre est exclusivement professionnel et technique : archivage de scènes et d’équipements, pas de photos personnelles.
Prérequis
- Serveur Linux : Ubuntu 22.04 LTS ou Debian 12 (bare metal ou VPS 2 vCPU minimum)
- RAM : 4 Go minimum — 8 Go recommandés si le ML container tourne en continu
- Stockage : SSD ou HDD dédié, dimensionné selon votre volume photos (prévoir 2 à 5 Mo par photo RAW/JPEG haute résolution)
- Docker Engine 24+ et Docker Compose v2 installés (docs.docker.com/engine/install/ubuntu)
- GPU optionnel : NVIDIA avec drivers CUDA 12+ accélère considérablement l’indexation ML — sans GPU, le CPU suffit mais l’indexation initiale d’un gros corpus prend plusieurs heures
- Smartphones équipe terrain : iOS 14+ ou Android 9+ avec l’app Immich installée pour l’upload automatique
- Temps estimé : environ 40 minutes pour un déploiement propre, plus le temps d’indexation initiale du corpus existant
Étape 1 — Architecture Immich : comprendre les quatre conteneurs
Avant de lancer la moindre commande, il est essentiel de comprendre comment Immich est architecturé, car cette connaissance détermine comment vous allez dimensionner votre machine et diagnostiquer les problèmes éventuels. Immich ne tourne pas comme un seul processus monolithique : il s’appuie sur quatre services distincts qui communiquent entre eux via le réseau Docker interne.
Le serveur principal (immich-server) est le cœur de l’application. Il expose l’API REST et l’interface web sur le port 2283, gère l’authentification, orchestre les uploads, et coordonne les tâches en arrière-plan. C’est lui qui reçoit les photos depuis l’app mobile et les stocke sur le volume de données.
Le conteneur machine learning (immich-machine-learning) est séparé du serveur principal pour une raison précise : il consomme beaucoup de RAM et de CPU lors des phases d’indexation, et le maintenir isolé permet de le redémarrer ou de le contraindre en ressources sans affecter l’accès aux photos. C’est lui qui fait tourner les modèles CLIP (OpenCLIP ViT-B-32) pour la reconnaissance d’objets et la recherche sémantique.
PostgreSQL 14+ stocke toutes les métadonnées : informations EXIF, géolocalisation, tags, albums, utilisateurs, index de recherche vectorielle (via l’extension pgvector). La base de données est le seul composant dont la perte serait catastrophique — il faut donc la sauvegarder séparément de vos photos.
Redis 6.2 fait office de file de messages et de cache. Il coordonne les jobs d’arrière-plan (indexation ML, génération de miniatures, traitement EXIF) entre le serveur principal et le conteneur ML. Si Redis est indisponible, les uploads continuent mais le traitement asynchrone s’arrête.
Étape 2 — Déployer via Docker Compose officiel
Immich fournit un fichier Docker Compose officiel maintenu par l’équipe du projet. Il est fortement recommandé de partir de ce fichier plutôt que d’écrire le vôtre, car les dépendances de version entre les conteneurs sont précises et régulièrement mises à jour. Voici la procédure de déploiement propre sur Ubuntu 22.04.
Commencez par créer un répertoire dédié à Immich et télécharger les fichiers de configuration officiels :
# Créer le répertoire d'installation
mkdir -p /opt/immich && cd /opt/immich
# Télécharger le fichier Compose officiel et le fichier .env exemple
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
Une fois les fichiers téléchargés, éditez le fichier .env pour adapter au moins trois paramètres critiques avant tout démarrage. Le paramètre UPLOAD_LOCATION doit pointer vers le répertoire où vos photos seront stockées sur l’hôte — choisissez un emplacement sur votre disque de stockage principal, pas sur la partition système. Le paramètre DB_PASSWORD doit être remplacé par un mot de passe fort généré aléatoirement. Le paramètre IMMICH_VERSION peut rester sur release pour suivre la dernière version stable.
# Éditer les variables d'environnement
nano /opt/immich/.env
# Paramètres minimaux à modifier :
# UPLOAD_LOCATION=/data/immich/photos
# DB_PASSWORD=VotreMotDePasseFort2026
# IMMICH_VERSION=release
Créez ensuite le répertoire de stockage photos avant de démarrer les conteneurs, sinon Docker créera un volume anonyme à sa place :
mkdir -p /data/immich/photos
# Démarrer tous les conteneurs en arrière-plan
docker compose up -d
# Vérifier que les quatre conteneurs sont UP
docker compose ps
La commande docker compose ps doit afficher quatre lignes avec le statut Up pour immich-server, immich-machine-learning, immich-postgres et immich-redis. Si l’un des conteneurs est en état Restarting, consultez ses logs immédiatement avec docker compose logs --tail=50 immich-server. Le démarrage initial prend environ 30 secondes le temps que Postgres initialise sa base de données.
Étape 3 — Premier compte et upload mobile depuis le terrain
Une fois les conteneurs démarrés, l’interface web est accessible sur http://IP-DE-VOTRE-SERVEUR:2283. La première visite vous invite à créer le compte administrateur — c’est l’unique compte qui aura accès aux paramètres système. Utilisez une adresse e-mail de service (par exemple admin@votre-entreprise.sn) et un mot de passe fort stocké dans un gestionnaire de mots de passe.
Pour l’upload depuis les smartphones de vos équipes terrain, l’application mobile Immich est disponible sur l’App Store (iOS) et le Play Store (Android), et également via F-Droid pour les appareils sans Google Services. Lors de la configuration initiale, vos agents de terrain saisissent l’URL du serveur (votre IP ou nom de domaine avec le port 2283), puis leurs identifiants. L’application détecte automatiquement les nouvelles photos dans la galerie et les synchronise en WiFi ou en 4G selon vos préférences.
Un point crucial pour la géolocalisation : vérifiez que l’option GPS activé est bien cochée dans l’appareil photo de vos smartphones avant chaque session de terrain. Les métadonnées GPS sont inscrites dans les fichiers JPEG au moment de la prise de vue — impossible de les ajouter après coup sans outil tiers. Sensibilisez vos équipes à ce point dès l’onboarding.
Étape 4 — Activer la reconnaissance d’objets professionnels
La reconnaissance d’objets dans Immich repose sur le modèle CLIP (Contrastive Language-Image Pretraining) dans sa variante OpenCLIP ViT-B-32. Ce modèle permet deux choses distinctes qu’il ne faut pas confondre : la recherche sémantique (vous tapez « panneau solaire » et Immich retrouve toutes les photos contenant des panneaux solaires, même sans aucun tag manuel) et la classification automatique (Immich suggère des labels basés sur le contenu visuel détecté).
Pour activer et configurer le moteur ML, connectez-vous à l’interface admin d’Immich, rendez-vous dans Administration → Machine Learning. Vous y trouverez plusieurs paramètres :
- Smart Search (CLIP) : à activer — c’est le moteur de recherche sémantique par contenu visuel. Le modèle par défaut
ViT-B-32offre le meilleur compromis performance/ressources pour un serveur sans GPU. - Facial Recognition : à désactiver explicitement dans un contexte professionnel d’archivage de chantier. Ce module n’a aucune utilité pour indexer des équipements ou des structures, et son activation soulève des questions de conformité inutiles. Immich permet de le désactiver indépendamment du reste du ML.
- Tag Objects : à activer — ce module génère automatiquement des tags de contenu sur chaque photo indexée.
Une fois le Smart Search activé, lancez l’indexation initiale de votre corpus depuis Administration → Jobs → Smart Search, bouton Run All. L’indexation consomme environ 100 Mo de RAM par lot de 100 photos sur le conteneur ML. Sur un corpus de 10 000 photos sans GPU, comptez 2 à 4 heures pour une indexation complète — planifiez cette opération la nuit.
Pour tester que la reconnaissance fonctionne correctement sur vos types de photos professionnelles, utilisez la barre de recherche principale et tapez des termes comme « excavatrice », « grue », « câble électrique », « toiture », « réservoir », « panneau solaire », « tracteur », « serre ». Si le modèle a bien indexé vos photos, les résultats apparaissent sans qu’aucun tag manuel n’ait été posé. C’est la valeur centrale de cet outil pour vos archivistes terrain.
Étape 5 — Géolocalisation EXIF et clusters par chantier
La géolocalisation est la fonctionnalité la plus puissante d’Immich pour l’organisation d’archives de chantier. Elle repose sur les métadonnées GPS inscrites dans chaque fichier JPEG par le smartphone au moment de la prise de vue : latitude, longitude, altitude, direction. Immich lit ces données EXIF automatiquement à l’import et les affiche sur une carte interactive dans l’interface.
Pour activer la vue cartographique, rendez-vous dans Administration → Map Settings. Vous pouvez y configurer le fournisseur de tuiles cartographiques — par défaut Immich utilise OpenStreetMap, qui est gratuit, open source, et particulièrement bien renseigné pour les zones urbaines d’Afrique de l’Ouest (Dakar, Abidjan, Bamako, Ouagadougou sont bien couverts depuis 2023).
La carte est accessible depuis la barre de navigation principale. Elle affiche toutes les photos géolocalisées sous forme de points colorés. Lorsque plusieurs photos ont été prises dans un rayon proche, Immich les regroupe automatiquement en clusters visuels — exactement ce dont vous avez besoin pour voir d’un coup d’œil « toutes les photos du chantier de Pikine » versus « toutes les photos du chantier de Thiès ».
Pour aller plus loin dans l’organisation par chantier, combinez la vue carte avec les albums (voir Étape 6) et les filtres de date. Le flux de travail recommandé pour un chef de projet est le suivant : filtrer par zone géographique sur la carte pour sélectionner toutes les photos d’un site, puis créer un album nommé d’après le chantier pour figer cette sélection. L’album devient alors la source de vérité photographique pour ce chantier.
Si certaines photos de terrain ont été prises avec un appareil sans GPS (appareil photo reflex, caméra thermique), Immich permet d’ajouter des coordonnées GPS manuellement en éditant les métadonnées d’un fichier depuis l’interface web. Ce n’est pas aussi pratique que le GPS automatique, mais c’est suffisant pour les équipements spécialisés utilisés ponctuellement.
Étape 6 — Albums partagés pour la coordination d’équipe
Les albums partagés sont le mécanisme de collaboration central d’Immich. Un album est un regroupement logique de photos auquel plusieurs utilisateurs peuvent accéder simultanément, avec des droits différenciés : certains peuvent uniquement consulter, d’autres peuvent ajouter des photos, le propriétaire peut modifier la structure.
La structure d’albums recommandée pour un bureau d’études ou une PME BTP est hiérarchique par projet. Créez un album par chantier actif, nommé selon votre convention interne (par exemple : CHT-2026-DAK-001 — Immeuble Plateau). Invitez dans chaque album les membres de l’équipe concernée via leur adresse e-mail Immich. Les agents terrain peuvent ajouter des photos directement depuis l’app mobile vers l’album dédié à leur chantier.
Pour créer un album partagé depuis l’interface web, cliquez sur Albums → Créer un album, donnez-lui un nom et une description, puis utilisez Partager → Inviter des utilisateurs. Vous pouvez également partager un album via un lien public temporaire pour permettre à un client ou un bailleur de fonds de consulter les photos sans créer de compte — cette option est utile pour les rapports d’avancement mensuels.
# Alternative via API REST pour automatiser la création d'albums (script bash)
curl -X POST "http://VOTRE-IP:2283/api/albums" \
-H "Content-Type: application/json" \
-H "x-api-key: VOTRE_CLE_API" \
-d '{
"albumName": "CHT-2026-DAK-001 — Immeuble Plateau",
"description": "Chantier Plateau Dakar — démarrage mars 2026"
}'
La clé API se génère dans Compte → Clés API. Cette approche par script est particulièrement utile si votre bureau gère plusieurs chantiers en parallèle et que vous voulez automatiser la création d’albums à partir de votre logiciel de gestion de projets.
Étape 7 — Export structuré pour rapports d’avancement
La valeur finale d’un système d’archivage photographique se mesure à la qualité des exports produits pour les rapports. Immich propose plusieurs mécanismes d’export adaptés aux différents contextes professionnels.
L’export le plus simple est l’export d’album : depuis un album, sélectionnez toutes les photos ou une sélection filtrée, puis Télécharger. Immich génère une archive ZIP contenant les fichiers originaux avec leurs métadonnées EXIF intactes, plus un fichier de métadonnées JSON par photo si vous cochez l’option correspondante. Ce format JSON inclut la géolocalisation, la date, l’heure, les tags ML générés automatiquement — idéal pour alimenter un rapport structuré.
Pour les exports récurrents et automatisés (rapport hebdomadaire chaque lundi matin, par exemple), utilisez l’API REST d’Immich couplée à un script cron. L’API permet de requêter les photos d’un album ajoutées depuis une date donnée, de les télécharger, et de les organiser dans un répertoire structuré :
#!/bin/bash
# Script d'export hebdomadaire — à exécuter via cron chaque lundi 06h00
# Variables à adapter
IMMICH_URL="http://VOTRE-IP:2283"
API_KEY="VOTRE_CLE_API"
ALBUM_ID="ID_DE_L_ALBUM"
EXPORT_DIR="/rapports/semaine-$(date +%Y-%W)"
# Créer le répertoire de rapport
mkdir -p "$EXPORT_DIR"
# Lister les assets de l'album modifiés dans les 7 derniers jours
curl -s -X GET "$IMMICH_URL/api/albums/$ALBUM_ID" \
-H "x-api-key: $API_KEY" \
-o "$EXPORT_DIR/metadata-album.json"
echo "Export terminé dans $EXPORT_DIR"
Ce script de base récupère les métadonnées de l’album. Pour télécharger les fichiers eux-mêmes, étendez-le en itérant sur les assetIds retournés par l’endpoint /api/albums/{id} et en appelant /api/assets/{assetId}/original pour chaque fichier. La documentation complète de l’API est disponible sur http://VOTRE-IP:2283/api (interface Swagger auto-générée).
Erreurs fréquentes
| Erreur observée | Cause probable | Solution |
|---|---|---|
Conteneur ML en Restarting en boucle |
RAM insuffisante (moins de 4 Go disponibles) | Ajouter de la RAM ou limiter le ML avec MACHINE_LEARNING_WORKERS=1 dans .env |
| Photos sans localisation sur la carte | GPS désactivé sur le smartphone au moment de la prise de vue | Activer GPS avant la séance terrain ; ajouter manuellement les coordonnées depuis l’interface |
| Recherche sémantique retourne zéro résultat | Indexation ML non encore lancée ou incomplète | Administration → Jobs → Smart Search → Run All ; surveiller la progression |
Erreur Error: ENOSPC à l’upload |
Espace disque épuisé sur le volume de stockage | df -h pour vérifier, étendre le volume ou archiver les anciens chantiers |
| App mobile impossible à connecter | Port 2283 bloqué par le pare-feu ou URL mal saisie | ufw allow 2283/tcp ; tester avec curl http://IP:2283/api/server-info |
Postgres en OOM killed |
Extension pgvector consomme plus de RAM avec un grand corpus | Ajouter DB_VECTOR_EXTENSION=pgvecto.rs dans .env (plus efficace en mémoire) |
| Miniatures non générées | Job de génération en queue mais Redis saturé | docker compose restart immich-redis puis relancer le job depuis Administration → Jobs |
Adaptation au contexte ouest-africain
Le déploiement d’Immich dans le contexte des PME et bureaux d’études d’Afrique de l’Ouest présente des défis spécifiques qui méritent une section dédiée, car les solutions standards pensées pour des infrastructures européennes ne s’appliquent pas directement.
Pour le suivi de chantiers BTP à Dakar et Abidjan, la principale contrainte est la connectivité terrain. Les chantiers en périphérie urbaine (extension de Diamniadio, quartiers nord d’Abidjan) ont souvent une couverture 4G irrégulière. Configurez l’app mobile Immich pour qu’elle synchronise uniquement en WiFi par défaut, et activez la synchronisation 4G uniquement sur les réseaux des opérateurs locaux de confiance. L’app gère nativement la reprise de transfert interrompu — vos agents terrain peuvent quitter une zone couverte en plein upload sans perdre les fichiers déjà transférés.
Pour les projets agritech et suivi de parcelles agricoles, Immich est particulièrement adapté à l’archivage longitudinal : photographiez le même champ à J0, J+30, J+60, et la vue cartographique d’Immich vous permet de retrouver instantanément toutes les photos d’une parcelle par sa position GPS. Couplez avec la recherche sémantique pour filtrer les photos contenant des cultures à un stade particulier de croissance (« plants de tomate », « stade floraison », « irrigation goutte-à-goutte ») — le modèle CLIP reconnaît ces contextes agricoles avec une précision satisfaisante sur des photos bien exposées.
Pour les audits d’infrastructure menés par des ONG ou des agences de développement (électrification rurale, adduction d’eau, routes), Immich peut servir de système de preuve photographique géoréférencée. Chaque photo d’un équipement installé (pompe, transformateur, borne fontaine) est automatiquement associée à ses coordonnées GPS, ce qui permet de produire des cartes d’audit directement exportables pour les reportings bailleurs. Configurez un album par zone d’intervention et partagez-le en lecture seule avec le partenaire financier via un lien public temporaire.
Côté hébergement, un VPS 4 Go RAM chez Wave (Sénégal), Orange Cloud (Côte d’Ivoire), ou chez des acteurs régionaux comme Afrihost suffit pour une PME de 10 à 30 utilisateurs terrain. Pour les structures avec un serveur local, un mini-PC type Intel NUC avec 8 Go RAM et un disque SSD de 1 To est une solution économique et fiable pour 50 000 photos environ. Les coupures électriques fréquentes imposent un onduleur (UPS) en amont du serveur — Immich supporte nativement l’arrêt propre via docker compose down dans un script lié au signal SIGTERM.
Tutoriels frères
- Jellyfin self-hosted : gérer et diffuser vos vidéos de formation en interne — déployer Jellyfin pour la gestion de contenus vidéo de formation et de documentation terrain
- PeerTube instance privée : partager vos vidéos d’entreprise sans YouTube — configurer une instance PeerTube interne pour les replays de réunions et tutoriels techniques
Pour aller plus loin
- Retour au pilier : Plateforme médias self-hosted PME francophone : Jellyfin, PeerTube, Immich (2026)
- Documentation officielle Immich : immich.app/docs — référence complète en anglais, mise à jour à chaque release
- Dépôt GitHub officiel : github.com/immich-app/immich — changelog détaillé, issues, fichiers Docker Compose officiels
- API Reference :
http://VOTRE-IP:2283/api— interface Swagger interactive auto-générée par votre instance - Prochaine étape suggérée : configurer un reverse proxy Nginx avec certificat SSL Let’s Encrypt devant Immich pour exposer votre instance sur un nom de domaine sécurisé — voir le tutoriel Nginx + Let’s Encrypt de notre cluster Infrastructure
FAQ
- Q : Immich peut-il indexer des photos déjà stockées sur un NAS existant sans les déplacer ?
- R : Oui, via la fonctionnalité External Libraries (Administration → External Libraries). Vous montez le répertoire de votre NAS comme volume Docker dans
immich-server, puis vous déclarez ce chemin comme bibliothèque externe. Immich indexe les fichiers en place sans les copier. Attention : les fichiers dans une bibliothèque externe ne peuvent pas être supprimés depuis l’interface Immich — la gestion des fichiers reste sur votre NAS. - Q : La reconnaissance d’objets fonctionne-t-elle sur des photos de nuit ou en mauvaise lumière (chantiers éclairés artificiellement) ?
- R : Le modèle CLIP est relativement robuste aux variations d’éclairage car il a été entraîné sur des corpus variés. Pour des photos très sous-exposées ou prises avec un fort bruit numérique, la précision diminue. La pratique recommandée est de faire photographier les équipements avec un éclairage suffisant (lampe frontale, flash) pour maximiser la qualité de l’indexation. Les miniatures générées par Immich permettent de vérifier visuellement la qualité des photos avant l’envoi de rapports.
- Q : Comment mettre à jour Immich sans perdre les données ?
- R : La procédure officielle est : 1) sauvegarder la base Postgres (
docker compose exec immich-postgres pg_dump -U postgres immich > backup.sql), 2) mettre à jour le fichierdocker-compose.ymlvers la nouvelle version, 3)docker compose pull && docker compose up -d. Les migrations de base de données sont gérées automatiquement par Immich au démarrage. Ne sautez jamais plusieurs versions majeures sans lire le changelog — certaines migrations sont irréversibles. - Q : Est-il possible de restreindre l’accès à Immich à un réseau interne sans l’exposer sur Internet ?
- R : Oui, et c’est même recommandé pour les données sensibles de chantier. Configurez Immich pour écouter uniquement sur l’interface réseau interne de votre LAN/VPN. Vos équipes terrain se connectent via un VPN WireGuard ou OpenVPN installé sur leurs smartphones. Cette configuration est plus sécurisée qu’une exposition directe sur Internet et ne nécessite pas de certificat SSL public.
- Q : Quelle est la différence entre Smart Search et la recherche par tag manuel ?
- R : La recherche par tag manuel est exacte mais requiert qu’un humain ait préalablement tagué chaque photo. La Smart Search (CLIP) est sémantique : elle comprend le contenu visuel de la photo et permet de retrouver des images avec des termes en langage naturel, même sans aucun tag. Les deux approches sont complémentaires — utilisez les tags manuels pour des catégories métier précises (code chantier, phase travaux) et la Smart Search pour les recherches ad hoc par contenu visuel.
- Q : Immich gère-t-il les fichiers RAW des appareils photo professionnels ?
- R : Oui, Immich supporte les formats RAW courants (CR2, CR3 Canon ; NEF Nikon ; ARW Sony ; DNG générique) via la bibliothèque libraw. La miniature est générée automatiquement. La recherche CLIP fonctionne également sur les RAW. Pour les drones DJI, les fichiers DNG produits sont pleinement compatibles, y compris les métadonnées GPS embarquées dans les fichiers.
- Q : Combien d’utilisateurs simultanés peut supporter une instance Immich sur un serveur 4 Go RAM ?
- R : Pour la consultation et le téléversement, un serveur 4 Go supporte confortablement 10 à 20 utilisateurs simultanés. La charge principale vient du conteneur ML lors des phases d’indexation — si vous planifiez l’indexation en dehors des heures de travail terrain, le serveur reste très réactif pour les usages courants. Au-delà de 30 utilisateurs actifs simultanés, passez à 8 Go RAM et envisagez un deuxième CPU.