diff --git a/.github/issue_template.md b/.github/issue_template.md index 99297edd94fceec3ec70c5983918363e7c9d385a..2c564b55e9f36e91b9646d100754763e3fe6c29d 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -34,6 +34,7 @@ You might select multiple topics, delete the rest: ### Your system configuration +**Installation mode**: CMake or sh script or manual Makefile installation. **Operating system** (`lsb_release -a` in Ubuntu): **CUDA version** (`cat /usr/local/cuda/version.txt` in most cases): **cuDNN version**: diff --git a/README.md b/README.md index 3c40146ef44e4dce9e3c89c90980b9629b1585bb..613514ac208f7b8ece76d7a888779d484e252343 100644 --- a/README.md +++ b/README.md @@ -161,21 +161,21 @@ Please cite these papers in your publications if it helps your research (the fac booktitle = {CVPR}, title = {Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields}, year = {2017} - } + } @inproceedings{simon2017hand, author = {Tomas Simon and Hanbyul Joo and Iain Matthews and Yaser Sheikh}, booktitle = {CVPR}, title = {Hand Keypoint Detection in Single Images using Multiview Bootstrapping}, year = {2017} - } + } @inproceedings{wei2016cpm, author = {Shih-En Wei and Varun Ramakrishna and Takeo Kanade and Yaser Sheikh}, booktitle = {CVPR}, title = {Convolutional pose machines}, year = {2016} - } + } diff --git a/doc/demo_overview.md b/doc/demo_overview.md index 613e3fdad1b36176f32fad24cb36ab79ba220bd5..de95bdc30b98d57349e27a4cb1ac310c47893f2a 100644 --- a/doc/demo_overview.md +++ b/doc/demo_overview.md @@ -131,6 +131,7 @@ Each flag is divided into flag name, default value, and description. - DEFINE_bool(frame_flip, false, "Flip/mirror each frame (e.g. for real time webcam demonstrations)."); - DEFINE_int32(frame_rotate, 0, "Rotate each frame, 4 possible values: 0, 90, 180, 270."); - 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."); 3. OpenPose - DEFINE_string(model_folder, "models/", "Folder path (absolute or relative) where the models (pose, face, ...) are located."); @@ -183,7 +184,6 @@ Each flag is divided into flag name, default value, and description. 11. Display - DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -- 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_bool(no_gui_verbose, false, "Do not write text on output images on GUI (e.g. number of current frame and people). It does not affect the pose rendering."); - DEFINE_bool(no_display, false, "Do not open a display window. Useful if there is no X server and/or to slightly speed up the processing if visual output is not required."); 12. Result Saving diff --git a/doc/release_notes.md b/doc/release_notes.md index a0c7a3e847437b6a5d33f7e5768bed01648f471b..8dfec4a47ae3038c84b1ebdadc3f5a980f2c037c 100644 --- a/doc/release_notes.md +++ b/doc/release_notes.md @@ -116,3 +116,4 @@ OpenPose Library - Release Notes ## Current version (future OpenPose 1.1.1) 1. Main improvements: 1. COCO JSON file outputs 0 as score for non-detected keypoints. + 2. Added example for OpenPose for user asynchronous output and cleaned all `tutorial_wrapper/` examples. diff --git a/examples/openpose/openpose.cpp b/examples/openpose/openpose.cpp index 5b9672010954696fb11cc9389b03bbe44e6e7862..aaa76bfa3d932d3774a53ed809e542270748241d 100755 --- a/examples/openpose/openpose.cpp +++ b/examples/openpose/openpose.cpp @@ -4,7 +4,7 @@ // 1. Read folder of images / video / webcam (`producer` module) // 2. Extract and render body keypoint / heatmap / PAF of that image (`pose` module) // 3. Extract and render face keypoint / heatmap / PAF of that image (`face` module) - // 4. Save the results on disc (`filestream` module) + // 4. Save the results on disk (`filestream` module) // 5. Display the rendered pose (`gui` module) // Everything in a multi-thread scenario (`thread` module) // Points 2 to 5 are included in the `wrapper` module @@ -21,21 +21,8 @@ // Other 3rdparty dependencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging - // OpenPose dependencies -// Option a) Importing all modules #include -// Option b) Manually importing the desired modules. Recommended if you only intend to use a few modules. -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include // See all the available parameter options withe the `--help` flag. E.g. `./build/examples/openpose/openpose.bin --help`. // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose @@ -60,6 +47,8 @@ DEFINE_uint64(frame_last, -1, "Finish on desired frame DEFINE_bool(frame_flip, false, "Flip/mirror each frame (e.g. for real time webcam demonstrations)."); DEFINE_int32(frame_rotate, 0, "Rotate each frame, 4 possible values: 0, 90, 180, 270."); 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."); // OpenPose DEFINE_string(model_folder, "models/", "Folder path (absolute or relative) where the models (pose, face, ...) are located."); DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" @@ -149,8 +138,6 @@ DEFINE_double(hand_alpha_pose, 0.6, "Analogous to `alpha_pos DEFINE_double(hand_alpha_heatmap, 0.7, "Analogous to `alpha_heatmap` but applied to hand."); // Display DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -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_bool(no_gui_verbose, false, "Do not write text on output images on GUI (e.g. number of current frame and people). It" " does not affect the pose rendering."); DEFINE_bool(no_display, false, "Do not open a display window. Useful if there is no X server and/or to slightly speed up" diff --git a/examples/tests/pose_accuracy_coco_test.sh b/examples/tests/pose_accuracy_coco_test.sh index b24b76d324e4863844a31d4702b062fd013095db..7cfd739e840302b0f3b22ea8d0b801da0a6782f6 100644 --- a/examples/tests/pose_accuracy_coco_test.sh +++ b/examples/tests/pose_accuracy_coco_test.sh @@ -17,7 +17,7 @@ clear && clear # Parameters IMAGE_FOLDER=/home/gines/devel/images/val2014/ -JSON_FOLDER=../evaluation/coco/results/openpose/ +JSON_FOLDER=../evaluation/coco_val_jsons/ OP_BIN=./build/examples/openpose/openpose.bin # 1 scale diff --git a/examples/tutorial_thread/1_openpose_read_and_display.cpp b/examples/tutorial_thread/1_openpose_read_and_display.cpp index cc9cd264074cc0a3763bba4d8ef8771b5a484cb0..eaab6c564b6a8538c6b659eb6a42e792e7bc88be 100644 --- a/examples/tutorial_thread/1_openpose_read_and_display.cpp +++ b/examples/tutorial_thread/1_openpose_read_and_display.cpp @@ -34,13 +34,13 @@ DEFINE_string(video, "", "Use a video file instea " example 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(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."); // OpenPose DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" " default images resolution."); // Consumer DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -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."); int openPoseTutorialThread1() { diff --git a/examples/tutorial_thread/2_user_processing_function.cpp b/examples/tutorial_thread/2_user_processing_function.cpp index 4258305439d5453776ed1b2cbec3c85a4643ec40..05ff621912e30bbaae88d82de8fb8c6aba3f0eec 100644 --- a/examples/tutorial_thread/2_user_processing_function.cpp +++ b/examples/tutorial_thread/2_user_processing_function.cpp @@ -35,13 +35,13 @@ DEFINE_string(video, "", "Use a video file instea " example 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(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."); // OpenPose DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" " default images resolution."); // Consumer DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -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."); // This class can be implemented either as a template or as a simple class given // that the user usually knows which kind of data he will move between the queues, diff --git a/examples/tutorial_wrapper/1_user_asynchronous_output.cpp b/examples/tutorial_wrapper/1_user_asynchronous_output.cpp new file mode 100644 index 0000000000000000000000000000000000000000..43d8ebdac0a2664ddebe90fb515174abd768fdf5 --- /dev/null +++ b/examples/tutorial_wrapper/1_user_asynchronous_output.cpp @@ -0,0 +1,334 @@ +// ------------------------- OpenPose Library Tutorial - Thread - Example 3 - Asynchronous Output ------------------------- +// Asynchronous output mode: ideal for fast prototyping when performance is not an issue and user wants to use the output OpenPose format. The user +// simply gets the processed frames from the OpenPose wrapper when he desires to. + +// This example shows the user how to use the OpenPose wrapper class: + // 1. Read folder of images / video / webcam + // 2. Extract and render keypoint / heatmap / PAF of that image + // 3. Save the results on disk + // 4. User displays the rendered pose + // Everything in a multi-thread scenario +// In addition to the previous OpenPose modules, we also need to use: + // 1. `core` module: + // For the Array class that the `pose` module needs + // For the Datum struct that the `thread` module sends between the queues + // 2. `utilities` module: for the error & logging functions, i.e. op::error & op::log respectively +// This file should only be used for the user to take specific examples. + +// C++ std library dependencies +#include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds +#include // std::this_thread +// Other 3rdparty dependencies +#include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string +#include // google::InitGoogleLogging +// OpenPose dependencies +#include + +// See all the available parameter options withe the `--help` flag. E.g. `./build/examples/openpose/openpose.bin --help`. +// Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose +// executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. +// Debugging +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."); +// Producer +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, "1280x720", "Size of the camera frames to ask for."); +DEFINE_double(camera_fps, 30.0, "Frame rate for the webcam (only used when saving video from webcam). Set this value to the" + " minimum value between the OpenPose displayed speed and the webcam real frame rate."); +DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default" + " example 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_uint64(frame_first, 0, "Start on desired frame number. Indexes are 0-based, i.e. the first frame has index 0."); +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)."); +DEFINE_int32(frame_rotate, 0, "Rotate each frame, 4 possible values: 0, 90, 180, 270."); +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."); +// OpenPose +DEFINE_string(model_folder, "models/", "Folder path (absolute or relative) where the models (pose, face, ...) are located."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images 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."); +DEFINE_int32(num_gpu_start, 0, "GPU device start number."); +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_keypoint` & `write_keypoint_json` flags." + " Select `0` to scale it to the original source resolution, `1`to 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], and 4 for range [-1,1]. Non related" + " with `scale_number` and `scale_gap`."); +// OpenPose Body Pose +DEFINE_string(model_pose, "COCO", "Model to be used. E.g. `COCO` (18 keypoints), `MPI` (15 keypoints, ~10% faster), " + "`MPI_4_layers` (15 keypoints, even faster but less accurate)."); +DEFINE_string(net_resolution, "656x368", "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. E.g. the default `656x368` is" + " optimal for 16:9 videos, e.g. full HD (1980x1080) and HD (1280x720) videos."); +DEFINE_int32(scale_number, 1, "Number of scales to average."); +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."); +DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array" + " (program speed will decrease). Not required for our library, enable it only if you intend" + " to process this information later. 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 `include/openpose/pose/poseParameters.hpp`."); +DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to" + " background."); +DEFINE_bool(heatmaps_add_PAFs, false, "Same functionality as `add_heatmaps_parts`, but adding the PAFs."); +DEFINE_int32(heatmaps_scale, 2, "Set 0 to scale op::Datum::poseHeatMaps in the range [0,1], 1 for [-1,1]; and 2 for integer" + " rounded [0,255]."); +// OpenPose Face +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."); +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."); +// OpenPose Hand +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."); +DEFINE_string(hand_net_resolution, "368x368", "Multiples of 16 and squared. Analogous to `net_resolution` but applied to the hand keypoint" + " detector."); +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"); +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."); + +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"); +// OpenPose Rendering +DEFINE_int32(part_to_show, 0, "Prediction channel to visualize (default: 0). 0 for all the body parts, 1-18 for each body" + " part heat map, 19 for the background heat map, 20 for all the body part heat maps" + " together, 21 for all the PAFs, 22-40 for each body part pair PAF"); +DEFINE_bool(disable_blending, false, "If enabled, it will render the results (keypoint skeletons or heatmaps) on a black" + " background, instead of being rendered into the original image. Related: `part_to_show`," + " `alpha_pose`, and `alpha_pose`."); +// OpenPose Rendering Pose +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, 2, "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 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)."); +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."); +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."); +// OpenPose Rendering Face +DEFINE_double(face_render_threshold, 0.4, "Analogous to `render_threshold`, but applied to the face keypoints."); +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."); +DEFINE_double(face_alpha_pose, 0.6, "Analogous to `alpha_pose` but applied to face."); +DEFINE_double(face_alpha_heatmap, 0.7, "Analogous to `alpha_heatmap` but applied to face."); +// OpenPose Rendering Hand +DEFINE_double(hand_render_threshold, 0.2, "Analogous to `render_threshold`, but applied to the hand keypoints."); +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."); +DEFINE_double(hand_alpha_pose, 0.6, "Analogous to `alpha_pose` but applied to hand."); +DEFINE_double(hand_alpha_heatmap, 0.7, "Analogous to `alpha_heatmap` but applied to hand."); +// Result Saving +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."); +DEFINE_string(write_keypoint, "", "Directory to write the people body pose keypoint data. Set format with `write_keypoint_format`."); +DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml & yml. Json not available" + " for OpenCV < 3.0, use `write_keypoint_json` instead."); +DEFINE_string(write_keypoint_json, "", "Directory to write people pose data in *.json format, compatible with any OpenCV version."); +DEFINE_string(write_coco_json, "", "Full file path to write people pose data with *.json COCO validation format."); +DEFINE_string(write_heatmaps, "", "Directory to write heatmaps in *.png format. At least 1 `add_heatmaps_X` flag must be" + " enabled."); +DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`." + " Recommended `png` or any compressed and lossless format."); + + +// If the user needs his own variables, he can inherit the op::Datum struct and add them +// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of +// Wrapper +struct UserDatum : public op::Datum +{ + bool boolThatUserNeedsForSomeReason; + + UserDatum(const bool boolThatUserNeedsForSomeReason_ = false) : + boolThatUserNeedsForSomeReason{boolThatUserNeedsForSomeReason_} + {} +}; + +// The W-classes can be implemented either as a template or as simple classes given +// that the user usually knows which kind of data he will move between the queues, +// in this case we assume a std::shared_ptr of a std::vector of UserDatum + +// This worker will just read and return all the jpg files in a directory +class UserOutputClass +{ +public: + bool display(const std::shared_ptr>& datumsPtr) + { + // User's displaying/saving/other processing here + // datum.cvOutputData: rendered frame with pose or heatmaps + // datum.poseKeypoints: Array with the estimated pose + char key = ' '; + if (datumsPtr != nullptr && !datumsPtr->empty()) + { + cv::imshow("User worker GUI", datumsPtr->at(0).cvOutputData); + // Display image and sleeps at least 1 ms (it usually sleeps ~5-10 msec to display the image) + key = cv::waitKey(1); + } + else + op::log("Nullptr or empty datumsPtr found.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__); + return (key == 27); + } + void printKeypoints(const std::shared_ptr>& datumsPtr) + { + // Example: How to use the pose keypoints + if (datumsPtr != nullptr && !datumsPtr->empty()) + { + op::log("\nKeypoints:"); + // Accesing each element of the keypoints + const auto& poseKeypoints = datumsPtr->at(0).poseKeypoints; + op::log("Person pose keypoints:"); + for (auto person = 0 ; person < poseKeypoints.getSize(0) ; person++) + { + op::log("Person " + std::to_string(person) + " (x, y, score):"); + for (auto bodyPart = 0 ; bodyPart < poseKeypoints.getSize(1) ; bodyPart++) + { + std::string valueToPrint; + for (auto xyscore = 0 ; xyscore < poseKeypoints.getSize(2) ; xyscore++) + { + valueToPrint += std::to_string( poseKeypoints[{person, bodyPart, xyscore}] ) + " "; + } + op::log(valueToPrint); + } + } + op::log(" "); + // Alternative: just getting std::string equivalent + op::log("Face keypoints: " + datumsPtr->at(0).faceKeypoints.toString()); + op::log("Left hand keypoints: " + datumsPtr->at(0).handKeypoints[0].toString()); + op::log("Right hand keypoints: " + datumsPtr->at(0).handKeypoints[1].toString()); + } + else + op::log("Nullptr or empty datumsPtr found.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__); + } +}; + +int openPoseTutorialWrapper3() +{ + // logging_level + op::check(0 <= FLAGS_logging_level && FLAGS_logging_level <= 255, "Wrong logging_level value.", __LINE__, __FUNCTION__, __FILE__); + op::ConfigureLog::setPriorityThreshold((op::Priority)FLAGS_logging_level); + // op::ConfigureLog::setPriorityThreshold(op::Priority::None); // To print all logging messages + + op::log("Starting pose estimation demo.", op::Priority::High); + const auto timerBegin = std::chrono::high_resolution_clock::now(); + + // Applying user defined configuration - Google flags to program variables + // outputSize + const auto outputSize = op::flagsToPoint(FLAGS_resolution, "1280x720"); + // netInputSize + const auto netInputSize = op::flagsToPoint(FLAGS_net_resolution, "656x368"); + // faceNetInputSize + const auto faceNetInputSize = op::flagsToPoint(FLAGS_face_net_resolution, "368x368 (multiples of 16)"); + // handNetInputSize + const auto handNetInputSize = op::flagsToPoint(FLAGS_hand_net_resolution, "368x368 (multiples of 16)"); + // producerType + const auto producerSharedPtr = op::flagsToProducer(FLAGS_image_dir, FLAGS_video, FLAGS_camera, FLAGS_camera_resolution, FLAGS_camera_fps); + // poseModel + const auto poseModel = op::flagsToPoseModel(FLAGS_model_pose); + // keypointScale + const auto keypointScale = op::flagsToScaleMode(FLAGS_keypoint_scale); + // heatmaps to add + const auto heatMapTypes = op::flagsToHeatMaps(FLAGS_heatmaps_add_parts, FLAGS_heatmaps_add_bkg, FLAGS_heatmaps_add_PAFs); + op::check(FLAGS_heatmaps_scale >= 0 && FLAGS_heatmaps_scale <= 2, "Non valid `heatmaps_scale`.", __LINE__, __FUNCTION__, __FILE__); + const auto heatMapScale = (FLAGS_heatmaps_scale == 0 ? op::ScaleMode::PlusMinusOne + : (FLAGS_heatmaps_scale == 1 ? op::ScaleMode::ZeroToOne : op::ScaleMode::UnsignedChar )); + op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); + + // Configure OpenPose + op::log("Configuring OpenPose wrapper.", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); + op::Wrapper> opWrapper{op::ThreadManagerMode::AsynchronousOut}; + // Pose configuration (use WrapperStructPose{} for default and recommended configuration) + const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, + FLAGS_num_gpu_start, FLAGS_scale_number, (float)FLAGS_scale_gap, + op::flagsToRenderMode(FLAGS_render_pose), poseModel, + !FLAGS_disable_blending, (float)FLAGS_alpha_pose, + (float)FLAGS_alpha_heatmap, FLAGS_part_to_show, FLAGS_model_folder, + heatMapTypes, heatMapScale, (float)FLAGS_render_threshold}; + // Face configuration (use op::WrapperStructFace{} to disable it) + const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, op::flagsToRenderMode(FLAGS_face_render, FLAGS_render_pose), + (float)FLAGS_face_alpha_pose, (float)FLAGS_face_alpha_heatmap, (float)FLAGS_face_render_threshold}; + // Hand configuration (use op::WrapperStructHand{} to disable it) + const op::WrapperStructHand wrapperStructHand{FLAGS_hand, handNetInputSize, FLAGS_hand_scale_number, (float)FLAGS_hand_scale_range, + FLAGS_hand_tracking, op::flagsToRenderMode(FLAGS_hand_render, FLAGS_render_pose), + (float)FLAGS_hand_alpha_pose, (float)FLAGS_hand_alpha_heatmap, (float)FLAGS_hand_render_threshold}; + // Producer (use default to disable any input) + const op::WrapperStructInput wrapperStructInput{producerSharedPtr, FLAGS_frame_first, FLAGS_frame_last, FLAGS_process_real_time, + FLAGS_frame_flip, FLAGS_frame_rotate, FLAGS_frames_repeat}; + // Consumer (comment or use default argument to disable any output) + const bool displayGui = false; + const bool guiVerbose = false; + const bool fullScreen = false; + const op::WrapperStructOutput wrapperStructOutput{displayGui, guiVerbose, fullScreen, FLAGS_write_keypoint, + op::stringToDataFormat(FLAGS_write_keypoint_format), FLAGS_write_keypoint_json, + FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, + FLAGS_write_heatmaps, FLAGS_write_heatmaps_format}; + // Configure wrapper + opWrapper.configure(wrapperStructPose, wrapperStructFace, wrapperStructHand, wrapperStructInput, wrapperStructOutput); + // Set to single-thread running (e.g. for debugging purposes) + // opWrapper.disableMultiThreading(); + + op::log("Starting thread(s)", op::Priority::High); + opWrapper.start(); + + // User processing + UserOutputClass userOutputClass; + bool userWantsToExit = false; + while (!userWantsToExit) + { + // Pop frame + std::shared_ptr> datumProcessed; + if (opWrapper.waitAndPop(datumProcessed)) + { + userWantsToExit = userOutputClass.display(datumProcessed);; + userOutputClass.printKeypoints(datumProcessed); + } + else + op::log("Processed datum could not be emplaced.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__); + } + + op::log("Stopping thread(s)", op::Priority::High); + opWrapper.stop(); + + // Measuring total time + const auto now = std::chrono::high_resolution_clock::now(); + const auto totalTimeSec = (double)std::chrono::duration_cast(now-timerBegin).count() * 1e-9; + const auto message = "Real-time pose estimation demo successfully finished. Total time: " + std::to_string(totalTimeSec) + " seconds."; + op::log(message, op::Priority::High); + + return 0; +} + +int main(int argc, char *argv[]) +{ + // Initializing google logging (Caffe uses it for logging) + google::InitGoogleLogging("openPoseTutorialWrapper3"); + + // Parsing command line flags + gflags::ParseCommandLineFlags(&argc, &argv, true); + + // Running openPoseTutorialWrapper3 + return openPoseTutorialWrapper3(); +} diff --git a/examples/tutorial_wrapper/2_user_synchronous.cpp b/examples/tutorial_wrapper/2_user_synchronous.cpp index 0c893a1efb73e8963be5a1126317323886a3e8c2..251ea50c6b17f83a4c031b8fc6e402e1d2c9e37c 100644 --- a/examples/tutorial_wrapper/2_user_synchronous.cpp +++ b/examples/tutorial_wrapper/2_user_synchronous.cpp @@ -1,10 +1,12 @@ // ------------------------- OpenPose Library Tutorial - Thread - Example 2 - Synchronous ------------------------- -// Synchronous mode: ideal for performance. The user can add his own frames producer / post-processor / consumer to the OpenPose wrapper or use the default ones. +// Synchronous mode: ideal for performance. The user can add his own frames producer / post-processor / consumer to the OpenPose wrapper or use the +// default ones. // This example shows the user how to use the OpenPose wrapper class: - // 1. Extract and render keypoint / heatmap / PAF of that image - // 2. Save the results on disc - // 3. Display the rendered pose + // 1. User reads images + // 2. Extract and render keypoint / heatmap / PAF of that image + // 3. Save the results on disk + // 4. User displays the rendered pose // Everything in a multi-thread scenario // In addition to the previous OpenPose modules, we also need to use: // 1. `core` module: @@ -15,27 +17,12 @@ // C++ std library dependencies #include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds -#include #include // std::this_thread -#include // Other 3rdparty dependencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging - // OpenPose dependencies -// Option a) Importing all modules #include -// Option b) Manually importing the desired modules. Recommended if you only intend to use a few modules. -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include // See all the available parameter options withe the `--help` flag. E.g. `./build/examples/openpose/openpose.bin --help`. // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose @@ -303,7 +290,10 @@ public: // Display rendered output image cv::imshow("User worker GUI", datumsPtr->at(0).cvOutputData); - cv::waitKey(1); // It displays the image and sleeps at least 1 ms (it usually sleeps ~5-10 msec to display the image) + // Display image and sleeps at least 1 ms (it usually sleeps ~5-10 msec to display the image) + const char key = cv::waitKey(1); + if (key == 27) + this->stop(); } } catch (const std::exception& e) @@ -364,6 +354,7 @@ int openPoseTutorialWrapper2() const auto workerOutputOnNewThread = true; opWrapper.setWorkerOutput(wUserOutput, workerOutputOnNewThread); // Configure OpenPose + op::log("Configuring OpenPose wrapper.", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, FLAGS_scale_number, (float)FLAGS_scale_gap, op::flagsToRenderMode(FLAGS_render_pose), poseModel, diff --git a/examples/tutorial_wrapper/1_user_asynchronous.cpp b/examples/tutorial_wrapper/3_user_asynchronous.cpp similarity index 95% rename from examples/tutorial_wrapper/1_user_asynchronous.cpp rename to examples/tutorial_wrapper/3_user_asynchronous.cpp index db0d7b984752497616b42ce3903e406a13c9abcb..cc90aaee8efecae1e23cfb91f010dab1fd839a7b 100644 --- a/examples/tutorial_wrapper/1_user_asynchronous.cpp +++ b/examples/tutorial_wrapper/3_user_asynchronous.cpp @@ -1,10 +1,12 @@ // ------------------------- OpenPose Library Tutorial - Thread - Example 1 - Asynchronous ------------------------- -// Asynchronous mode: ideal for fast prototyping when performance is not an issue. The user emplaces/pushes and pops frames from the OpenPose wrapper when he desires to. +// Asynchronous mode: ideal for fast prototyping when performance is not an issue. The user emplaces/pushes and pops frames from the OpenPose wrapper +// when he desires to. // This example shows the user how to use the OpenPose wrapper class: - // 1. Extract and render keypoint / heatmap / PAF of that image - // 2. Save the results on disc - // 3. Display the rendered pose + // 1. User reads images + // 2. Extract and render keypoint / heatmap / PAF of that image + // 3. Save the results on disk + // 4. User displays the rendered pose // Everything in a multi-thread scenario // In addition to the previous OpenPose modules, we also need to use: // 1. `core` module: @@ -15,27 +17,12 @@ // C++ std library dependencies #include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds -#include #include // std::this_thread -#include // Other 3rdparty dependencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging - // OpenPose dependencies -// Option a) Importing all modules #include -// Option b) Manually importing the desired modules. Recommended if you only intend to use a few modules. -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include // See all the available parameter options withe the `--help` flag. E.g. `./build/examples/openpose/openpose.bin --help`. // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose @@ -230,20 +217,23 @@ private: class UserOutputClass { public: - void display(const std::shared_ptr>& datumsPtr) + bool display(const std::shared_ptr>& datumsPtr) { // User's displaying/saving/other processing here // datum.cvOutputData: rendered frame with pose or heatmaps // datum.poseKeypoints: Array with the estimated pose + char key = ' '; if (datumsPtr != nullptr && !datumsPtr->empty()) { cv::imshow("User worker GUI", datumsPtr->at(0).cvOutputData); - cv::waitKey(1); // It displays the image and sleeps at least 1 ms (it usually sleeps ~5-10 msec to display the image) + // Display image and sleeps at least 1 ms (it usually sleeps ~5-10 msec to display the image) + key = cv::waitKey(1); } else op::log("Nullptr or empty datumsPtr found.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__); + return (key == 27); } - void printKeypoitns(const std::shared_ptr>& datumsPtr) + void printKeypoints(const std::shared_ptr>& datumsPtr) { // Example: How to use the pose keypoints if (datumsPtr != nullptr && !datumsPtr->empty()) @@ -259,9 +249,7 @@ public: { std::string valueToPrint; for (auto xyscore = 0 ; xyscore < poseKeypoints.getSize(2) ; xyscore++) - { valueToPrint += std::to_string( poseKeypoints[{person, bodyPart, xyscore}] ) + " "; - } op::log(valueToPrint); } } @@ -331,6 +319,7 @@ int openPoseTutorialWrapper1() FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, FLAGS_write_heatmaps, FLAGS_write_heatmaps_format}; // Configure wrapper + op::log("Configuring OpenPose wrapper.", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); opWrapper.configure(wrapperStructPose, wrapperStructFace, wrapperStructHand, op::WrapperStructInput{}, wrapperStructOutput); // Set to single-thread running (e.g. for debugging purposes) // opWrapper.disableMultiThreading(); @@ -341,7 +330,8 @@ int openPoseTutorialWrapper1() // User processing UserInputClass userInputClass(FLAGS_image_dir); UserOutputClass userOutputClass; - while (!userInputClass.isFinished()) + bool userWantsToExit = false; + while (!userWantsToExit && !userInputClass.isFinished()) { // Push frame auto datumToProcess = userInputClass.createDatum(); @@ -352,8 +342,8 @@ int openPoseTutorialWrapper1() std::shared_ptr> datumProcessed; if (successfullyEmplaced && opWrapper.waitAndPop(datumProcessed)) { - userOutputClass.display(datumProcessed); - userOutputClass.printKeypoitns(datumProcessed); + userWantsToExit = userOutputClass.display(datumProcessed); + userOutputClass.printKeypoints(datumProcessed); } else op::log("Processed datum could not be emplaced.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__); diff --git a/examples/tutorial_wrapper/CMakeLists.txt b/examples/tutorial_wrapper/CMakeLists.txt index 931c894bc71080ea95dd7a99756ea02c9e775749..3b30964633104b8c45dee639a3f76e7a512d3af9 100644 --- a/examples/tutorial_wrapper/CMakeLists.txt +++ b/examples/tutorial_wrapper/CMakeLists.txt @@ -1,6 +1,7 @@ set(EXAMPLE_FILES - 1_user_asynchronous.cpp - 2_user_synchronous.cpp) + 1_user_asynchronous_output.cpp + 2_user_synchronous.cpp + 3_user_asynchronous.cpp) foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) diff --git a/windows/OpenPose.sln b/windows/OpenPose.sln index 23df3a9e07bc4bdb187236083addf7706532d9e6..abb83d74b59f3a4ca8679422bd1782a19e61a7f4 100644 --- a/windows/OpenPose.sln +++ b/windows/OpenPose.sln @@ -10,11 +10,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenPoseDemo", "OpenPoseDem {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1_user_asynchronous", "TutorialWrapper\1_user_asynchronous.vcxproj", "{1A72B535-7E9E-4B48-9D54-B90D6FC52616}" - ProjectSection(ProjectDependencies) = postProject - {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenPose library", "OpenPose library", "{A2660049-67B9-4C4A-9E54-3BB659BCF9C0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{322A32B5-4A4E-40B7-9CAA-62573A12BE5E}" @@ -23,6 +18,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial", "Tutorial", "{48 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wrapper", "Wrapper", "{BA0F9599-8099-4A7A-99A3-ACFC7C35639C}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1_user_asynchronous_output", "TutorialWrapper\1_user_asynchronous_output.vcxproj", "{1A72B535-7E9E-4B48-9D54-B90D6FC52616}" + ProjectSection(ProjectDependencies) = postProject + {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2_user_synchronous", "TutorialWrapper\2_user_synchronous.vcxproj", "{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}" ProjectSection(ProjectDependencies) = postProject {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} @@ -69,6 +69,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenPose3DReconstruction", {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3_user_asynchronous", "TutorialWrapper\3_user_asynchronous.vcxproj", "{6669F592-6798-4F29-853A-A8C42205DE4A}" + ProjectSection(ProjectDependencies) = postProject + {1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -77,71 +82,76 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.ActiveCfg = Debug|x64 - {1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.Build.0 = Debug|x64 + {1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.ActiveCfg = Release|x64 + {1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.Build.0 = Release|x64 {1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x86.ActiveCfg = Debug|x64 {1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x64.ActiveCfg = Release|x64 {1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x64.Build.0 = Release|x64 {1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x86.ActiveCfg = Release|x64 - {DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.ActiveCfg = Debug|x64 - {DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.Build.0 = Debug|x64 + {DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.ActiveCfg = Release|x64 + {DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.Build.0 = Release|x64 {DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x86.ActiveCfg = Debug|x64 {DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x64.ActiveCfg = Release|x64 {DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x64.Build.0 = Release|x64 {DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x86.ActiveCfg = Release|x64 - {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.ActiveCfg = Debug|x64 - {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.Build.0 = Debug|x64 + {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.ActiveCfg = Release|x64 + {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.Build.0 = Release|x64 {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x86.ActiveCfg = Debug|x64 {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x64.ActiveCfg = Release|x64 {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x64.Build.0 = Release|x64 {1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x86.ActiveCfg = Release|x64 - {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.ActiveCfg = Debug|x64 - {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.Build.0 = Debug|x64 + {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.ActiveCfg = Release|x64 + {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.Build.0 = Release|x64 {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x86.ActiveCfg = Debug|x64 {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x64.ActiveCfg = Release|x64 {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x64.Build.0 = Release|x64 {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x86.ActiveCfg = Release|x64 - {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.ActiveCfg = Debug|x64 - {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.Build.0 = Debug|x64 + {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.ActiveCfg = Release|x64 + {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.Build.0 = Release|x64 {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x86.ActiveCfg = Debug|x64 {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x64.ActiveCfg = Release|x64 {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x64.Build.0 = Release|x64 {D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x86.ActiveCfg = Release|x64 - {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.ActiveCfg = Debug|x64 - {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.Build.0 = Debug|x64 + {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.ActiveCfg = Release|x64 + {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.Build.0 = Release|x64 {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x86.ActiveCfg = Debug|x64 {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x64.ActiveCfg = Release|x64 {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x64.Build.0 = Release|x64 {D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x86.ActiveCfg = Release|x64 - {44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.ActiveCfg = Debug|x64 - {44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.Build.0 = Debug|x64 + {44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.ActiveCfg = Release|x64 + {44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.Build.0 = Release|x64 {44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x86.ActiveCfg = Debug|x64 {44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x64.ActiveCfg = Release|x64 {44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x64.Build.0 = Release|x64 {44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x86.ActiveCfg = Release|x64 - {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.ActiveCfg = Debug|x64 - {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.Build.0 = Debug|x64 + {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.ActiveCfg = Release|x64 + {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.Build.0 = Release|x64 {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x86.ActiveCfg = Debug|x64 {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x64.ActiveCfg = Release|x64 {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x64.Build.0 = Release|x64 {4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x86.ActiveCfg = Release|x64 - {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.ActiveCfg = Debug|x64 - {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.Build.0 = Debug|x64 + {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.ActiveCfg = Release|x64 + {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.Build.0 = Release|x64 {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x86.ActiveCfg = Debug|x64 {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x64.ActiveCfg = Release|x64 {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x64.Build.0 = Release|x64 {DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x86.ActiveCfg = Release|x64 - {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.ActiveCfg = Debug|x64 - {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.Build.0 = Debug|x64 + {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.ActiveCfg = Release|x64 + {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.Build.0 = Release|x64 {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x86.ActiveCfg = Debug|x64 {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x64.ActiveCfg = Release|x64 {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x64.Build.0 = Release|x64 {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x86.ActiveCfg = Release|x64 - {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Debug|x64.ActiveCfg = Debug|x64 - {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Debug|x64.Build.0 = Debug|x64 + {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Debug|x64.ActiveCfg = Release|x64 {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Debug|x86.ActiveCfg = Debug|x64 {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Release|x64.ActiveCfg = Release|x64 {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72}.Release|x86.ActiveCfg = Release|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Debug|x64.ActiveCfg = Release|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Debug|x64.Build.0 = Release|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Debug|x86.ActiveCfg = Debug|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Release|x64.ActiveCfg = Release|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Release|x64.Build.0 = Release|x64 + {6669F592-6798-4F29-853A-A8C42205DE4A}.Release|x86.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -149,9 +159,9 @@ Global GlobalSection(NestedProjects) = preSolution {1848F100-6EC5-4F60-9748-062590ADFE5C} = {A2660049-67B9-4C4A-9E54-3BB659BCF9C0} {DF3983B6-A052-478D-9C59-B353C5F95991} = {322A32B5-4A4E-40B7-9CAA-62573A12BE5E} - {1A72B535-7E9E-4B48-9D54-B90D6FC52616} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C} {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} = {322A32B5-4A4E-40B7-9CAA-62573A12BE5E} {BA0F9599-8099-4A7A-99A3-ACFC7C35639C} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} + {1A72B535-7E9E-4B48-9D54-B90D6FC52616} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C} {A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C} {40194B19-A61E-4B91-89CD-A858AC5953A6} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} {8F1B1B9F-0117-48CD-B9F6-06E1930640C3} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} @@ -163,5 +173,6 @@ Global {D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D} = {40194B19-A61E-4B91-89CD-A858AC5953A6} {CB5A0F6C-6DD3-4789-9E6F-9B9B51AE4F10} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} {F31BEEF2-37B0-4B0F-85D3-AD427C56AD72} = {CB5A0F6C-6DD3-4789-9E6F-9B9B51AE4F10} + {6669F592-6798-4F29-853A-A8C42205DE4A} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C} EndGlobalSection EndGlobal diff --git a/windows/TutorialWrapper/1_user_asynchronous.vcxproj b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj similarity index 98% rename from windows/TutorialWrapper/1_user_asynchronous.vcxproj rename to windows/TutorialWrapper/1_user_asynchronous_output.vcxproj index 7ede3057ba826779ec7df1cc7b4a56f0ba093f7b..8c8f60cca46b8650d3921c3317cee18125e77074 100644 --- a/windows/TutorialWrapper/1_user_asynchronous.vcxproj +++ b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj @@ -1,92 +1,92 @@ - - - - - Debug - x64 - - - Release - x64 - - - - - - - {1A72B535-7E9E-4B48-9D54-B90D6FC52616} - 1_user_asynchronous - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH); - $(VC_ReferencesPath_x64); - $(ProjectName)\$(Platform)\$(Configuration)\ - false - - - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(ProjectName)\$(Platform)\$(Configuration)\ - - - - EnableAllWarnings - Disabled - true - true - _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Debug" - $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj - - - - - Level4 - Full - true - true - true - ..\..\include;..\..\3rdparty\windows\opencv\include;..\..\3rdparty\windows\caffe\include;..\..\3rdparty\windows\caffe\include2;..\..\3rdparty\windows\caffe3rdparty\include;..\..\3rdparty\windows\caffe3rdparty\include\boost-1_61;$(CUDA_PATH_V8_0)\include;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Release";NDEBUG - $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj - true - Speed - OldStyle - - - true - true - $(CUDA_PATH_V8_0)\lib\x64\; - ..\..\3rdparty\windows\caffe\lib\caffe.lib;..\..\3rdparty\windows\caffe\lib\caffeproto.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_filesystem-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_system-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5_hl.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffezlib.lib;..\..\3rdparty\windows\caffe3rdparty\lib\gflags.lib;..\..\3rdparty\windows\caffe3rdparty\lib\glog.lib;..\..\3rdparty\windows\caffe3rdparty\lib\leveldb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\libopenblas.dll.a;..\..\3rdparty\windows\caffe3rdparty\lib\libprotobuf.lib;..\..\3rdparty\windows\caffe3rdparty\lib\lmdb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\snappy.lib;..\..\3rdparty\windows\opencv\x64\vc14\lib\opencv_world310.lib;cublas.lib;cublas_device.lib;cudart.lib;cudnn.lib;curand.lib;ntdll.lib;shlwapi.lib;..\x64\Release\OpenPose.lib;%(AdditionalDependencies) - - - - - + + + + + Debug + x64 + + + Release + x64 + + + + + + + {1A72B535-7E9E-4B48-9D54-B90D6FC52616} + 1_user_asynchronous + 8.1 + + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + + + + + + + + + + + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + $(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH); + $(VC_ReferencesPath_x64); + $(ProjectName)\$(Platform)\$(Configuration)\ + false + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + $(ProjectName)\$(Platform)\$(Configuration)\ + + + + EnableAllWarnings + Disabled + true + true + _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Debug" + $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj + + + + + Level4 + Full + true + true + true + ..\..\include;..\..\3rdparty\windows\opencv\include;..\..\3rdparty\windows\caffe\include;..\..\3rdparty\windows\caffe\include2;..\..\3rdparty\windows\caffe3rdparty\include;..\..\3rdparty\windows\caffe3rdparty\include\boost-1_61;$(CUDA_PATH_V8_0)\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Release";NDEBUG + $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj + true + Speed + OldStyle + + + true + true + $(CUDA_PATH_V8_0)\lib\x64\; + ..\..\3rdparty\windows\caffe\lib\caffe.lib;..\..\3rdparty\windows\caffe\lib\caffeproto.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_filesystem-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_system-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5_hl.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffezlib.lib;..\..\3rdparty\windows\caffe3rdparty\lib\gflags.lib;..\..\3rdparty\windows\caffe3rdparty\lib\glog.lib;..\..\3rdparty\windows\caffe3rdparty\lib\leveldb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\libopenblas.dll.a;..\..\3rdparty\windows\caffe3rdparty\lib\libprotobuf.lib;..\..\3rdparty\windows\caffe3rdparty\lib\lmdb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\snappy.lib;..\..\3rdparty\windows\opencv\x64\vc14\lib\opencv_world310.lib;cublas.lib;cublas_device.lib;cudart.lib;cudnn.lib;curand.lib;ntdll.lib;shlwapi.lib;..\x64\Release\OpenPose.lib;%(AdditionalDependencies) + + + + + \ No newline at end of file diff --git a/windows/TutorialWrapper/1_user_asynchronous.vcxproj.filters b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.filters similarity index 93% rename from windows/TutorialWrapper/1_user_asynchronous.vcxproj.filters rename to windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.filters index d79b4f5111464024af1bc5c40eaf8ff20746c572..2560cd4bf061b9f3eba1661f1e2b56976265b851 100644 --- a/windows/TutorialWrapper/1_user_asynchronous.vcxproj.filters +++ b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.filters @@ -1,18 +1,18 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + \ No newline at end of file diff --git a/windows/TutorialWrapper/1_user_asynchronous.vcxproj.user b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.user similarity index 97% rename from windows/TutorialWrapper/1_user_asynchronous.vcxproj.user rename to windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.user index 6136aed856ca02a5041ae5d2cb111e141550bf44..170edd13823acc34bd53cfdaf3af23afbc81569b 100644 --- a/windows/TutorialWrapper/1_user_asynchronous.vcxproj.user +++ b/windows/TutorialWrapper/1_user_asynchronous_output.vcxproj.user @@ -1,13 +1,13 @@ - - - - PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin - WindowsLocalDebugger - ..\.. - - - PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin - WindowsLocalDebugger - ..\.. - + + + + PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin + WindowsLocalDebugger + ..\.. + + + PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin + WindowsLocalDebugger + ..\.. + \ No newline at end of file diff --git a/windows/TutorialWrapper/3_user_asynchronous.vcxproj b/windows/TutorialWrapper/3_user_asynchronous.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..578c099853c103609f91fabb8a3f482830b8833f --- /dev/null +++ b/windows/TutorialWrapper/3_user_asynchronous.vcxproj @@ -0,0 +1,92 @@ + + + + + Debug + x64 + + + Release + x64 + + + + + + + {6669F592-6798-4F29-853A-A8C42205DE4A} + 1_user_asynchronous + 8.1 + + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + + + + + + + + + + + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + $(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH); + $(VC_ReferencesPath_x64); + $(ProjectName)\$(Platform)\$(Configuration)\ + false + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + $(ProjectName)\$(Platform)\$(Configuration)\ + + + + EnableAllWarnings + Disabled + true + true + _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Debug" + $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj + + + + + Level4 + Full + true + true + true + ..\..\include;..\..\3rdparty\windows\opencv\include;..\..\3rdparty\windows\caffe\include;..\..\3rdparty\windows\caffe\include2;..\..\3rdparty\windows\caffe3rdparty\include;..\..\3rdparty\windows\caffe3rdparty\include\boost-1_61;$(CUDA_PATH_V8_0)\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;CMAKE_INTDIR="Release";NDEBUG + $(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj + true + Speed + OldStyle + + + true + true + $(CUDA_PATH_V8_0)\lib\x64\; + ..\..\3rdparty\windows\caffe\lib\caffe.lib;..\..\3rdparty\windows\caffe\lib\caffeproto.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_filesystem-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_system-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5_hl.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffezlib.lib;..\..\3rdparty\windows\caffe3rdparty\lib\gflags.lib;..\..\3rdparty\windows\caffe3rdparty\lib\glog.lib;..\..\3rdparty\windows\caffe3rdparty\lib\leveldb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\libopenblas.dll.a;..\..\3rdparty\windows\caffe3rdparty\lib\libprotobuf.lib;..\..\3rdparty\windows\caffe3rdparty\lib\lmdb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\snappy.lib;..\..\3rdparty\windows\opencv\x64\vc14\lib\opencv_world310.lib;cublas.lib;cublas_device.lib;cudart.lib;cudnn.lib;curand.lib;ntdll.lib;shlwapi.lib;..\x64\Release\OpenPose.lib;%(AdditionalDependencies) + + + + + + \ No newline at end of file diff --git a/windows/TutorialWrapper/3_user_asynchronous.vcxproj.filters b/windows/TutorialWrapper/3_user_asynchronous.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..0a1cbd633671d81a3ae9d0a7f2744e8fd9e3ef60 --- /dev/null +++ b/windows/TutorialWrapper/3_user_asynchronous.vcxproj.filters @@ -0,0 +1,18 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + \ No newline at end of file diff --git a/windows/TutorialWrapper/3_user_asynchronous.vcxproj.user b/windows/TutorialWrapper/3_user_asynchronous.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..9d8ecf852cf12b6d2d568034bb1f84907a6bebba --- /dev/null +++ b/windows/TutorialWrapper/3_user_asynchronous.vcxproj.user @@ -0,0 +1,13 @@ + + + + ..\.. + WindowsLocalDebugger + PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin + + + ..\.. + WindowsLocalDebugger + PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin + + \ No newline at end of file