Bienvenue dans la documentation complète du projet Topodome Python SDK. Ce projet a pour objectif de fournir un contrôle total, local et performant sur la caméra de surveillance TOPODOME TD-S50B (et modèles compatibles CamHi), en s’affranchissant des contraintes du cloud et des applications propriétaires.

🎥 1. Présentation de la TOPODOME TD-S50B
La TOPODOME TD-S50B est une caméra de surveillance extérieure motorisée (PTZ) performante, conçue pour offrir une grande flexibilité de surveillance.
🛠 Caractéristiques Techniques :
- Capteur : Résolution 4MP / 2K (2560 x 1440 pixels) pour une image ultra-nette.
- Motorisation (PTZ) :
- Rotation horizontale (Pan) : 355°.
- Rotation verticale (Tilt) : 120°.
- Vision Nocturne : Double source lumineuse (4 LEDs Infrarouges + 4 LEDs Blanches) avec une portée de 25 mètres. Supporte les modes N&B, Couleur forcée ou Intelligent (passage en couleur sur détection).
- Connectivité : WiFi IEEE802.11 b/g/n (2,4 GHz) et port RJ45.
- Audio : Microphone et haut-parleur intégrés (Audio bidirectionnel).
- Stockage : Emplacement Micro SD jusqu’à 128 Go.
- Compatibilité : Flux standard RTSP, ONVIF (Profile S) et API CGI HiSilicon.
⚙️ Configuration Initiale (Mise en route) :
Pour utiliser cette caméra avec ce SDK en réseau local, l’utilisation de l’application mobile CamHiPro n’est nécessaire que pour deux étapes critiques :
- Configuration du WiFi : Connecter la caméra à votre box internet.
- Sécurité : Changer impérativement le mot de passe du compte
adminpar défaut.
Une fois ces étapes réalisées, vous pouvez utiliser l’adresse IP de la caméra directement dans ce projet pour un contrôle 100% local.
🎯 2. Objectifs du Projet

Le projet se divise en deux composants distincts pour faciliter l’intégration et la maintenance :
- Le SDK (
topodome_api.py) : Un module Python indépendant qui encapsule toute la logique de communication CGI. Il permet d’automatiser la caméra via des scripts sans interface graphique. - La Console GUI (
camera_gui_v2.py) : Une interface moderne et fluide (PySide6) permettant de piloter la caméra en direct, de régler les paramètres fins et de visualiser le flux vidéo en temps réel.
📚 3. Dépendances & Installation
Ce projet nécessite Python 3.8+ et les bibliothèques suivantes :
requests: Pour la communication avec l’API CGI de la caméra.PySide6: Pour l’interface graphique moderne.opencv-python: Pour le décodage et l’affichage du flux vidéo RTSP.qdarktheme: Pour l’esthétique premium « Dark Mode ».
Installation rapide :
pip install requests PySide6 opencv-python pyqtdarktheme
⚙️ 4. Documentation du SDK (topodome_api.py)
Ce fichier constitue le cœur logique. Il utilise la classe TopodomeCamera.
Initialisation
from topodome_api import TopodomeCamera
cam = TopodomeCamera(ip="192.168.1.4", user="admin", password="votre_mot_de_passe")
Méthodes Clés :
move(direction, speed, duration_ms): Déclenche un mouvement précis. Un verrou (Lock) interne garantit que les commandes ne se chevauchent pas.set_fps(fps): Ajuste la fluidité du flux vidéo (ex: 15 pour économiser de la bande passante, 30 pour une fluidité maximale).set_resolution(res_key): Supporte ‘4MP’, ‘1080P’, ‘720P’. Bascule automatiquement les réglages de l’encodeur.get_snapshot(): Capture instantanément une image en binaire (JPG) sans passer par le flux RTSP.set_white_leds(mode): Contrôle les projecteurs blancs (‘auto’, ‘open’, ‘close’).get_config_vars(): Interroge la caméra pour récupérer l’intégralité de sa configuration actuelle.
🖥 5. Documentation de l’Interface (camera_gui_v2.py)
L’interface graphique est conçue pour être « vivante » et réactive.
Architecture Technique :
VideoThread: Un thread dédié qui utilise OpenCV pour lire le flux RTSP. Il émet des signauxQImagevers l’interface principale pour éviter tout gel de l’UI.- Gestion des Signaux : L’interface utilise des signaux personnalisés (
sig_log,sig_status,sig_config) pour mettre à jour les widgets de manière asynchrone. - Persistance : L’application utilise
QSettings. Elle mémorise la taille de la fenêtre et vos derniers réglages (résolution, LEDs) pour les restaurer au prochain lancement.
Sections de l’interface :
- Panneau PTZ : Pilotage intuitif avec réglage de la vitesse et de la durée d’impulsion pour une précision millimétrique.
- Onglet VISION : Réglage du cycle jour/nuit et des paramètres d’image (Luminosité, Contraste, Flip).
- Onglet CONFIG : Changement du nom OSD, de la résolution et du taux d’images (FPS).
- Onglet SYSTÈME : Diagnostic, synchronisation de l’heure et console de debug.
🛠 6. Guide de Maintenance & Améliorations
Ajout d’une nouvelle commande :
Toutes les commandes passent par la méthode privée _get(cmd). Si vous trouvez une nouvelle commande CGI dans la documentation HiSilicon, ajoutez simplement une méthode dans topodome_api.py :
def nouvelle_fonction(self):
return self._get("ma_commande.cgi?-param=valeur")
Troubleshooting :
- Image noire : Vérifiez que l’adresse IP est correcte et que le port 554 (RTSP) est ouvert sur votre réseau local.
- Latence PTZ : Augmentez la « Durée d’impulsion » dans l’UI (ex: 100ms) pour stabiliser les mouvements sur un réseau WiFi faible.
Améliorations Possibles :
- Mode Patrouille : Créer un script qui boucle sur une liste de positions prédéfinies.
- Intégration IA : Utiliser
get_snapshot()pour envoyer des images à un modèle de détection d’objets (YOLO). - Enregistrement Programmable : Ajouter une fonction de planification pour déclencher des enregistrements sur le PC localement.
[!TIP]
Conseil de sécurité : N’exposez jamais directement le port HTTP de votre caméra sur Internet. Utilisez un VPN ou gardez l’accès limité à votre réseau local pour garantir votre vie privée.