Section courante

A propos

Section administrative du site

L'API Python

Presque toutes les fonctionnalités proposé dans OpenPose sont disponible en Python !

Quand utiliser les API Python ou C++ ? Pour lire une entrée spécifique, ajouter une fonction de post-traitement personnalisée ou implémenter votre propre affichage/enregistrement.

Il est conseillé de se familiariser avec la démo OpenPose et les principaux indicateurs OpenPose avant de se lancer dans la lecture des exemples d'API C++ ou Python. Sinon, la compréhension sera beaucoup plus difficile.

Introduction avancée (facultatif)

Ce module présente une API Python pour OpenPose. Il s'agit d'un enveloppe reproduisant la plupart des fonctionnalités de la classe op::Wrapper et permet de renseigner et de récupérer des données de la classe op::Datum à l'aide de constructions Python et Numpy standard.

L'API Python est analogue aux appels de fonctions C++. Vous pouvez les trouver dans python/openpose/openpose_python.cpp#L194.

L'API Python est assez simple : les objets op::Array<float> et cv::Mat sont automatiquement convertis en tableaux numpy. Toute autre structure de données basée sur la bibliothèque standard est automatiquement convertie en objets Python. Par exemple, un std::vector<std::vector<float>> deviendrait [[item, item], [item, item]],... Nous fournissons également un transtypage de op::Rectangle et op::Point exposant simplement les fonctions setter-getter pour [x, y, width, height],...

Compatibilité

Le module Python OpenPose est compatible avec Python 2 et Python 3 (par défaut et recommandé). De plus, il fonctionne sur tous les systèmes d'exploitation compatibles OpenPose. Il utilise Pybind11 pour la cartographie entre les types de données C++ et Python.

Pour compiler, activez BUILD_PYTHON dans CMake-gui ou exécutez cmake -DBUILD_PYTHON=ON .. depuis votre répertoire de compilation. Sous Windows, assurez-vous de compiler l'intégralité de la solution (cliquer sur le bouton vert de lecture ne compile pas la solution entière !). Pour ce faire, faites un clic droit sur la solution du projet OpenPose, puis cliquez sur « Générer la solution » (ou compilez chaque module PyOpenPose individuellement).

Pybind sélectionne par défaut la dernière version de Python (Python 3). Pour utiliser Python 2, définissez les options PYTHON_EXECUTABLE et PYTHON_LIBRARY dans CMake-gui pour la version de Python souhaitée :

# Ubuntu
PYTHON_EXECUTABLE=/usr/bin/python2.7
PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7m.so

# Mac OSX
PYTHON_EXECUTABLE=/usr/local/bin/python2.7
PYTHON_LIBRARY=/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7m.dylib

:: Windows
PYTHON_EXECUTABLE=C:/Users/user/AppData/Local/Programs/Python/Python27/python.exe

Si vous exécutez l'application via la ligne de commande, vous devrez peut-être exécuter cmake deux fois pour que cette modification soit prise en compte.

Installation

Assurez-vous d'avoir suivi les étapes Python décrites dans doc/installation/0_index.md#cmake-configuration.

Tests et développement

Tous les exemples Python du module Tutorial API Python se trouvent dans le répertoire build/examples/tutorial_api_python de votre dossier build. Accédez directement à ce répertoire pour exécuter les exemples.

# Depuis la ligne de commande
cd build/examples/tutorial_api_python

# Python 3 (version par défaut)
python3 01_body_from_image.py
python3 02_whole_body_from_image.py
# python3 [any_other_python_example.py]

# Python 2
python2 01_body_from_image.py
python2 02_whole_body_from_image.py
# python2 [any_other_python_example.py]

Pour un prototypage rapide, vous pouvez simplement dupliquer et renommer les fichiers d'exemple existants dans build/examples/tutorial_api_python, dans ce même dossier, et commencer la compilation. Ces fichiers sont copiés à partir des fichiers d'exemple existants lors de la compilation. Deux alternatives :

Exportation de Python OpenPose

Remarque : Cette étape n'est requise que si vous déplacez les fichiers *.py hors de leur emplacement d'origine ou si vous écrivez de nouveaux scripts *.py hors de build/examples/tutorial_api_python.

Ubuntu/Mac OS X:

Windows :

Assurez-vous que les dossiers build/x{86/64}/Release et build/bin sont copiés avec build/python. Comme indiqué dans l'exemple, leur chemin peut être modifié dans les deux variables suivantes :

  1. sys.path.append(dir_path + '/../../python/openpose/Release);
  2. os.environ['PATH']  = os.environ['PATH'] + ';' + dir_path + '/../../{x86/x64}/Release;' +  dir_path + '/../../bin;'

Problèmes courants

N'utilisez pas PIL

Pour lire des images en Python, veillez à utiliser OpenCV (n'utilisez pas PIL). Nous avons constaté que l'utilisation d'un format d'image PIL dans OpenPose entraîne l'affichage de l'image d'entrée en gris et dupliquée 9 fois (le squelette de sortie apparaît donc 3 fois plus petit que prévu et dupliqué 9 fois).

Impossible d'importer le nom PyOpenPose

L'erreur générale est que PyOpenPose est introuvable (erreur similaire à : ImportError : impossible d'importer le nom pyopenpose). Assurez-vous d'abord que l'indicateur BUILD_PYTHON est activé. Si l'erreur persiste, vérifiez les points suivants :



Dernière mise à jour : Vendredi, le 25 juillet 2025