部分摘自原文
OpenPose 作为强大的关键点估计项目,其提供了很多可配置参数选项。完整参数列表可运行:
切换到openpose的根目录下:
cd OPENPOSE_ROOT/
运行程序:
./build/examples/openpose/openpose.bin --help
OpenPose 运行,如:
./build/examples/openpose/openpose.bin
-image_dir /path/to/images/
--num_gpu_start 1
--display 2
--fullscreen
--write_images /path/to/res_images/
--net_resolution "1312x736"
--scale_number 4
--scale_gap 0.25
--hand
--hand_scale_number 6
--hand_scale_range 0.4
--face
./build/examples/openpose/openpose.bin
--image_dir /path/to/images/
--num_gpu_start 1
--display 2
--fullscreen
--write_images /path/to/res_images/
Main Flags
--face: 开启 Face 关键点检测.
--hand: 开启 Hand 关键点检测
--video input.mp4: 读取 Video.
--camera 3: 读取 webcam number 3.
--image_dir path_to_images/: 运行图像路径内的图片.
--ip_camera http://iris.not.iac.es/axis-cgi/mjpg/video.cgi?resolution=320x240?x.mjpeg:
在 streamed IP camera 上运行.
--write_video path.avi: 将处理后的图片保存为 Video.
--write_images folder_path: 将处理后的图片保存到指定路径.
--write_keypoint path/: 在指定路径输出包含人体姿态数据的 JSON, XML 或 YML 文件.
--process_real_time: 对于视频,可能在实时运行时,跳过某些视频帧.
--disable_blending: 如果 --disable_blending=True,则在很色背景上渲染估计结果(如 keypoints skeletons 和 heatmaps),而不显示原始图像. Related: part_to_show,
alpha_pose, and alpha_pose.
--part_to_show: 可视化的预测通道(Prediction channel).
--display 0: 不打开可视化显示窗口. 对于服务器部署和 OpenPose 加速很帮助.
--num_gpu 2 --num_gpu_start 1: 多 GPUs 时,设置开始的 GPU id. 默认使用所有可用的 GPUs.
--model_pose MPI: 采用的模型Model,影响 Keypoints 的数量、运行速度和精度.
--logging_level 3: Logging messages threshold, range [0,255]: 0 - 输出所有信息e & 255 - 不输出任何信息. Current messages in the range [1-4], 1 for
low priority messages and 4 for important ones.
Flags Description
每个 Flag 包括 flag_name, default value 和 description.
DEFINE_int32(logging_level, 3, “The logging level. Integer in the
range [0, 255]. 0 will output any log() message, while 255 will not
output any. Current OpenPose library messages are in the range 0-4: 1
for low priority messages and 4 for important ones.”); 日志输出信息
DEFINE_bool(disable_multi_thread, false, "It would slightly reduce
the frame rate in order to highly reduce the lag. Mainly useful for
DEFINE_int32(profile_speed, 1000, “If PROFILER_ENABLED was set in CMake or Makefile.config files, OpenPose will show some runtime statistics at this frame number.”);
DEFINE_int32(camera, -1, “The camera index for cv::VideoCapture.
Integer in the range [0, 9]. Select a negative number (by default),
to auto-detect and open the first available camera.”); 相机作为输入
DEFINE_string(camera_resolution, “-1x-1”, “Set the camera resolution
(either --camera or --flir_camera). -1x-1 will use the default
1280x720 for --camera, or the maximum flir camera resolution
available for --flir_camera”); 相机分辨率
DEFINE_string(video, “”, “Use a video file instead of the camera. Use
examples/media/video.avi for our default example video.”); Video
作为输入,而不采用相机
DEFINE_string(image_dir, “”, “Process a directory of images. Use
examples/media/ for our default example folder with 20 images. Read
all standard formats (jpg, png, bmp, etc.).”); 待处理图像的路径
DEFINE_bool(flir_camera, false, “Whether to use FLIR (Point-Grey)
stereo camera.”); 是否使用 FLIR 相机
DEFINE_int32(flir_camera_index, -1, “Select -1 (default) to run on
all detected flir cameras at once. Otherwise, select the flir camera
index to run, where 0 corresponds to the detected flir camera with
the lowest serial number, and n to the n-th lowest serial number
camera.”); 可用作为输入的 FLIR 相机
DEFINE_string(ip_camera, “”, “String with the IP camera URL. It
supports protocols like RTSP and HTTP.”); IP 相机 URL
DEFINE_uint64(frame_first, 0, “Start on desired frame number. Indexes
are 0-based, i.e., the first frame has index 0.”); 指定开始运行的帧索引
DEFINE_uint64(frame_step, 1, “Step or gap between processed frames.
E.g., --frame_step 5 would read and process frames 0, 5, 10, etc…”);
跳过处理的帧数
DEFINE_uint64(frame_last, -1, “Finish on desired frame number. Select
-1 to disable. Indexes are 0-based, e.g., if set to 10, it will process 11 frames (0-10).”); 指定结束运行的帧索引
DEFINE_bool(frame_flip, false, “Flip/mirror each frame (e.g., for
real time webcam demonstrations).”); 每一帧进行 Flip/Mirror 处理
DEFINE_int32(frame_rotate, 0, “Rotate each frame, 4 possible values:
0, 90, 180, 270.”); 每一帧进行旋转 rotate 处理
DEFINE_bool(frames_repeat, false, “Repeat frames when finished.”);
结束时重复帧
DEFINE_bool(process_real_time, false, “Enable to keep the original
source frame rate (e.g., for video). If the processing time is too
long, it will skip frames. If it is too fast, it will slow it
down.”); 实时处理
DEFINE_string(camera_parameter_folder,
“models/cameraParameters/flir/”, “String with the folder where the
camera parameters are located.”); 相机参数所在路径
DEFINE_bool(frame_keep_distortion, false, “If false (default), it
will undistortionate the image based on the camera_parameter_folder
camera parameters; if true, it will not undistortionate, i.e., it
will leave it as it is.”); 每一帧是否扭曲 distortion 处理
DEFINE_string(model_folder, “models/”, “Folder path (absolute or
relative) where the models (pose, face, …) are located.”); 模型放置路径
DEFINE_string(output_resolution, “-1x-1”, “The image resolution
(display and output). Use “-1x-1” to force the program to use the
input image resolution.”); 输出图像分辨率
DEFINE_int32(num_gpu, -1, “The number of GPU devices to use. If
negative, it will use all the available GPUs in your machine.”); 使用的
GPU 设置
DEFINE_int32(num_gpu_start, 0, “GPU device start number.”); GPU ID 设置
DEFINE_int32(keypoint_scale, 0, “Scaling of the (x,y) coordinates of
the final pose data array, i.e., the scale of the (x,y) coordinates
that will be saved with the write_json & write_keypoint flags. Select
0 to scale it to the original source resolution; 1to scale it to the
net output size (set with net_resolution); 2 to scale it to the final
output size (set with resolution); 3 to scale it in the range [0,1],
where (0,0) would be the top-left corner of the image, and (1,1) the
bottom-right one; and 4 for range [-1,1], where (-1,-1) would be the
top-left corner of the image, and (1,1) the bottom-right one. Non
related with scale_number and scale_gap.”); Keypoints 缩放尺度scale
DEFINE_int32(number_people_max, -1, “This parameter will limit the
maximum number of people detected, by keeping the people with top
scores. The score is based in person area over the image, body part
score, as well as joint score (between each pair of connected body
parts). Useful if you know the exact number of people in the scene,
so it can remove false positives (if all the people have been
detected. However, it might also include false negatives by removing
very small or highly occluded people. -1 will keep them all.”);
检测到的人体数量
DEFINE_bool(maximize_positives, false,“It reduces the thresholds to
accept a person candidate. It highly increases both false and true
positives. I.e., it maximizes average recall but could harm average
precision.”); 最大正样本设置,降低作为人体候选的阈值,能够最大化平均 Recall,但会降低平均 Precision
DEFINE_double(fps_max, -1., “Maximum processing frame rate. By
default (-1), OpenPose will process frames as fast as possible.
Example usage: If OpenPose is displaying images too quickly, this can
reduce the speed so the user can analyze better each frame from the
GUI.”); 最大处理的帧速率
DEFINE_bool(body_disable, false, “Disable body keypoint detection.
Option only possible for faster (but less accurate) face keypoint
detection.”); 是否检测 Body 关键点
DEFINE_string(model_pose, “BODY_25”, “Model to be used. E.g., COCO
(18 keypoints), MPI (15 keypoints, ~10% faster), MPI_4_layers (15
keypoints, even faster but less accurate).”); 采用的 Body 模型,如 Body_25
DEFINE_string(net_resolution, “-1x368”, “Multiples of 16. If it is
increased, the accuracy potentially increases. If it is decreased,
the speed increases. For maximum speed-accuracy balance, it should
keep the closest aspect ratio possible to the images or videos to be
processed. Using -1 in any of the dimensions, OP will choose the
optimal aspect ratio depending on the user’s input value. E.g., the
default -1x368 is equivalent to 656x368 in 16:9 resolutions, e.g.,
full HD (1980x1080) and HD (1280x720) resolutions.”);
模型网络的输入分辨率,16的倍数
DEFINE_int32(scale_number, 1, “Number of scales to average.”);
多尺度Scales 数
DEFINE_double(scale_gap, 0.3, “Scale gap between scales. No effect
unless scale_number > 1. Initial scale is always 1. If you want to
change the initial scale, you actually want to multiply the
net_resolution by your desired initial scale.”); 尺度Scales 间的 scale
gap
DEFINE_bool(heatmaps_add_parts, false, “If true, it will fill
op::Datum::poseHeatMaps array with the body part heatmaps, and
analogously face & hand heatmaps to op::Datum::faceHeatMaps &
op::Datum::handHeatMaps. If more than one add_heatmaps_X flag is
enabled, it will place then in sequential memory order: body parts +
bkg + PAFs. It will follow the order on POSE_BODY_PART_MAPPING in
src/openpose/pose/poseParameters.cpp. Program speed will considerably
decrease. Not required for OpenPose, enable it only if you intend to
explicitly use this information later.”); 是否添加 Body Parts 的 heatmaps
DEFINE_bool(heatmaps_add_bkg, false, “Same functionality as
add_heatmaps_parts, but adding the heatmap corresponding to
background.”); 是否添加 BKG 的 heatmaps
DEFINE_bool(heatmaps_add_PAFs, false, “Same functionality as
add_heatmaps_parts, but adding the PAFs.”); 是否添加 PAFs 的 heatmaps
DEFINE_int32(heatmaps_scale, 2, “Set 0 to scale
op::Datum::poseHeatMaps in the range [-1,1], 1 for [0,1]; 2 for
integer rounded [0,255]; and 3 for no scaling.”); heatmaps scale
DEFINE_bool(part_candidates, false, “Also enable write_json in order
to save this information. If true, it will fill the
op::Datum::poseCandidates array with the body part candidates.
Candidates refer to all the detected body parts, before being
assembled into people. Note that the number of candidates is equal or
higher than the number of final body parts (i.e., after being
assembled into people). The empty body parts are filled with 0s.
Program speed will slightly decrease. Not required for OpenPose,
enable it only if you intend to explicitly use this information.”);
是否保存 Body Part Candidates
DEFINE_bool(face, false, “Enables face keypoint detection. It will
share some parameters from the body pose, e.g. model_folder. Note
that this will considerable slow down the performance and increse the
required GPU memory. In addition, the greater number of people on the
image, the slower OpenPose will be.”); 是否进行 Face 关键点检测
DEFINE_string(face_net_resolution, “368x368”, “Multiples of 16 and
squared. Analogous to net_resolution but applied to the face keypoint
detector. 320x320 usually works fine while giving a substantial speed
up when multiple faces on the image.”); Face 模型网络的输入分辨率
DEFINE_bool(hand, false, “Enables hand keypoint detection. It will
share some parameters from the body pose, e.g. model_folder.
Analogously to --face, it will also slow down the performance,
increase the required GPU memory and its speed depends on the number
of people.”); 是否进行 Hand 关键点检测
DEFINE_string(hand_net_resolution, “368x368”, “Multiples of 16 and
squared. Analogous to net_resolution but applied to the hand keypoint
detector.”); Hand 模型的网络输入分辨率
DEFINE_int32(hand_scale_number, 1, “Analogous to scale_number but
applied to the hand keypoint detector. Our best results were found
with hand_scale_number = 6 and hand_scale_range = 0.4.”); 类似于
scale_number 参数,但只用于 Hand 关键点检测
DEFINE_double(hand_scale_range, 0.4, “Analogous purpose than
scale_gap but applied to the hand keypoint detector. Total range
between smallest and biggest scale. The scales will be centered in
ratio 1. E.g., if scaleRange = 0.4 and scalesNumber = 2, then there
will be 2 scales, 0.8 and 1.2.”); 类似于 scale_gap 参数,但只用于 Hand 关键点检测
DEFINE_bool(hand_tracking, false, “Adding hand tracking might improve
hand keypoints detection for webcam (if the frame rate is high
enough, i.e., >7 FPS per GPU) and video. This is not person ID
tracking, it simply looks for hands in positions at which hands were
located in previous frames, but it does not guarantee the same person
ID among frames.”); Hand 追踪Tracking
DEFINE_bool(3d, false, “Running OpenPose 3-D reconstruction demo: 1)
Reading from a stereo camera system. 2) Performing 3-D reconstruction
from the multiple views. 3) Displaying 3-D reconstruction results.
Note that it will only display 1 person. If multiple people is
present, it will fail.”); 是否进行 3D 重建Reconstruction
DEFINE_int32(3d_min_views, -1, “Minimum number of views required to
reconstruct each keypoint. By default (-1), it will require all the
cameras to see the keypoint in order to reconstruct it.”);
重构每个关键点所需的最小视角Views 数
DEFINE_int32(3d_views, 1, “Complementary option to --image_dir or
–video. OpenPose will read as many images per iteration, allowing tasks such as stereo camera processing (–3d). Note that
–camera_parameters_folder must be set. OpenPose must find as many xml files in the parameter folder as this number indicates.”); 3D
视角Videos
DEFINE_bool(identification, false, “Experimental, not available yet.
Whether to enable people identification across frames.”); 是否跨帧 Person Identification(暂不可用)
DEFINE_int32(tracking, -1, “Experimental, not available yet. Whether
to enable people tracking across frames. The value indicates the
number of frames where tracking is run between each OpenPose keypoint
detection. Select -1 (default) to disable it or 0 to run
simultaneously OpenPose keypoint detector and tracking for
potentially higher accurary than only OpenPose.”); 是否跨帧 Person
Tracking(暂不可用)
DEFINE_int32(ik_threads, 0, “Experimental, not available yet. Whether
to enable inverse kinematics (IK) from 3-D keypoints to obtain 3-D
joint angles. By default (0 threads), it is disabled. Increasing the
number of threads will increase the speed but also the global system
latency.”); 是否可以 inverse kinematics (暂不可用)
DEFINE_double(render_threshold, 0.05, “Only estimated keypoints whose
score confidences are higher than this threshold will be rendered.
Generally, a high threshold (> 0.5) will only render very clear body
parts; while small thresholds (~0.1) will also output guessed and
occluded keypoints, but also more false positives (i.e., wrong
detections).”); 渲染阈值,只有估计关键的置信度大于阈值的才进行渲染
DEFINE_int32(render_pose, -1, “Set to 0 for no rendering, 1 for CPU
rendering (slightly faster), and 2 for GPU rendering (slower but
greater functionality, e.g., alpha_X flags). If -1, it will pick CPU
if CPU_ONLY is enabled, or GPU if CUDA is enabled. If rendering is
enabled, it will render both outputData and cvOutputData with the
original image and desired body part to be shown (i.e., keypoints,
heat maps or PAFs).”); 渲染姿态,0 - no rendering, 1 - CPU rendering,2 -GPU rendering
DEFINE_double(alpha_pose, 0.6, “Blending factor (range 0-1) for the
body part rendering. 1 will show it completely, 0 will hide it. Only
valid for GPU rendering.”); Body Part rendering 的渲染因子, 只可用于 GPU rendering
DEFINE_double(alpha_heatmap, 0.7, “Blending factor (range 0-1)
between heatmap and original frame. 1 will only show the heatmap, 0
will only show the frame. Only valid for GPU rendering.”); heatmaps
和原始帧图像的渲染因子, GPU rendering
DEFINE_double(face_render_threshold, 0.4, “Analogous to
render_threshold, but applied to the face keypoints.”); 类似于
render_threshold,但用于 Face 关键点
DEFINE_int32(face_render, -1, “Analogous to render_pose but applied
to the face. Extra option: -1 to use the same configuration that
render_pose is using.”); 类似于 render_pose,但用于 Face 关键点
DEFINE_double(face_alpha_pose, 0.6, “Analogous to alpha_pose but
applied to face.”); 类似于 alpha_pose,但用于 Face 关键点
DEFINE_double(face_alpha_heatmap, 0.7, “Analogous to alpha_heatmap
but applied to face.”); 类似于 alpha_heatmap,但用于 Face 关键点
DEFINE_double(hand_render_threshold, 0.2, “Analogous to
render_threshold, but applied to the hand keypoints.”); 类似于
render_threshold,但用于 Hand 关键点
DEFINE_int32(hand_render, -1, “Analogous to render_pose but applied
to the hand. Extra option: -1 to use the same configuration that
render_pose is using.”); 类似于 render_pose,但用于 Hand 关键点
DEFINE_double(hand_alpha_pose, 0.6, “Analogous to alpha_pose but
applied to hand.”); 类似于 alpha_pose,但用于 Hand 关键点
DEFINE_double(hand_alpha_heatmap, 0.7, “Analogous to alpha_heatmap but applied to hand.”); 类似于 alpha_heatmap,但用于 Hand 关键点
DEFINE_string(write_images, “”, “Directory to write rendered frames
in write_images_format image format.”); 渲染图像帧的保存路径
DEFINE_string(write_images_format, “png”, “File extension and format
for write_images, e.g., png, jpg or bmp. Check the OpenCV function
cv::imwrite for all compatible extensions.”); 渲染图像帧的保存格式
DEFINE_string(write_video, “”, “Full file path to write rendered
frames in motion JPEG video format. It might fail if the final path
does not finish in .avi. It internally uses cv::VideoWriter. Flag
write_video_fps controls FPS.”); 渲染帧的写入 JPEG video 格式的完整文件路径
DEFINE_double(write_video_fps, -1., “Frame rate for the recorded
video. By default, it will try to get the input frames producer frame
rate (e.g., input video or webcam frame rate). If the input frames
producer does not have a set FPS (e.g., image_dir or webcam if OpenCV
not compiled with its support), set this value accordingly (e.g., to
the frame rate displayed by the OpenPose GUI).”); Video 帧记录的帧速率
DEFINE_string(write_json, “”, “Directory to write OpenPose output in
JSON format. It includes body, hand, and face pose keypoints (2-D and
3-D), as well as pose candidates (if –part_candidates enabled).”);
输出结果保存为 JSON 格式文件的路径
DEFINE_string(write_coco_json, “”, “Full file path to write people
pose data with JSON COCO validation format.”); 以 COCO Validation 的
JSON 格式保存 people pose 数据的完整文件路径
DEFINE_string(write_coco_foot_json, “”, “Full file path to write
people foot pose data with JSON COCO validation format.”); 以 COCO
Validation 的 JSON 格式保存 people foot pose 数据的完整文件路径
DEFINE_int32(write_coco_json_variant, 0, “Currently, this option is
experimental and only makes effect on car JSON generation. It selects
the COCO variant for cocoJsonSaver.”); cocoJsonSaver 的 COCO 变形
DEFINE_string(write_heatmaps, “”, “Directory to write body pose
heatmaps in PNG format. At least 1 add_heatmaps_X flag must be
enabled.”); Body Pose Heatmaps 写入为 PNG 格式的保存路径
DEFINE_string(write_heatmaps_format, “png”, “File extension and
format for write_heatmaps, analogous to write_images_format. For
lossless compression, recommended png for integer heatmaps_scale and
float for floating values.”); 保存 heatmaps 结果的文件格式
DEFINE_string(write_keypoint, “”, “(Deprecated, use write_json)
Directory to write the people pose keypoint data. Set format with
write_keypoint_format.”); [已废弃]
DEFINE_string(write_keypoint_format, “yml”, “(Deprecated, use
write_json) File extension and format for write_keypoint: json, xml,
yaml & yml. Json not available for OpenCV < 3.0, use write_json
instead.”); [已废弃]
DEFINE_string(write_video_adam, “”, “Experimental, not available yet.
E.g., ~/Desktop/adamResult.avi. Flag write_video_fps controls FPS.”);
DEFINE_string(write_bvh, “”, “Experimental, not available yet. E.g.,
~/Desktop/mocapResult.bvh.”);