OpenPose
1.7.0
The first real-time multi-person system to jointly detect human body, hand, facial, and foot keypoints
|
This module performs 3-D keypoint (body, face, and hand) reconstruction and rendering for 1 person. We will not keep updating it nor solving questions/issues about it at the moment. It requires the user to be familiar with computer vision and camera calibration, including extraction of intrinsic and extrinsic parameters.
Check doc/installation/2_additional_settings.md#3d-reconstruction-module for installation steps.
In order to increase the 3-D reconstruction accuracy, OpenPose optionally performs non-linear optimization if Ceres solver support is enabled (only available in Ubuntu for now). To enable it, check doc/installation/2_additional_settings.md#3d-reconstruction-module for more details.
NewestFirstOverwrite
modes enabled. Hence, the algorithm will always get the last synchronized frame from each camera, deleting the rest.freeglut
library.This demo assumes n arbitrary stereo cameras from the FLIR company (formerly Point Grey). Ideally any USB-3 FLIR model should work, but we have only used the following specific specifications:
Blackfly S
section in https://www.ptgrey.com/tan/11052 or https://www.ptgrey.com/KB/11052.Configuring USBFS
in http://www.ptgrey.com/KB/10685.The user must manually get the intrinsic and extrinsic parameters of the stereo-cameras. Note, we will assume Flir
cameras, which is specified by default with the flag --camera_parameter_path "models/cameraParameters/flir/"
. Otherwise, change the path to your camera name accordingly.
There are 2 alternatives to calibrate the cameras:
models/cameraParameters/flir/{camera_serial_number}.xml
.CameraMatrix
), the intrinsic parameters (Intrinsics
), and the distortion coefficients (Distortion
). Copy the format from models/cameraParameters/flir/17012332.xml.example
. For the extrinsic parameters of the camera, it allows you to set the coordinate origin (so that 3-d keypoints are distances with respect to that origin).CameraMatrix
as the identity matrix of size 3x4, and the CameraMatrix
of the other cameras as the camera extrinsic parameters of from those cameras with respect to the main camera M_1_i
.models/cameraParameters/flir/
, the program will check at runtime which FLIR cameras are detected and simply read those camera parameters. If the file corresponding to any of the cameras detected at runtime is not found, OpenPose will return an error.OpenPose will display the cameras sorted by serial number, starting in the left with the image corresponding to the lowest serial number. When the program is run, OpenPose displays the camera serial number associated to each index of each detected camera. If the number of cameras detected is different to the number of actual cameras, make sure the hardware is properly connected and the camera leds are on.
Check the doc/01_demo.md#3-d-reconstruction for basic examples.
The visual GUI should show 3 screens.
It should be similar to the following image.
Tianyi Zhao testing the OpenPose 3D Module
You can copy and modify the OpenPose 3-D demo to use any camera brand by:
WITH_FLIR_CAMERA
while compiling CMake.examples/tutorial_api_cpp/14_synchronous_custom_input.cpp
(or 18_synchronous_custom_all_and_datum.cpp
).WUserInput
and add your custom code there. Your code should fill Datum::name
, Datum::cameraMatrix
, Datum::cvInputData
, and Datum::cvOutputData
(fill cvOutputData = cvInputData).WUserPostProcessing
and WUserOutput
(unless you want to have your custom post-processing and/or output).Note that your custom code should retrieve synchronized images from your cameras or any other source, as well as their intrinsic and extrinsic camera parameters.
FreeGLUT is a quite light library. Due to that, there is a known bug in the 3D module:
Esc
key. Clicking the close button will cause a core dumped or std::exception error in OpenPose. Reason: There is no way to control the behaviour of the exit button in a FreeGLUT program. Feel free to let us know or create a pull request if you find a workaround applicable to 3-D OpenPose. Another alternative is ussing --disable_multi_thread
in OpenPose. This would avoid the issue but slow down the program, especially in multi-GPU systems.