diff --git a/doc/modules/python_module.md b/doc/modules/python_module.md index 556cf4adfeb718ba818b65ddade240cf1dfbbbbb..e0dc8a2003b58c1e1291d46f457486e7e07275bc 100644 --- a/doc/modules/python_module.md +++ b/doc/modules/python_module.md @@ -1,5 +1,4 @@ -OpenPose Python Module and Demo -============================================= +# OpenPose Python Module and Demo ## Contents 1. [Introduction](#introduction) @@ -18,7 +17,29 @@ This module exposes a Python API for OpenPose. It is effectively a wrapper that ## Compatibility The OpenPose Python module is compatible with both Python 2 and Python 3. In addition, it will also run in all OpenPose compatible operating systems. It uses [Pybind11](https://github.com/pybind/pybind11) for mapping between C++ and Python datatypes. -To compile, enable `BUILD_PYTHON` in cmake. Pybind selects the latest version of Python by default (Python 3). To use Python 2, change `PYTHON_EXECUTABLE` and `PYTHON_LIBRARY` flags in cmake to your desired python version. +To compile, enable `BUILD_PYTHON` in cmake. Pybind selects the latest version of Python by default (Python 3). To use Python 2, change `PYTHON_EXECUTABLE` and `PYTHON_LIBRARY` flags in cmake-gui to your desired python version. + +Ubuntu Eg: + +``` +PYTHON_EXECUTABLE=/usr/bin/python2.7 +PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7m.so +``` + +Mac OSX Eg: + +``` +PYTHON_EXECUTABLE=/usr/local/bin/python2.7 +PYTHON_LIBRARY=/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7m.dylib +``` + +Windows Eg: + +``` +PYTHON_EXECUTABLE=C:/Users/user/AppData/Local/Programs/Python/Python27/python.exe +``` + +If run via the command line, you may need to run cmake twice in order for this change to take effect. @@ -61,5 +82,69 @@ python3 2_whole_body_from_image.py ## Exporting Python OpenPose Note: This step is only required if you are moving the `*.py` files outside their original location, or writting new `*.py` scripts outside `build/examples/tutorial_api_python`. -- Option a, installing OpenPose: On an Ubuntu or OSX based system, you could install OpenPose by running `sudo make install`, you could then set the OpenPose path in your python scripts to the OpenPose installation path (default: `/usr/local/python`) and start using OpenPose at any location. Take a look at `build/examples/tutorial_pose/1_body_from_image.py` for an example. -- Option b, not installing OpenPose: To move the OpenPose Python API demos to a different folder, ensure that the line `sys.path.append('{OpenPose_path}/python')` is properly set in your `*.py` files, where `{OpenPose_path}` points to your build folder of OpenPose. Take a look at `build/examples/tutorial_pose/1_body_from_image.py` for an example. +Ubuntu/OSX: + +- Option a, installing OpenPose: On an Ubuntu or OSX based system, you could install OpenPose by running `sudo make install`, you could then set the OpenPose path in your python scripts to the OpenPose installation path (default: `/usr/local/python`) and start using OpenPose at any location. Take a look at `build/examples/tutorial_api_python/1_body_from_image.py` for an example. +- Option b, not installing OpenPose: To move the OpenPose Python API demos to a different folder, ensure that the line `sys.path.append('{OpenPose_path}/python')` is properly set in your `*.py` files, where `{OpenPose_path}` points to your build folder of OpenPose. Take a look at `build/examples/tutorial_api_python/1_body_from_image.py` for an example. + +Windows: + +- Ensure that the folder `build/x{86/64}/Release`and `build/bin` are copied along with `build/python` As noted in the example, the path for these can be changed in the following two variables: + + ``` + sys.path.append(dir_path + '/../../python/openpose/Release); + os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../{x86/x64}/Release;' + dir_path + '/../../bin;' + ``` + + + +#### Common Issues +The error in general is that openpose cannot be found. Ensure first that `BUILD_PYTHON` flag is set to ON. If the error persists, check the following: + +In the script you are running, check for the following line, and run the following command in the same location as where the file is + +**Ubuntu/OSX:** + +`sys.path.append('../../python');` + +``` +ls ../../python/openpose +``` + +Check the contents of this location. It should contain one of the following files: + +``` +pyopenpose.cpython-35m-x86_64-linux-gnu.so +pyopenpose.so +``` + +If you do not have any one of those, you may not have compiled openpose successfully, or you may be running the examples, not from the build folder but the source folder. If you have the first one, you have compiled pyopenpose for python 3, and have to run the scripts with python3, and vice versa for the 2nd one. Follow the testing examples above for exact commands. + +**Windows:** + +Python for Openpose needs to be compiled in Release mode for now. This can be done in [Visual Studio](https://cdn.stereolabs.com/docs/getting-started/images/release_mode.png). Once that is done check this line: + +`sys.path.append(dir_path + '/../../python/openpose/Release');` + +``` +dir ../../python/openpose/Release +``` + +Check the contents of this location. It should contain one of the following files: + +``` +pyopenpose.cp36-win_amd64.pyd +pyopenpose.pyd +``` + +If such a folder does not exist, you need to compile in Release mode as seen above. If you have the first one, you have compiled pyopenpose for python 3, and have to run the scripts with python3, and vice versa for the 2nd one. Follow the testing examples above for exact commands. If that still does not work, check this line: + +`os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'` + +``` +dir ../../x64/Release +dir ../../bin +``` + +Ensure that both of these paths exist, as pyopenpose needs to reference those libraries. If they don't exist, change the path so that they point to the correct location in your build folder + diff --git a/examples/tutorial_api_cpp/08_heatmaps_from_image.cpp b/examples/tutorial_api_cpp/08_heatmaps_from_image.cpp index 0b5eee0f4b62e4ed0c3d1fe4954c60fcb21e8469..4bc280eda8ba164c2b5aa7152b899ef9ba824a33 100644 --- a/examples/tutorial_api_cpp/08_heatmaps_from_image.cpp +++ b/examples/tutorial_api_cpp/08_heatmaps_from_image.cpp @@ -43,7 +43,7 @@ bool display( const cv::Mat inputNetDataR( height, width, CV_32F, &inputNetData.getPtr()[2*height*width]); cv::Mat netInputImage; - cv::merge({inputNetDataB, inputNetDataG, inputNetDataR}, netInputImage); + cv::merge(std::vector{inputNetDataB, inputNetDataG, inputNetDataR}, netInputImage); netInputImage = (netInputImage+0.5)*255; // Turn into uint8 cv::Mat cv::Mat netInputImageUint8; diff --git a/examples/tutorial_api_python/1_body_from_image.py b/examples/tutorial_api_python/1_body_from_image.py index f89225f4a6e0a263894c157f60f94684bfcc20cc..d284ffc430c4781c87f7ad7740f08028f0af883d 100644 --- a/examples/tutorial_api_python/1_body_from_image.py +++ b/examples/tutorial_api_python/1_body_from_image.py @@ -63,6 +63,5 @@ opWrapper.emplaceAndPop([datum]) # Display Image print("Body keypoints: \n" + str(datum.poseKeypoints)) -while 1: - cv2.imshow("win", datum.cvOutputData) - cv2.waitKey(15) +cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) +cv2.waitKey(0) diff --git a/examples/tutorial_api_python/2_whole_body_from_image.py b/examples/tutorial_api_python/2_whole_body_from_image.py index fbf7f8a617973a84be90bd9ec90f216d8ed4a47e..f71a193cb6d839929618acd446da28cc742371b1 100644 --- a/examples/tutorial_api_python/2_whole_body_from_image.py +++ b/examples/tutorial_api_python/2_whole_body_from_image.py @@ -68,6 +68,5 @@ print("Body keypoints: \n" + str(datum.poseKeypoints)) print("Face keypoints: \n" + str(datum.faceKeypoints)) print("Left hand keypoints: \n" + str(datum.handKeypoints[0])) print("Right hand keypoints: \n" + str(datum.handKeypoints[1])) -while 1: - cv2.imshow("win", datum.cvOutputData) - cv2.waitKey(15) +cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) +cv2.waitKey(0) diff --git a/examples/tutorial_api_python/3_heatmaps_from_image.py b/examples/tutorial_api_python/3_heatmaps_from_image.py index 0d16812d2608c5c27ad7791ac587ca5455d7b64a..7a47331e7838ecb9c848d873f1493adb3f5b1c9f 100644 --- a/examples/tutorial_api_python/3_heatmaps_from_image.py +++ b/examples/tutorial_api_python/3_heatmaps_from_image.py @@ -35,7 +35,9 @@ args = parser.parse_known_args() params = dict() params["model_folder"] = "../../../models/" params["heatmaps_add_parts"] = True +params["heatmaps_add_bkg"] = True params["heatmaps_add_PAFs"] = True +params["heatmaps_scale"] = 2 # Add others in path? for i in range(0, len(args[1])): @@ -69,7 +71,7 @@ outputImageF = (datum.inputNetData[0].copy())[0,:,:,:] + 0.5 outputImageF = cv2.merge([outputImageF[0,:,:], outputImageF[1,:,:], outputImageF[2,:,:]]) outputImageF = (outputImageF*255.).astype(dtype='uint8') heatmaps = datum.poseHeatMaps.copy() -heatmaps = (heatmaps*255.).astype(dtype='uint8') +heatmaps = (heatmaps).astype(dtype='uint8') # Display Image counter = 0 @@ -78,7 +80,9 @@ while 1: heatmap = heatmaps[counter, :, :].copy() heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) combined = cv2.addWeighted(outputImageF, 0.5, heatmap, 0.5, 0) - cv2.imshow("win", combined) - cv2.waitKey(-1) + cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", combined) + key = cv2.waitKey(-1) + if key == 27: + break counter += 1 counter = counter % num_maps diff --git a/examples/tutorial_api_python/4_keypoints_from_images.py b/examples/tutorial_api_python/4_keypoints_from_images.py new file mode 100644 index 0000000000000000000000000000000000000000..b2c4573be0f9c175d8b6a3f20bde69bdf4b801e6 --- /dev/null +++ b/examples/tutorial_api_python/4_keypoints_from_images.py @@ -0,0 +1,79 @@ +# From Python +# It requires OpenCV installed for Python +import sys +import cv2 +import os +from sys import platform +import argparse +import time + +# Import Openpose (Windows/Ubuntu/OSX) +dir_path = os.path.dirname(os.path.realpath(__file__)) +try: + # Windows Import + if platform == "win32": + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append(dir_path + '/../../python/openpose/Release'); + os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;' + import pyopenpose as op + else: + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append('../../python'); + # If you run `make install` (default path is `/usr/local/python` for Ubuntu), you can also access the OpenPose/python module from there. This will install OpenPose and the python library at your desired installation path. Ensure that this is in your python path in order to use it. + # sys.path.append('/usr/local/python') + from openpose import pyopenpose as op +except ImportError as e: + print('Error: OpenPose library could not be found. Did you enable `BUILD_PYTHON` in CMake and have this Python script in the right folder?') + raise e + +# Flags +parser = argparse.ArgumentParser() +parser.add_argument("--image_dir", default="../../../examples/media/", help="Process a directory of images. Read all standard formats (jpg, png, bmp, etc.).") +parser.add_argument("--no_display", default=False, help="Enable to disable the visual display.") +args = parser.parse_known_args() + +# Custom Params (refer to include/openpose/flags.hpp for more parameters) +params = dict() +params["model_folder"] = "../../../models/" + +# Add others in path? +for i in range(0, len(args[1])): + curr_item = args[1][i] + if i != len(args[1])-1: next_item = args[1][i+1] + else: next_item = "1" + if "--" in curr_item and "--" in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = "1" + elif "--" in curr_item and "--" not in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = next_item + +# Construct it from system arguments +# op.init_argv(args[1]) +# oppython = op.OpenposePython() + +# Starting OpenPose +opWrapper = op.WrapperPython() +opWrapper.configure(params) +opWrapper.start() + +# Read frames on directory +imagePaths = op.get_images_on_directory(args[0].image_dir); +start = time.time() + +# Process and display images +for imagePath in imagePaths: + datum = op.Datum() + imageToProcess = cv2.imread(imagePath) + datum.cvInputData = imageToProcess + opWrapper.emplaceAndPop([datum]) + + print("Body keypoints: \n" + str(datum.poseKeypoints)) + + if not args[0].no_display: + cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) + key = cv2.waitKey(15) + if key == 27: break + +end = time.time() +print("OpenPose demo successfully finished. Total time: " + str(end - start) + " seconds") diff --git a/examples/tutorial_api_python/5_keypoints_from_images_multi_gpu.py b/examples/tutorial_api_python/5_keypoints_from_images_multi_gpu.py new file mode 100644 index 0000000000000000000000000000000000000000..43defed081b5491bac2b4e9c2b64712fb1aac82b --- /dev/null +++ b/examples/tutorial_api_python/5_keypoints_from_images_multi_gpu.py @@ -0,0 +1,103 @@ +# From Python +# It requires OpenCV installed for Python +import sys +import cv2 +import os +from sys import platform +import argparse +import time + +# Import Openpose (Windows/Ubuntu/OSX) +dir_path = os.path.dirname(os.path.realpath(__file__)) +try: + # Windows Import + if platform == "win32": + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append(dir_path + '/../../python/openpose/Release'); + os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;' + import pyopenpose as op + else: + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append('../../python'); + # If you run `make install` (default path is `/usr/local/python` for Ubuntu), you can also access the OpenPose/python module from there. This will install OpenPose and the python library at your desired installation path. Ensure that this is in your python path in order to use it. + # sys.path.append('/usr/local/python') + from openpose import pyopenpose as op +except ImportError as e: + print('Error: OpenPose library could not be found. Did you enable `BUILD_PYTHON` in CMake and have this Python script in the right folder?') + raise e + +# Flags +parser = argparse.ArgumentParser() +parser.add_argument("--image_dir", default="../../../examples/media/", help="Process a directory of images. Read all standard formats (jpg, png, bmp, etc.).") +parser.add_argument("--no_display", default=False, help="Enable to disable the visual display.") +args = parser.parse_known_args() + +# Custom Params (refer to include/openpose/flags.hpp for more parameters) +params = dict() +params["model_folder"] = "../../../models/" + +# Add others in path? +for i in range(0, len(args[1])): + curr_item = args[1][i] + if i != len(args[1])-1: next_item = args[1][i+1] + else: next_item = "1" + if "--" in curr_item and "--" in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = "1" + elif "--" in curr_item and "--" not in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = next_item + +# Construct it from system arguments +# op.init_argv(args[1]) +# oppython = op.OpenposePython() + +# Starting OpenPose +opWrapper = op.WrapperPython() +opWrapper.configure(params) +opWrapper.start() + +# Read frames on directory +imagePaths = op.get_images_on_directory(args[0].image_dir); + +# Read number of GPUs in your system +numberGPUs = op.get_gpu_number() +start = time.time() + +# Process and display images +for imageBaseId in range(0, len(imagePaths), numberGPUs): + + # Create datums + datums = [] + + # Read and push images into OpenPose wrapper + for gpuId in range(0, numberGPUs): + + imageId = imageBaseId+gpuId + if imageId < len(imagePaths): + + imagePath = imagePaths[imageBaseId+gpuId] + datum = op.Datum() + imageToProcess = cv2.imread(imagePath) + datum.cvInputData = imageToProcess + datums.append(datum) + opWrapper.waitAndEmplace([datums[-1]]) + + # Retrieve processed results from OpenPose wrapper + for gpuId in range(0, numberGPUs): + + imageId = imageBaseId+gpuId + if imageId < len(imagePaths): + + datum = datums[gpuId] + opWrapper.waitAndPop([datum]) + + print("Body keypoints: \n" + str(datum.poseKeypoints)) + + if not args[0].no_display: + cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) + key = cv2.waitKey(15) + if key == 27: break + +end = time.time() +print("OpenPose demo successfully finished. Total time: " + str(end - start) + " seconds") diff --git a/examples/tutorial_api_python/6_face_from_image.py b/examples/tutorial_api_python/6_face_from_image.py new file mode 100644 index 0000000000000000000000000000000000000000..659f3acf7dc72a49eb5b07c0d1b8b0c872699d80 --- /dev/null +++ b/examples/tutorial_api_python/6_face_from_image.py @@ -0,0 +1,79 @@ +# From Python +# It requires OpenCV installed for Python +import sys +import cv2 +import os +from sys import platform +import argparse +import time + +# Import Openpose (Windows/Ubuntu/OSX) +dir_path = os.path.dirname(os.path.realpath(__file__)) +try: + # Windows Import + if platform == "win32": + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append(dir_path + '/../../python/openpose/Release'); + os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;' + import pyopenpose as op + else: + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append('../../python'); + # If you run `make install` (default path is `/usr/local/python` for Ubuntu), you can also access the OpenPose/python module from there. This will install OpenPose and the python library at your desired installation path. Ensure that this is in your python path in order to use it. + # sys.path.append('/usr/local/python') + from openpose import pyopenpose as op +except ImportError as e: + print('Error: OpenPose library could not be found. Did you enable `BUILD_PYTHON` in CMake and have this Python script in the right folder?') + raise e + +# Flags +parser = argparse.ArgumentParser() +parser.add_argument("--image_path", default="../../../examples/media/COCO_val2014_000000000241.jpg", help="Process an image. Read all standard formats (jpg, png, bmp, etc.).") +args = parser.parse_known_args() + +# Custom Params (refer to include/openpose/flags.hpp for more parameters) +params = dict() +params["model_folder"] = "../../../models/" +params["face"] = True +params["face_detector"] = 2 +params["body_disable"] = True + +# Add others in path? +for i in range(0, len(args[1])): + curr_item = args[1][i] + if i != len(args[1])-1: next_item = args[1][i+1] + else: next_item = "1" + if "--" in curr_item and "--" in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = "1" + elif "--" in curr_item and "--" not in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = next_item + +# Construct it from system arguments +# op.init_argv(args[1]) +# oppython = op.OpenposePython() + +# Starting OpenPose +opWrapper = op.WrapperPython() +opWrapper.configure(params) +opWrapper.start() + +# Read image and face rectangle locations +imageToProcess = cv2.imread(args[0].image_path) +faceRectangles = [ + op.Rectangle(330.119385, 277.532715, 48.717274, 48.717274), + op.Rectangle(24.036991, 267.918793, 65.175171, 65.175171), + op.Rectangle(151.803436, 32.477852, 108.295761, 108.295761), +] + +# Create new datum +datum = op.Datum() +datum.cvInputData = imageToProcess +datum.faceRectangles = faceRectangles + +# Process and display image +opWrapper.emplaceAndPop([datum]) +print("Face keypoints: \n" + str(datum.faceKeypoints)) +cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) +cv2.waitKey(0) diff --git a/examples/tutorial_api_python/7_hand_from_image.py b/examples/tutorial_api_python/7_hand_from_image.py new file mode 100644 index 0000000000000000000000000000000000000000..2cba900d78dfb6a0ee604588fd10c73b5d6bb0b8 --- /dev/null +++ b/examples/tutorial_api_python/7_hand_from_image.py @@ -0,0 +1,92 @@ +# From Python +# It requires OpenCV installed for Python +import sys +import cv2 +import os +from sys import platform +import argparse +import time + +# Import Openpose (Windows/Ubuntu/OSX) +dir_path = os.path.dirname(os.path.realpath(__file__)) +try: + # Windows Import + if platform == "win32": + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append(dir_path + '/../../python/openpose/Release'); + os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;' + import pyopenpose as op + else: + # Change these variables to point to the correct folder (Release/x64 etc.) + sys.path.append('../../python'); + # If you run `make install` (default path is `/usr/local/python` for Ubuntu), you can also access the OpenPose/python module from there. This will install OpenPose and the python library at your desired installation path. Ensure that this is in your python path in order to use it. + # sys.path.append('/usr/local/python') + from openpose import pyopenpose as op +except ImportError as e: + print('Error: OpenPose library could not be found. Did you enable `BUILD_PYTHON` in CMake and have this Python script in the right folder?') + raise e + +# Flags +parser = argparse.ArgumentParser() +parser.add_argument("--image_path", default="../../../examples/media/COCO_val2014_000000000241.jpg", help="Process an image. Read all standard formats (jpg, png, bmp, etc.).") +args = parser.parse_known_args() + +# Custom Params (refer to include/openpose/flags.hpp for more parameters) +params = dict() +params["model_folder"] = "../../../models/" +params["hand"] = True +params["hand_detector"] = 2 +params["body_disable"] = True + +# Add others in path? +for i in range(0, len(args[1])): + curr_item = args[1][i] + if i != len(args[1])-1: next_item = args[1][i+1] + else: next_item = "1" + if "--" in curr_item and "--" in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = "1" + elif "--" in curr_item and "--" not in next_item: + key = curr_item.replace('-','') + if key not in params: params[key] = next_item + +# Construct it from system arguments +# op.init_argv(args[1]) +# oppython = op.OpenposePython() + +# Starting OpenPose +opWrapper = op.WrapperPython() +opWrapper.configure(params) +opWrapper.start() + +# Read image and face rectangle locations +imageToProcess = cv2.imread(args[0].image_path) +handRectangles = [ + # Left/Right hands person 0 + [ + op.Rectangle(320.035889, 377.675049, 69.300949, 69.300949), + op.Rectangle(0., 0., 0., 0.), + ], + # Left/Right hands person 1 + [ + op.Rectangle(80.155792, 407.673492, 80.812706, 80.812706), + op.Rectangle(46.449715, 404.559753, 98.898178, 98.898178), + ], + # Left/Right hands person 2 + [ + op.Rectangle(185.692673, 303.112244, 157.587555, 157.587555), + op.Rectangle(88.984360, 268.866547, 117.818230, 117.818230), + ] +] + +# Create new datum +datum = op.Datum() +datum.cvInputData = imageToProcess +datum.handRectangles = handRectangles + +# Process and display image +opWrapper.emplaceAndPop([datum]) +print("Left hand keypoints: \n" + str(datum.handKeypoints[0])) +print("Right hand keypoints: \n" + str(datum.handKeypoints[1])) +cv2.imshow("OpenPose 1.4.0 - Tutorial Python API", datum.cvOutputData) +cv2.waitKey(0) diff --git a/examples/tutorial_api_python/CMakeLists.txt b/examples/tutorial_api_python/CMakeLists.txt index 0ee5be182db84839aa1c3c621a6af5dbb152efb5..3a60581b2f5e2b256e09dd7913f7d477120faf42 100644 --- a/examples/tutorial_api_python/CMakeLists.txt +++ b/examples/tutorial_api_python/CMakeLists.txt @@ -3,3 +3,7 @@ configure_file(openpose_python.py openpose_python.py) configure_file(1_body_from_image.py 1_body_from_image.py) configure_file(2_whole_body_from_image.py 2_whole_body_from_image.py) configure_file(3_heatmaps_from_image.py 3_heatmaps_from_image.py) +configure_file(4_keypoints_from_images.py 4_keypoints_from_images.py) +configure_file(5_keypoints_from_images_multi_gpu.py 5_keypoints_from_images_multi_gpu.py) +configure_file(6_face_from_image.py 6_face_from_image.py) +configure_file(7_hand_from_image.py 7_hand_from_image.py) diff --git a/python/openpose/openpose_python.cpp b/python/openpose/openpose_python.cpp index 67e664f136c3cf8f9d28a9b5ed53304b1b2ae66a..a2e7d2fb55ddc1831cf78c3bb92e426a7cb13f5e 100644 --- a/python/openpose/openpose_python.cpp +++ b/python/openpose/openpose_python.cpp @@ -170,13 +170,32 @@ public: auto datumsPtr = std::make_shared>>(l); opWrapper->emplaceAndPop(datumsPtr); } + + void waitAndEmplace(std::vector>& l) + { + auto datumsPtr = std::make_shared>>(l); + opWrapper->waitAndEmplace(datumsPtr); + } + + bool waitAndPop(std::vector>& l) + { + auto datumsPtr = std::make_shared>>(l); + return opWrapper->waitAndPop(datumsPtr); + } }; +std::vector getImagesFromDirectory(const std::string& directoryPath) +{ + return op::getFilesOnDirectory(directoryPath, op::Extensions::Images); +} + PYBIND11_MODULE(pyopenpose, m) { // Functions for Init Params m.def("init_int", &init_int, "Init Function"); m.def("init_argv", &init_argv, "Init Function"); + m.def("get_gpu_number", &op::getGpuNumber, "Get Total GPU"); + m.def("get_images_on_directory", &op::getImagesFromDirectory, "Get Images On Directory"); // OpenposePython py::class_(m, "WrapperPython") @@ -187,6 +206,8 @@ PYBIND11_MODULE(pyopenpose, m) { .def("stop", &WrapperPython::stop) .def("execute", &WrapperPython::exec) .def("emplaceAndPop", &WrapperPython::emplaceAndPop) + .def("waitAndEmplace", &WrapperPython::waitAndEmplace) + .def("waitAndPop", &WrapperPython::waitAndPop) ; // Datum Object