Les premiers pas
Sous Ubuntu, Mac et autres systèmes Unix, utilisez Terminal ou Terminator. Sous Windows, utilisez Windows PowerShell. Regardez un tutoriel vidéo YouTube si vous ne connaissez pas ces outils. Assurez-vous d'être à la racine du projet avant d'exécuter une commande (c'est-à-dire dans le dossier OpenPose, et non dans build/, windows/ ou bin/). De plus, les fichiers examples/media/video.avi et examples/media existent ; il n'est donc pas nécessaire de modifier la moindre ligne de code.
Testez OpenPose en exécutant la commande suivante. Le résultat visuel attendu devrait ressembler à ceci : doc/02_output.md#ui-and-visual-output.
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin --vidéo examples/media/video.avi :: Windows - Démo de portable bin\OpenPoseDemo.exe --video examples/media/video.avi |
Si vous utilisez uniquement la démo OpenPose, nous vous recommandons vivement d'utiliser la dernière version portable Windows d'OpenPose. Si vous souhaitez néanmoins utiliser la démo avec Visual Studio, vous pouvez copier les fichiers bin/*.dll dans l'emplacement bin final de la DLL, à l'adresse doc/installation/0_index.md#windows, ou simplement modifier les valeurs par défaut des indicateurs depuis include/flags.hpp. Une fois les DLL copiées, exécutez la commande suivante :
|
:: Windows - Bibliothèque - En supposant que vous ayez copié les DLL suivantes doc/installation/0_index.md#windows build\x64\Release\OpenPoseDemo.exe --video examples/media/video.avi |
Si cela fonctionne, passez à la section suivante. Sinon :
- Si ces opérations échouent avec une erreur de mémoire insuffisante, consultez et suivez la section «Améliorer la mémoire et la vitesse, mais diminuer la précision».
- Si vous utilisez Mac, consultez et suivez la section « Étape supplémentaire pour Mac OS X ».
Exécution sur des images, des vidéos ou une webcam :
- Répertoire contenant des images (--image_dir {DIRECTORY_PATH}) :
- Vidéo (--video {VIDEO_PATH}):
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin --image_dir examples/media/ :: Windows - Portable Demo bin\OpenPoseDemo.exe --image_dir examples/media/ |
|
# Ubuntu and Mac ./build/examples/openpose/openpose.bin --video examples/media/video.avi :: Windows - Portable Demo bin\OpenPoseDemo.exe --video examples/media/video.avi |
La webcam est activée par défaut (c'est-à-dire si les options --image_dir et --video ne sont pas utilisées). Si vous possédez plusieurs caméras, vous pouvez utiliser --camera {CAMERA_NUMBER} pour sélectionner la caméra appropriée :
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin ./build/examples/openpose/openpose.bin --camera 0 ./build/examples/openpose/openpose.bin --camera 1 :: Windows - Portable Demo bin\OpenPoseDemo.exe bin\OpenPoseDemo.exe --camera 0 bin\OpenPoseDemo.exe --camera 1 |
Visage et mains
Ajoutez simplement --face et/ou --hand à n'importe quelle commande :
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin --image_dir examples/media/ --face --hand ./build/examples/openpose/openpose.bin --video examples/media/video.avi --face --hand ./build/examples/openpose/openpose.bin --face --hand :: Windows - Portable Demo bin\OpenPoseDemo.exe --image_dir examples/media/ --face --hand bin\OpenPoseDemo.exe --video examples/media/video.avi --face --hand bin\OpenPoseDemo.exe --face --hand |
Différents formats de sortie (JSON, images, vidéo, interface utilisateur)
Toutes les options de sortie sont complémentaires. Par exemple, l'affichage des images avec les squelettes sur l'interface utilisateur (ou non) dépend de leur enregistrement sur disque (ou non).
Enregistrez les squelettes dans un ensemble de fichiers JSON avec l'option --write_json {OUTPUT_JSON_PATH}.
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) ./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_json output_jsons/ ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_json output_jsons/ ./build/examples/openpose/openpose.bin --write_json output_jsons/ |
Enregistrez sur le disque la sortie visuelle d'OpenPose (les images avec les squelettes superposés) sous forme de vidéo de sortie (--write_video {OUTPUT_VIDEO_PATH}) ou d'ensemble d'images (--write_images {OUTPUT_IMAGE_DIRECTORY_PATH}).
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_video output/result.avi ./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_video output/result.avi ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_images output_images/ ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_images output_images/ --write_images_format jpg ./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_images output_images/ ./build/examples/openpose/openpose.bin --image_dir examples/media/ --write_images output_images/ --write_images_format jpg |
Vous pouvez également désactiver la visualisation de l'interface utilisateur avec --display 0. Cependant, une sortie doit être générée. Par exemple, définissez l'une des options suivantes : --write_json, --write_video ou --write_images si --display 0 est défini.
| # Ubuntu et Mac (mêmes drapeaux pour Windows) ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_images output_images/ --display 0 |
Pour accélérer encore plus OpenPose lors de l'utilisation de --display 0, ajoutez également --render_pose 0 si vous n'utilisez pas --write_video ou --write_images (afin qu'OpenPose ne superpose pas les squelettes avec les images d'entrée).
| # Ubuntu et Mac (mêmes drapeaux pour Windows) ./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_json output_jsons/ --display 0 --render_pose 0 |
Squelette seul sans image d'arrière-plan
Vous pouvez également visualiser/enregistrer le squelette sans superposition ni fusion de l'image d'origine en ajoutant --disable_blending :
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) # Corps seul ./build/examples/openpose/openpose.bin --video examples/media/video.avi --disable_blending |
Tous les GPU ne sont pas utilisés
Par défaut, OpenPose utilise tous les GPU disponibles sur votre machine. Sinon, l'option --num_gpu définit le nombre total de GPU et l'option --num_gpu_start le premier GPU à utiliser. Par exemple, l'option --num_gpu 2 et l'option --num_gpu_start 1 utilisent les GPU ID 1 et 2, tout en ignorant l'ID 0 (en supposant qu'il y ait au moins 3 GPU) :
|
:: Windows - Portable Demo (même drapeaux pour Ubuntu et Mac) bin\OpenPoseDemo.exe --video examples/media/video.avi --num_gpu 2 --num_gpu_start 1 |
Configuration de précision maximale
Cette commande fournit les résultats les plus précis que nous ayons pu obtenir pour la détection des points clés du corps, des mains et du visage.
|
# Ubuntu et Mac: Corps ./build/examples/openpose/openpose.bin --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 # Ubuntu and Mac: Body + Hand + Face ./build/examples/openpose/openpose.bin --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 --hand --hand_scale_number 6 --hand_scale_range 0.4 --face :: Windows - Portable Demo: Corps bin\OpenPoseDemo.exe --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 :: Windows - Portable Demo: Body + Hand + Face bin\OpenPoseDemo.exe --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 --hand --hand_scale_number 6 --hand_scale_range 0.4 --face |
Requis :
- BODY_25 (modèle par défaut). COCO est moins précis (mais toujours utilisable), tandis que MPI n'est pas pris en charge (c'est-à-dire que la précision et la vitesse
MPI diminueront avec ces paramètres).
GPU Nvidia avec au moins 16 Go de mémoire. 8 ou 12 Go pourraient convenir dans certains cas, détaillés ici.
- BODY_25 (corps + pied, modèle par défaut) : GPU Nvidia avec au moins 10,5 Go de mémoire. Par exemple, Titan X(P), certains modèles Quadro, P100, V100.
- BODY_25 + visage + mains : GPU Nvidia avec au moins 16 Go de mémoire. Par exemple, V100.
- COCO Corps + visage + mains : GPU Nvidia avec au moins 6,7 Go de mémoire. Par exemple, 2070, 2080.
- Cela ne fonctionnera pas sur les modes CPU/OpenCL, votre seule option est de recadrer manuellement chaque personne, de la redimensionner et de l'introduire dans l'OpenPose par défaut.
- Informations complémentaires :
- La fréquence d'exécution est d'environ 2 IPS sur un Titan X pour BODY_25 (1 IPS pour COCO).
- Augmenter la valeur de --net_resolution réduira considérablement la vitesse, sans toutefois garantir une augmentation de la précision. Par conséquent, nous recommandons d'utiliser uniquement les indicateurs et valeurs exacts détaillés ici (ou de demander à l'utilisateur d'effectuer sa propre analyse de précision s'il utilise d'autres valeurs).
- (Non recommandé, à vos risques et périls) L'ajout de --maximize_positives peut nuire à la précision visuelle/qualitative, mais cela augmente la valeur de précision du défi COCO. Cela réduit les seuils d'acceptation d'un candidat (c'est-à-dire davantage de faux positifs et de vrais positifs), ce qui maximise le rappel moyen, mais peut nuire à la précision moyenne. D'après notre expérience, l'apparence visuelle est bien moins bonne, mais la précision du défi est meilleure. Si vous utilisez Ubuntu, vous pouvez vérifier les scripts expérimentaux que nous utilisons pour tester notre précision (nous ne le prenons pas officiellement en charge, c'est-à-dire que nous ne répondrons pas aux questions à ce sujet, et cela pourrait le modifier en permanence), ils sont placés dans openpose/scripts/tests/, appelés pose_accuracy_coco_test_dev.sh et pose_accuracy_coco_val.sh.
Modèle supplémentaire avec précision maximale
Avertissement : Ce modèle est plus précis, mais aussi plus lent, nécessite davantage de mémoire GPU et doit utiliser la version GPU Nvidia.
Nos chiffres de précision sur papier ne correspondent pas aux chiffres de modèle par défaut. Nous avons publié notre meilleur modèle à l'époque, mais nous en avons trouvé de meilleurs par la suite.
Pour notre meilleur modèle, vous pouvez télécharger le modèle pré-entraîné BODY_25B depuis le référentiel d'entraînement OpenPose : Modèle BODY_25B - Option 1 (Précision maximale, vitesse réduite).
Modèle supplémentaire avec moins de faux positifs
Avertissement : La version GPU Nvidia est requise.
Vous avez besoin d'un modèle avec moins de faux positifs, mais avec les mêmes performances d'exécution et les mêmes exigences GPU ? Vous pouvez télécharger le modèle pré-entraîné BODY_25B depuis le référentiel d'entraînement OpenPose : Modèle BODY_25B - Option 2 (recommandé).
Reconstruction 3D
- Démo en temps réel :
- Enregistrement des points clefs 3D et de la vidéo :
- Enregistrement rapide des images de la caméra stéréo (sans détection de points clefs) pour un post-traitement ultérieur :
- Lecture et traitement des images de caméra stéréo précédemment enregistrées :
- Reconstruction lorsque le point clef est visible dans au moins x vues de caméra sur un total de n caméras
# Ubuntu et Mac (mêmes drapeaux pour Windows)
# Reconstruction lorsqu'un point clef est visible dans au moins 2 vues de caméra (en supposant que `n` >= 2)
./build/examples/openpose/openpose.bin --flir_camera --3d --number_people_max 1 --3d_min_views 2 --output_resolution {desired_output_resolution}
# Reconstruction lorsqu'un point clé est visible dans au moins max(2, min(4, n-1)) vues de caméra
./build/examples/openpose/openpose.bin --flir_camera --3d --number_people_max 1 --output_resolution {desired_output_resolution}
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin --flir_camera --3d --number_people_max 1 # Avec le visage et les mains ./build/examples/openpose/openpose.bin --flir_camera --3d --number_people_max 1 --face --hand :: Windows - Portable Demo bin\OpenPoseDemo.exe --flir_camera --3d --number_people_max 1 :: Avec le visage et les mains bin\OpenPoseDemo.exe --flir_camera --3d --number_people_max 1 --face --hand |
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) ./build/examples/openpose/openpose.bin --flir_camera --3d --number_people_max 1 --write_json output_folder_path/ --write_video_3d output_folder_path/video_3d.avi |
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) # Enregistrer la vidéo # Remarque : enregistrer au format PNG plutôt qu'au format JPG améliorera la qualité de l'image, mais ralentira la fréquence d'images (en fonction de la vitesse d'écriture du disque dur et du numéro de caméra). ./build/examples/openpose/openpose.bin --flir_camera --num_gpu 0 --write_video output_folder_path/video.avi --write_video_fps 5 # Sauvegarde des images # Remarque : l'enregistrement au format PNG plutôt qu'au format JPG améliorera la qualité de l'image, mais ralentira le nombre d'images par seconde (en fonction de la vitesse d'écriture du disque dur et du numéro de l'appareil photo). ./build/examples/openpose/openpose.bin --flir_camera --num_gpu 0 --write_images output_folder_path/ --write_images_format jpg |
|
# Ubuntu et Mac (mêmes drapeaux pour Windows) # Ajoutez éventuellement « --face » et/ou « --hand » pour inclure le visage et/ou les mains. # En supposant 3 caméras. # Remarque : Nous recommandons fortement de réduire « --output_resolution ». Par exemple, pour 3 caméras enregistrant en 1920 x 1080, l'image résultante est (3 x 1920) x 1080. Nous recommandons donc par exemple 640 x 360 (réduction x 3). # Vidéo ./build/examples/openpose/openpose.bin --video output_folder_path/video.avi --3d_views 3 --3d --number_people_max 1 --output_resolution {desired_output_resolution} # Images ./build/examples/openpose/openpose.bin --image_dir output_folder_path/ --3d_views 3 --3d --number_people_max 1 --output_resolution {desired_output_resolution} |
Suivi
Accélération considérable du temps d'exécution grâce à une réduction de la précision :
|
:: Windows - Démo portable (mêmes options pour Ubuntu et Mac) # Utilisation d'OpenPose : 1 image, suivi des suivantes, par exemple : 5 images bin\OpenPoseDemo.exe --tracking 5 --number_people_max 1 |
Accélération de l'exécution tout en conservant la majeure partie de la précision :
|
:: Windows - Démo portable (mêmes drapeaux pour Ubuntu et Mac) # Utilisation d'OpenPose 1 image et suivi d'une autre image bin\OpenPoseDemo.exe --tracking 1 --number_people_max 1 |
Douceur visuelle :
|
:: Windows - Démo portable (mêmes drapeaux pour Ubuntu et Mac) # Exécution simultanée d'OpenPose et du suivi sur chaque image. Remarque : aucune accélération ni ralentissement. bin\OpenPoseDemo.exe --tracking 0 --number_people_max 1 |
Kinect 2.0 comme webcam sous Windows 10
Depuis l'anniversaire de Windows 10, Kinect 2.0 peut être utilisé comme une webcam classique. Il suffit d'aller dans le Gestionnaire de périphériques, de développer l'onglet «Périphériques du capteur Kinect», de faire un clic droit et de mettre à jour le pilote de l'interface WDF KinectSensor. Si vous possédez déjà une autre webcam, déconnectez-la ou utilisez la commande --camera 2.
Indicateurs principaux
Voici les indicateurs les plus courants, mais consultez doc/advanced/demo_advanced.md pour en obtenir la liste complète et une description.
- --face : Active la détection des points clefs du visage.
- --hand : Active la détection des points clefs de la main.
- --video input.mp4 : Lecture du fichier vidéo input.mp4.
- --camera 3 : Lecture de la webcam numéro 3.
- --image_dir path_with_images/ : Exécution dans le répertoire path_with_images/ contenant les images.
- --ip_camera http://iris.not.iac.es/axis-cgi/mjpg/video.cgi?resolution=320x240?x.mjpeg : Exécution sur une caméra IP en streaming. Voir des exemples de caméras IP publiques ici.
- --write_video path.avi : Enregistrement des images traitées sous forme de vidéo.
- --write_images folder_path : Enregistrement des images traitées dans un dossier.
- --write_keypoint path/ : Sortie de fichiers JSON, XML ou YML contenant les données de pose des personnes dans un dossier.
- --process_real_time : Pour la vidéo, il est possible de sauter des images pour un affichage en temps réel.
- --disable_blending : Si activé, les résultats (squelettes de points clefs ou cartes thermiques) seront affichés sur un fond noir, sans afficher l'image d'origine. Liés : part_to_show, alpha_pose et alpha_pose.
- --part_to_show : Canal de prédiction à visualiser.
- --display 0 : Fenêtre d'affichage non ouverte. Utile pour les serveurs et/ou pour accélérer légèrement OpenPose.
- --num_gpu 2 --num_gpu_start 1 : Paralléliser sur ce nombre de GPU en commençant par l'ID de périphérique souhaité. Par défaut, tous les GPU disponibles sont utilisés.
- --model_pose MPI : Modèle à utiliser, affecte le nombre de points clefs, la vitesse et la précision.
- --logging_level 3 : seuil de journalisation des messages, plage [0,255] : 0 affichera n'importe quel message et 255 n'en affichera aucun. Les messages actuels sont dans la plage [1-4], 1 pour les messages de faible priorité et 4 pour les messages importants.
Démarrage rapide avancé
Pour en savoir plus sur les nombreux autres indicateurs, consultez doc/advanced/demo_advanced.md.
Résolution de bogues
Amélioration de la mémoire et de la vitesse, mais diminution de la précision.
Si votre GPU Nvidia ne manque pas de mémoire pendant l'exécution, ignorez cette étape !
Utilisez net_resolution à vos risques et périls : si votre GPU manque de mémoire ou si vous n'avez pas de GPU Nvidia, vous pouvez réduire la valeur de --net_resolution pour améliorer la vitesse et réduire les besoins en mémoire, mais cela réduira également considérablement la précision ! Plus la résolution est basse, moins la précision est élevée, mais la vitesse et la mémoire sont meilleures.
|
# Ubuntu et Mac ./build/examples/openpose/openpose.bin --video examples/media/video.avi --net_resolution -1x320 ./build/examples/openpose/openpose.bin --video examples/media/video.avi --net_resolution -1x256 ./build/examples/openpose/openpose.bin --video examples/media/video.avi --net_resolution -1x196 ./build/examples/openpose/openpose.bin --video examples/media/video.avi --net_resolution -1x128 :: Windows - Portable Demo bin\OpenPoseDemo.exe --video examples/media/video.avi --net_resolution -1x320 bin\OpenPoseDemo.exe --video examples/media/video.avi --net_resolution -1x256 bin\OpenPoseDemo.exe --video examples/media/video.avi --net_resolution -1x196 bin\OpenPoseDemo.exe --video examples/media/video.avi --net_resolution -1x128 |
Remarques supplémentaires :
- La résolution par défaut est de -1x368. Toute résolution inférieure améliorera la vitesse.
- La valeur -1 signifie que la résolution sera adaptée pour conserver le format d'image de la source d'entrée. Par exemple, -1x368, 656x-1 et 656x368 donneront exactement la même résolution pour les images d'entrée 720p et 1080p.
- Pour les vidéos, il est recommandé d'utiliser -1 afin de permettre à OpenPose de trouver la résolution idéale. Pour un dossier contenant des images de tailles différentes, ne pas ajouter -1 et utiliser des images aux formats d'image complètement différents peut entraîner des problèmes de mémoire. Par exemple, si un dossier contient deux images de résolution 100x11040 et 10000x368. Ensuite, l'utilisation de la valeur par défaut -1x368 entraînera des résolutions de sortie réseau de 3x368 et 10000x368, ce qui entraînera un manque de mémoire évident pour l'image 10000x368.
Étape supplémentaire pour Mac OS X
Si vous n'utilisez pas de Mac ou un Mac avec processeur uniquement, vous pouvez ignorer cette section.
Si vous utilisez un Mac avec la prise en charge OpenCL sélectionnée et une carte graphique AMD, cela signifie que votre machine possède deux GPU incompatibles (AMD et Intel). Vous devrez alors sélectionner manuellement l'un d'eux (celui d'AMD étant plus puissant). Pour cela, vérifiez d'abord sur quel périphérique votre carte graphique est configurée. Il s'agira probablement du périphérique AMD numéro 2.
| clinfo |
Pour toute commande OpenPose que vous exécutez, ajoutez les 2 indicateurs suivants pour utiliser votre carte AMD pour l'accélération (où num_gpu_start doit être le numéro d'identification indiqué ci-dessus).
| ./build/examples/openpose/openpose.bin --num_gpu 1 --num_gpu_start 2 |
Si vous n'avez qu'une carte graphique Intel intégrée, il s'agira très probablement de l'appareil 1. Ensuite, ajoutez toujours les 2 indicateurs suivants pour utiliser votre carte AMD pour l'accélération.
| ./build/examples/openpose/openpose.bin --num_gpu 1 --num_gpu_start 1 |