diff --git a/doxygen.log b/doxygen.log
index 62bdfbfc..1a22fdcb 100644
--- a/doxygen.log
+++ b/doxygen.log
@@ -898,5 +898,5 @@ Generating file index...
Generating file member index...
Generating example index...
finalizing index lists...
-lookup cache used 2750/65536 hits=16595 misses=2943
+lookup cache used 2750/65536 hits=16600 misses=2943
finished...
diff --git a/html/wrapper_8hpp_source.html b/html/wrapper_8hpp_source.html
index 7829ab9f..2ab7248d 100644
--- a/html/wrapper_8hpp_source.html
+++ b/html/wrapper_8hpp_source.html
@@ -509,795 +509,799 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
536 auto gpuNumber = wrapperStructPose.
gpuNumber;
-
+
-
-
-
-
- 546 log(
"Auto-detecting GPUs... Detected " + std::to_string(gpuNumber) +
" GPU(s), using them all.",
-
-
-
-
-
-
-
-
-
-
-
- 558 auto finalOutputSize = wrapperStructPose.
outputSize;
-
-
-
-
-
-
- 565 wrapperStructInput.
producerSharedPtr->setProducerFpsMode(displayProducerFpsMode);
-
-
-
-
-
-
-
-
- 574 if (finalOutputSize.x == -1 || finalOutputSize.y == -1)
- 575 finalOutputSize = producerSize;
-
-
-
-
-
- 581 const auto datumProducer = std::make_shared<DatumProducer<TDatums>>(
-
-
-
- 585 wDatumProducer = std::make_shared<WDatumProducer<TDatumsPtr, TDatums>>(datumProducer);
-
-
- 588 wDatumProducer =
nullptr;
-
- 590 std::vector<std::shared_ptr<PoseExtractor>> poseExtractors;
- 591 std::vector<std::shared_ptr<PoseGpuRenderer>> poseGpuRenderers;
- 592 std::shared_ptr<PoseCpuRenderer> poseCpuRenderer;
-
-
-
- 596 const auto scaleAndSizeExtractor = std::make_shared<ScaleAndSizeExtractor>(
-
-
-
- 600 spWScaleAndSizeExtractor = std::make_shared<WScaleAndSizeExtractor<TDatumsPtr>>(scaleAndSizeExtractor);
-
-
- 603 const auto cvMatToOpInput = std::make_shared<CvMatToOpInput>();
- 604 spWCvMatToOpInput = std::make_shared<WCvMatToOpInput<TDatumsPtr>>(cvMatToOpInput);
-
-
- 607 const auto cvMatToOpOutput = std::make_shared<CvMatToOpOutput>();
- 608 spWCvMatToOpOutput = std::make_shared<WCvMatToOpOutput<TDatumsPtr>>(cvMatToOpOutput);
-
-
-
- 612 std::vector<TWorker> cpuRenderers;
-
- 614 spWPoses.resize(gpuNumber);
- 615 if (wrapperStructPose.
enable)
-
-
- 618 for (
auto gpuId = 0; gpuId < gpuNumber; gpuId++)
- 619 poseExtractors.emplace_back(std::make_shared<PoseExtractorCaffe>(
- 620 wrapperStructPose.
poseModel, modelFolder, gpuId + gpuNumberStart,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 637 for (
const auto& poseExtractor : poseExtractors)
-
- 639 poseGpuRenderers.emplace_back(std::make_shared<PoseGpuRenderer>(
-
-
-
-
-
-
-
-
-
- 649 poseCpuRenderer = std::make_shared<PoseCpuRenderer>(wrapperStructPose.
poseModel,
-
-
-
-
-
-
-
-
- 658 spWPoses.resize(poseExtractors.size());
- 659 for (
auto i = 0u; i < spWPoses.size(); i++)
- 660 spWPoses.at(i) = {std::make_shared<WPoseExtractor<TDatumsPtr>>(poseExtractors.at(i))};
-
-
-
-
- 665 if (wrapperStructFace.
enable)
-
-
-
- 669 if (wrapperStructPose.
enable)
-
- 671 const auto faceDetector = std::make_shared<FaceDetector>(wrapperStructPose.
poseModel);
- 672 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
-
-
-
-
-
- 678 log(
"Body keypoint detection is disabled. Hence, using OpenCV face detector (much less"
-
- 680 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
-
-
- 683 const auto faceDetectorOpenCV = std::make_shared<FaceDetectorOpenCV>(modelFolder);
- 684 spWPoses.at(gpu).emplace_back(
-
-
-
-
-
- 690 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
-
-
- 693 const auto netOutputSize = wrapperStructFace.
netInputSize;
- 694 const auto faceExtractor = std::make_shared<FaceExtractorCaffe>(
- 695 wrapperStructFace.
netInputSize, netOutputSize, modelFolder,
-
-
-
-
-
-
-
-
- 704 if (wrapperStructHand.
enable)
-
- 706 const auto handDetector = std::make_shared<HandDetector>(wrapperStructPose.
poseModel);
- 707 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
-
-
-
-
- 712 spWPoses.at(gpu).emplace_back(
-
-
-
-
-
-
- 719 const auto netOutputSize = wrapperStructHand.
netInputSize;
- 720 const auto handExtractor = std::make_shared<HandExtractorCaffe>(
- 721 wrapperStructHand.
netInputSize, netOutputSize, modelFolder,
-
-
-
-
- 726 spWPoses.at(gpu).emplace_back(
-
-
-
-
- 731 spWPoses.at(gpu).emplace_back(
-
-
-
-
-
-
- 738 if (!poseGpuRenderers.empty())
- 739 for (
auto i = 0u; i < spWPoses.size(); i++)
-
- 741 poseGpuRenderers.at(i)
-
-
-
-
-
-
-
-
-
- 751 const auto faceRenderer = std::make_shared<FaceCpuRenderer>(wrapperStructFace.
renderThreshold,
-
-
-
-
-
-
-
-
- 760 for (
auto i = 0u; i < spWPoses.size(); i++)
-
-
- 763 const auto faceRenderer = std::make_shared<FaceGpuRenderer>(
-
-
-
-
- 768 if (!poseGpuRenderers.empty())
-
- 770 const bool isLastRenderer = !renderHandGpu;
-
- 772 poseGpuRenderers.at(i)
-
-
-
-
-
-
-
-
-
- 782 error(
"Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
-
-
-
-
-
- 792 const auto handRenderer = std::make_shared<HandCpuRenderer>(wrapperStructHand.
renderThreshold,
-
-
-
-
-
-
-
-
- 801 for (
auto i = 0u; i < spWPoses.size(); i++)
-
-
- 804 const auto handRenderer = std::make_shared<HandGpuRenderer>(
-
-
-
-
- 809 if (!poseGpuRenderers.empty())
-
- 811 const bool isLastRenderer =
true;
-
- 813 poseGpuRenderers.at(i)
-
-
-
-
-
-
-
-
-
- 823 error(
"Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__);
-
-
-
- 827 mPostProcessingWs.clear();
-
- 829 if (spWPoses.size() > 1u)
-
-
-
-
- 834 const auto personIdExtractor = std::make_shared<PersonIdExtractor>();
- 835 mPostProcessingWs.emplace_back(
-
-
-
-
-
-
- 842 mPostProcessingWs =
mergeVectors(mPostProcessingWs, cpuRenderers);
- 843 const auto opOutputToCvMat = std::make_shared<OpOutputToCvMat>();
-
-
-
-
-
-
-
- 851 (finalOutputSize == producerSize || finalOutputSize.x <= 0 || finalOutputSize.y <= 0))
-
-
-
-
-
- 857 auto keypointScaler = std::make_shared<KeypointScaler>(wrapperStructPose.
keypointScale);
-
-
-
-
-
-
- 864 if (!writeKeypointCleaned.empty())
-
- 866 const auto keypointSaver = std::make_shared<KeypointSaver>(writeKeypointCleaned,
-
-
- 869 if (wrapperStructFace.
enable)
-
- 871 if (wrapperStructHand.
enable)
-
-
-
- 875 if (!writeKeypointJsonCleaned.empty())
-
- 877 const auto keypointJsonSaver = std::make_shared<KeypointJsonSaver>(writeKeypointJsonCleaned);
-
-
-
-
-
-
- 884 const auto humanFormat =
true;
- 885 const auto cocoJsonSaver = std::make_shared<CocoJsonSaver>(wrapperStructOutput.
writeCocoJson,
-
-
-
-
- 890 if (!writeImagesCleaned.empty())
-
- 892 const auto imageSaver = std::make_shared<ImageSaver>(writeImagesCleaned,
-
-
-
-
-
-
- 899 if (finalOutputSize.x <= 0 || finalOutputSize.y <= 0)
- 900 error(
"Video can only be recorded if outputSize is fixed (e.g. video, webcam, IP camera),"
- 901 "but not for a image directory.", __LINE__, __FUNCTION__, __FILE__);
- 902 const auto originalVideoFps = (wrapperStructInput.
producerSharedPtr->get(CV_CAP_PROP_FPS) > 0.
-
- 904 const auto videoSaver = std::make_shared<VideoSaver>(
- 905 wrapperStructOutput.
writeVideo, CV_FOURCC(
'M',
'J',
'P',
'G'), originalVideoFps, finalOutputSize
-
-
-
-
- 910 if (!writeHeatMapsCleaned.empty())
-
- 912 const auto heatMapSaver = std::make_shared<HeatMapSaver>(writeHeatMapsCleaned,
-
-
-
-
-
-
-
-
-
-
- 923 const auto guiInfoAdder = std::make_shared<GuiInfoAdder>(gpuNumber, wrapperStructOutput.
displayGui);
-
-
-
-
-
-
-
- 931 std::vector<std::shared_ptr<Renderer>> renderers;
-
- 933 renderers.emplace_back(std::static_pointer_cast<Renderer>(poseCpuRenderer));
-
- 935 for (
const auto& poseGpuRenderer : poseGpuRenderers)
- 936 renderers.emplace_back(std::static_pointer_cast<Renderer>(poseGpuRenderer));
-
- 938 const auto gui = std::make_shared<Gui>(
- 939 finalOutputSize, wrapperStructOutput.
fullScreen, mThreadManager.getIsRunningSharedPtr(),
- 940 spVideoSeek, poseExtractors, renderers
-
-
- 943 spWGui = {std::make_shared<WGui<TDatumsPtr>>(gui)};
-
-
-
-
-
- 949 catch (
const std::exception& e)
-
- 951 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+ 543 if (totalGpuNumber <= gpuNumberStart)
+ 544 error(
"Number of initial GPUs (`number_gpu_start`) must be lower than the total number of used"
+ 545 " GPUs (`number_gpu`)", __LINE__, __FUNCTION__, __FILE__);
+ 546 gpuNumber = totalGpuNumber - gpuNumberStart;
+
+
+ 549 log(
"Auto-detecting all available GPUs... Detected " + std::to_string(totalGpuNumber)
+ 550 +
" GPU(s), using " + std::to_string(gpuNumber) +
" of them starting at GPU "
+
+
+
+
+
+
+
+
+
+
+
+ 562 auto finalOutputSize = wrapperStructPose.
outputSize;
+
+
+
+
+
+
+ 569 wrapperStructInput.
producerSharedPtr->setProducerFpsMode(displayProducerFpsMode);
+
+
+
+
+
+
+
+
+ 578 if (finalOutputSize.x == -1 || finalOutputSize.y == -1)
+ 579 finalOutputSize = producerSize;
+
+
+
+
+
+ 585 const auto datumProducer = std::make_shared<DatumProducer<TDatums>>(
+
+
+
+ 589 wDatumProducer = std::make_shared<WDatumProducer<TDatumsPtr, TDatums>>(datumProducer);
+
+
+ 592 wDatumProducer =
nullptr;
+
+ 594 std::vector<std::shared_ptr<PoseExtractor>> poseExtractors;
+ 595 std::vector<std::shared_ptr<PoseGpuRenderer>> poseGpuRenderers;
+ 596 std::shared_ptr<PoseCpuRenderer> poseCpuRenderer;
+
+
+
+ 600 const auto scaleAndSizeExtractor = std::make_shared<ScaleAndSizeExtractor>(
+
+
+
+ 604 spWScaleAndSizeExtractor = std::make_shared<WScaleAndSizeExtractor<TDatumsPtr>>(scaleAndSizeExtractor);
+
+
+ 607 const auto cvMatToOpInput = std::make_shared<CvMatToOpInput>();
+ 608 spWCvMatToOpInput = std::make_shared<WCvMatToOpInput<TDatumsPtr>>(cvMatToOpInput);
+
+
+ 611 const auto cvMatToOpOutput = std::make_shared<CvMatToOpOutput>();
+ 612 spWCvMatToOpOutput = std::make_shared<WCvMatToOpOutput<TDatumsPtr>>(cvMatToOpOutput);
+
+
+
+ 616 std::vector<TWorker> cpuRenderers;
+
+ 618 spWPoses.resize(gpuNumber);
+ 619 if (wrapperStructPose.
enable)
+
+
+ 622 for (
auto gpuId = 0; gpuId < gpuNumber; gpuId++)
+ 623 poseExtractors.emplace_back(std::make_shared<PoseExtractorCaffe>(
+ 624 wrapperStructPose.
poseModel, modelFolder, gpuId + gpuNumberStart,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 641 for (
const auto& poseExtractor : poseExtractors)
+
+ 643 poseGpuRenderers.emplace_back(std::make_shared<PoseGpuRenderer>(
+
+
+
+
+
+
+
+
+
+ 653 poseCpuRenderer = std::make_shared<PoseCpuRenderer>(wrapperStructPose.
poseModel,
+
+
+
+
+
+
+
+
+ 662 spWPoses.resize(poseExtractors.size());
+ 663 for (
auto i = 0u; i < spWPoses.size(); i++)
+ 664 spWPoses.at(i) = {std::make_shared<WPoseExtractor<TDatumsPtr>>(poseExtractors.at(i))};
+
+
+
+
+ 669 if (wrapperStructFace.
enable)
+
+
+
+ 673 if (wrapperStructPose.
enable)
+
+ 675 const auto faceDetector = std::make_shared<FaceDetector>(wrapperStructPose.
poseModel);
+ 676 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
+
+
+
+
+
+ 682 log(
"Body keypoint detection is disabled. Hence, using OpenCV face detector (much less"
+
+ 684 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
+
+
+ 687 const auto faceDetectorOpenCV = std::make_shared<FaceDetectorOpenCV>(modelFolder);
+ 688 spWPoses.at(gpu).emplace_back(
+
+
+
+
+
+ 694 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
+
+
+ 697 const auto netOutputSize = wrapperStructFace.
netInputSize;
+ 698 const auto faceExtractor = std::make_shared<FaceExtractorCaffe>(
+ 699 wrapperStructFace.
netInputSize, netOutputSize, modelFolder,
+
+
+
+
+
+
+
+
+ 708 if (wrapperStructHand.
enable)
+
+ 710 const auto handDetector = std::make_shared<HandDetector>(wrapperStructPose.
poseModel);
+ 711 for (
auto gpu = 0u; gpu < spWPoses.size(); gpu++)
+
+
+
+
+ 716 spWPoses.at(gpu).emplace_back(
+
+
+
+
+
+
+ 723 const auto netOutputSize = wrapperStructHand.
netInputSize;
+ 724 const auto handExtractor = std::make_shared<HandExtractorCaffe>(
+ 725 wrapperStructHand.
netInputSize, netOutputSize, modelFolder,
+
+
+
+
+ 730 spWPoses.at(gpu).emplace_back(
+
+
+
+
+ 735 spWPoses.at(gpu).emplace_back(
+
+
+
+
+
+
+ 742 if (!poseGpuRenderers.empty())
+ 743 for (
auto i = 0u; i < spWPoses.size(); i++)
+
+ 745 poseGpuRenderers.at(i)
+
+
+
+
+
+
+
+
+
+ 755 const auto faceRenderer = std::make_shared<FaceCpuRenderer>(wrapperStructFace.
renderThreshold,
+
+
+
+
+
+
+
+
+ 764 for (
auto i = 0u; i < spWPoses.size(); i++)
+
+
+ 767 const auto faceRenderer = std::make_shared<FaceGpuRenderer>(
+
+
+
+
+ 772 if (!poseGpuRenderers.empty())
+
+ 774 const bool isLastRenderer = !renderHandGpu;
+
+ 776 poseGpuRenderers.at(i)
+
+
+
+
+
+
+
+
+
+ 786 error(
"Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+
+
+
+
+
+ 796 const auto handRenderer = std::make_shared<HandCpuRenderer>(wrapperStructHand.
renderThreshold,
+
+
+
+
+
+
+
+
+ 805 for (
auto i = 0u; i < spWPoses.size(); i++)
+
+
+ 808 const auto handRenderer = std::make_shared<HandGpuRenderer>(
+
+
+
+
+ 813 if (!poseGpuRenderers.empty())
+
+ 815 const bool isLastRenderer =
true;
+
+ 817 poseGpuRenderers.at(i)
+
+
+
+
+
+
+
+
+
+ 827 error(
"Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 831 mPostProcessingWs.clear();
+
+ 833 if (spWPoses.size() > 1u)
+
+
+
+
+ 838 const auto personIdExtractor = std::make_shared<PersonIdExtractor>();
+ 839 mPostProcessingWs.emplace_back(
+
+
+
+
+
+
+ 846 mPostProcessingWs =
mergeVectors(mPostProcessingWs, cpuRenderers);
+ 847 const auto opOutputToCvMat = std::make_shared<OpOutputToCvMat>();
+
+
+
+
+
+
+
+ 855 (finalOutputSize == producerSize || finalOutputSize.x <= 0 || finalOutputSize.y <= 0))
+
+
+
+
+
+ 861 auto keypointScaler = std::make_shared<KeypointScaler>(wrapperStructPose.
keypointScale);
+
+
+
+
+
+
+ 868 if (!writeKeypointCleaned.empty())
+
+ 870 const auto keypointSaver = std::make_shared<KeypointSaver>(writeKeypointCleaned,
+
+
+ 873 if (wrapperStructFace.
enable)
+
+ 875 if (wrapperStructHand.
enable)
+
+
+
+ 879 if (!writeKeypointJsonCleaned.empty())
+
+ 881 const auto keypointJsonSaver = std::make_shared<KeypointJsonSaver>(writeKeypointJsonCleaned);
+
+
+
+
+
+
+ 888 const auto humanFormat =
true;
+ 889 const auto cocoJsonSaver = std::make_shared<CocoJsonSaver>(wrapperStructOutput.
writeCocoJson,
+
+
+
+
+ 894 if (!writeImagesCleaned.empty())
+
+ 896 const auto imageSaver = std::make_shared<ImageSaver>(writeImagesCleaned,
+
+
+
+
+
+
+ 903 if (finalOutputSize.x <= 0 || finalOutputSize.y <= 0)
+ 904 error(
"Video can only be recorded if outputSize is fixed (e.g. video, webcam, IP camera),"
+ 905 "but not for a image directory.", __LINE__, __FUNCTION__, __FILE__);
+ 906 const auto originalVideoFps = (wrapperStructInput.
producerSharedPtr->get(CV_CAP_PROP_FPS) > 0.
+
+ 908 const auto videoSaver = std::make_shared<VideoSaver>(
+ 909 wrapperStructOutput.
writeVideo, CV_FOURCC(
'M',
'J',
'P',
'G'), originalVideoFps, finalOutputSize
+
+
+
+
+ 914 if (!writeHeatMapsCleaned.empty())
+
+ 916 const auto heatMapSaver = std::make_shared<HeatMapSaver>(writeHeatMapsCleaned,
+
+
+
+
+
+
+
+
+
+
+ 927 const auto guiInfoAdder = std::make_shared<GuiInfoAdder>(gpuNumber, wrapperStructOutput.
displayGui);
+
+
+
+
+
+
+
+ 935 std::vector<std::shared_ptr<Renderer>> renderers;
+
+ 937 renderers.emplace_back(std::static_pointer_cast<Renderer>(poseCpuRenderer));
+
+ 939 for (
const auto& poseGpuRenderer : poseGpuRenderers)
+ 940 renderers.emplace_back(std::static_pointer_cast<Renderer>(poseGpuRenderer));
+
+ 942 const auto gui = std::make_shared<Gui>(
+ 943 finalOutputSize, wrapperStructOutput.
fullScreen, mThreadManager.getIsRunningSharedPtr(),
+ 944 spVideoSeek, poseExtractors, renderers
+
+
+ 947 spWGui = {std::make_shared<WGui<TDatumsPtr>>(gui)};
+
+
+
+
-
-
- 955 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 960 configureThreadManager();
-
- 962 mThreadManager.exec();
-
- 964 catch (
const std::exception& e)
-
- 966 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+ 953 catch (
const std::exception& e)
+
+ 955 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 959 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 964 configureThreadManager();
+
+ 966 mThreadManager.exec();
-
-
- 970 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 975 configureThreadManager();
-
- 977 mThreadManager.start();
-
- 979 catch (
const std::exception& e)
-
- 981 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+ 968 catch (
const std::exception& e)
+
+ 970 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 974 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 979 configureThreadManager();
+
+ 981 mThreadManager.start();
-
-
- 985 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 990 mThreadManager.stop();
-
- 992 catch (
const std::exception& e)
+ 983 catch (
const std::exception& e)
+
+ 985 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 989 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
- 994 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+ 994 mThreadManager.stop();
-
-
- 998 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1003 return mThreadManager.isRunning();
-
- 1005 catch (
const std::exception& e)
+ 996 catch (
const std::exception& e)
+
+ 998 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 1002 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
- 1007 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1012 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1017 if (!mUserInputWs.empty())
- 1018 error(
"Emplace cannot be called if an input worker was already selected.",
- 1019 __LINE__, __FUNCTION__, __FILE__);
- 1020 return mThreadManager.tryEmplace(tDatums);
-
- 1022 catch (
const std::exception& e)
-
- 1024 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1029 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1034 if (!mUserInputWs.empty())
- 1035 error(
"Emplace cannot be called if an input worker was already selected.",
- 1036 __LINE__, __FUNCTION__, __FILE__);
- 1037 return mThreadManager.waitAndEmplace(tDatums);
-
- 1039 catch (
const std::exception& e)
-
- 1041 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1046 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1051 if (!mUserInputWs.empty())
- 1052 error(
"Push cannot be called if an input worker was already selected.",
- 1053 __LINE__, __FUNCTION__, __FILE__);
- 1054 return mThreadManager.tryPush(tDatums);
-
- 1056 catch (
const std::exception& e)
-
- 1058 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1063 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1068 if (!mUserInputWs.empty())
- 1069 error(
"Push cannot be called if an input worker was already selected.",
- 1070 __LINE__, __FUNCTION__, __FILE__);
- 1071 return mThreadManager.waitAndPush(tDatums);
-
- 1073 catch (
const std::exception& e)
-
- 1075 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1080 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1085 if (!mUserOutputWs.empty())
- 1086 error(
"Pop cannot be called if an output worker was already selected.",
- 1087 __LINE__, __FUNCTION__, __FILE__);
- 1088 return mThreadManager.tryPop(tDatums);
-
- 1090 catch (
const std::exception& e)
-
- 1092 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1097 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1102 if (!mUserOutputWs.empty())
- 1103 error(
"Pop cannot be called if an output worker was already selected.",
- 1104 __LINE__, __FUNCTION__, __FILE__);
- 1105 return mThreadManager.waitAndPop(tDatums);
-
- 1107 catch (
const std::exception& e)
-
- 1109 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1114 template<
typename TDatums,
typename TWorker,
typename TQueue>
-
-
-
-
- 1119 mConfigured =
false;
- 1120 mThreadManager.reset();
-
-
- 1123 mUserInputWs.clear();
- 1124 wDatumProducer =
nullptr;
- 1125 spWScaleAndSizeExtractor =
nullptr;
- 1126 spWCvMatToOpInput =
nullptr;
- 1127 spWCvMatToOpOutput =
nullptr;
-
- 1129 mPostProcessingWs.clear();
- 1130 mUserPostProcessingWs.clear();
-
-
- 1133 mUserOutputWs.clear();
-
- 1135 catch (
const std::exception& e)
-
- 1137 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+ 1007 return mThreadManager.isRunning();
+
+ 1009 catch (
const std::exception& e)
+
+ 1011 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1016 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1021 if (!mUserInputWs.empty())
+ 1022 error(
"Emplace cannot be called if an input worker was already selected.",
+ 1023 __LINE__, __FUNCTION__, __FILE__);
+ 1024 return mThreadManager.tryEmplace(tDatums);
+
+ 1026 catch (
const std::exception& e)
+
+ 1028 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1033 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1038 if (!mUserInputWs.empty())
+ 1039 error(
"Emplace cannot be called if an input worker was already selected.",
+ 1040 __LINE__, __FUNCTION__, __FILE__);
+ 1041 return mThreadManager.waitAndEmplace(tDatums);
+
+ 1043 catch (
const std::exception& e)
+
+ 1045 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1050 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1055 if (!mUserInputWs.empty())
+ 1056 error(
"Push cannot be called if an input worker was already selected.",
+ 1057 __LINE__, __FUNCTION__, __FILE__);
+ 1058 return mThreadManager.tryPush(tDatums);
+
+ 1060 catch (
const std::exception& e)
+
+ 1062 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1067 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1072 if (!mUserInputWs.empty())
+ 1073 error(
"Push cannot be called if an input worker was already selected.",
+ 1074 __LINE__, __FUNCTION__, __FILE__);
+ 1075 return mThreadManager.waitAndPush(tDatums);
+
+ 1077 catch (
const std::exception& e)
+
+ 1079 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1084 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1089 if (!mUserOutputWs.empty())
+ 1090 error(
"Pop cannot be called if an output worker was already selected.",
+ 1091 __LINE__, __FUNCTION__, __FILE__);
+ 1092 return mThreadManager.tryPop(tDatums);
+
+ 1094 catch (
const std::exception& e)
+
+ 1096 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1101 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1106 if (!mUserOutputWs.empty())
+ 1107 error(
"Pop cannot be called if an output worker was already selected.",
+ 1108 __LINE__, __FUNCTION__, __FILE__);
+ 1109 return mThreadManager.waitAndPop(tDatums);
+
+ 1111 catch (
const std::exception& e)
+
+ 1113 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1118 template<
typename TDatums,
typename TWorker,
typename TQueue>
+
+
+
+
+ 1123 mConfigured =
false;
+ 1124 mThreadManager.reset();
+
+
+ 1127 mUserInputWs.clear();
+ 1128 wDatumProducer =
nullptr;
+ 1129 spWScaleAndSizeExtractor =
nullptr;
+ 1130 spWCvMatToOpInput =
nullptr;
+ 1131 spWCvMatToOpOutput =
nullptr;
+
+ 1133 mPostProcessingWs.clear();
+ 1134 mUserPostProcessingWs.clear();
+
+
+ 1137 mUserOutputWs.clear();
-
-
- 1141 template<
typename TDatums,
typename TWorker,
typename TQueue>
- 1142 void Wrapper<TDatums, TWorker, TQueue>::configureThreadManager()
-
-
-
-
-
-
-
- 1150 error(
"Configure the Wrapper class before calling `start()`.", __LINE__, __FUNCTION__, __FILE__);
- 1151 if ((wDatumProducer ==
nullptr) == (mUserInputWs.empty())
-
-
-
- 1155 const auto message =
"You need to have 1 and only 1 producer selected. You can introduce your own"
- 1156 " producer by using setWorkerInput() or use the OpenPose default producer by"
- 1157 " configuring it in the configure function) or use the"
- 1158 " ThreadManagerMode::Asynchronous(In) mode.";
- 1159 error(message, __LINE__, __FUNCTION__, __FILE__);
-
- 1161 if (mOutputWs.empty() && mUserOutputWs.empty() && spWGui ==
nullptr
-
-
-
- 1165 error(
"No output selected.", __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1170 mThreadManager.reset();
-
- 1172 auto queueIn = 0ull;
- 1173 auto queueOut = 1ull;
-
- 1175 spWIdGenerator = std::make_shared<WIdGenerator<std::shared_ptr<TDatums>>>();
- 1176 if (!mUserInputWs.empty() && mUserInputWsOnNewThread)
-
-
- 1179 mThreadManager.add(mThreadId, mUserInputWs, queueIn++, queueOut++);
- 1180 if (spWScaleAndSizeExtractor !=
nullptr && spWCvMatToOpInput !=
nullptr)
-
-
-
- 1184 if (spWCvMatToOpOutput ==
nullptr)
- 1185 mThreadManager.add(mThreadId, {spWIdGenerator, spWScaleAndSizeExtractor, spWCvMatToOpInput},
- 1186 queueIn++, queueOut++);
-
- 1188 mThreadManager.add(mThreadId, {spWIdGenerator, spWScaleAndSizeExtractor, spWCvMatToOpInput,
- 1189 spWCvMatToOpOutput}, queueIn++, queueOut++);
-
-
- 1192 mThreadManager.add(mThreadId, spWIdGenerator, queueIn++, queueOut++);
-
-
-
-
- 1197 std::vector<TWorker> workersAux;
-
- 1199 if (!mUserInputWs.empty())
-
-
- 1202 else if (wDatumProducer !=
nullptr)
- 1203 workersAux =
mergeVectors(workersAux, {wDatumProducer});
-
-
-
- 1207 error(
"No input selected.", __LINE__, __FUNCTION__, __FILE__);
-
- 1209 workersAux =
mergeVectors(workersAux, {spWIdGenerator});
-
- 1211 if (spWScaleAndSizeExtractor !=
nullptr && spWCvMatToOpInput !=
nullptr)
- 1212 workersAux =
mergeVectors(workersAux, {spWScaleAndSizeExtractor,
- 1213 spWCvMatToOpInput});
-
- 1215 if (spWCvMatToOpOutput !=
nullptr)
- 1216 workersAux =
mergeVectors(workersAux, {spWCvMatToOpOutput});
-
- 1218 mThreadManager.add(mThreadId, workersAux, queueIn++, queueOut++);
-
-
-
-
- 1223 if (!spWPoses.empty())
-
- 1225 if (mMultiThreadEnabled)
-
- 1227 for (
auto& wPose : spWPoses)
-
- 1229 mThreadManager.add(mThreadId, wPose, queueIn, queueOut);
-
-
-
-
-
- 1235 if (spWPoses.size() > 1)
- 1236 log(
"Multi-threading disabled, only 1 thread running. All GPUs have been disabled but the"
- 1237 " first one, which is defined by gpuNumberStart (e.g. in the OpenPose demo, it is set"
-
- 1239 mThreadManager.add(mThreadId, spWPoses.at(0), queueIn, queueOut);
-
-
-
-
-
- 1245 if (!mUserPostProcessingWs.empty() && mUserPostProcessingWsOnNewThread)
-
-
- 1248 if (!mPostProcessingWs.empty())
-
-
- 1251 mThreadManager.add(mThreadId, mPostProcessingWs, queueIn++, queueOut++);
-
-
-
-
- 1256 mThreadManager.add(mThreadId, mUserPostProcessingWs, queueIn++, queueOut++);
-
-
- 1259 if (!mOutputWs.empty())
-
-
- 1262 mThreadManager.add(mThreadId, mOutputWs, queueIn++, queueOut++);
-
-
-
-
-
-
-
- 1270 auto workersAux =
mergeVectors(mPostProcessingWs, mUserPostProcessingWs);
-
- 1272 if (!workersAux.empty())
-
-
- 1275 mThreadManager.add(mThreadId, workersAux, queueIn++, queueOut++);
-
-
-
-
-
- 1281 if (!mUserOutputWs.empty())
-
- 1283 if (mUserOutputWsOnNewThread)
-
- 1285 mThreadManager.add(mThreadId, mUserOutputWs, queueIn++, queueOut++);
-
-
-
- 1289 mThreadManager.add(mThreadId-1, mUserOutputWs, queueIn++, queueOut++);
-
-
- 1292 if (spWGui !=
nullptr)
-
-
- 1295 mThreadManager.add(mThreadId, spWGui, queueIn++, queueOut++);
-
-
-
-
- 1300 catch (
const std::exception& e)
-
- 1302 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+ 1139 catch (
const std::exception& e)
+
+ 1141 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 1145 template<
typename TDatums,
typename TWorker,
typename TQueue>
+ 1146 void Wrapper<TDatums, TWorker, TQueue>::configureThreadManager()
+
+
+
+
+
+
+
+ 1154 error(
"Configure the Wrapper class before calling `start()`.", __LINE__, __FUNCTION__, __FILE__);
+ 1155 if ((wDatumProducer ==
nullptr) == (mUserInputWs.empty())
+
+
+
+ 1159 const auto message =
"You need to have 1 and only 1 producer selected. You can introduce your own"
+ 1160 " producer by using setWorkerInput() or use the OpenPose default producer by"
+ 1161 " configuring it in the configure function) or use the"
+ 1162 " ThreadManagerMode::Asynchronous(In) mode.";
+ 1163 error(message, __LINE__, __FUNCTION__, __FILE__);
+
+ 1165 if (mOutputWs.empty() && mUserOutputWs.empty() && spWGui ==
nullptr
+
+
+
+ 1169 error(
"No output selected.", __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1174 mThreadManager.reset();
+
+ 1176 auto queueIn = 0ull;
+ 1177 auto queueOut = 1ull;
+
+ 1179 spWIdGenerator = std::make_shared<WIdGenerator<std::shared_ptr<TDatums>>>();
+ 1180 if (!mUserInputWs.empty() && mUserInputWsOnNewThread)
+
+
+ 1183 mThreadManager.add(mThreadId, mUserInputWs, queueIn++, queueOut++);
+ 1184 if (spWScaleAndSizeExtractor !=
nullptr && spWCvMatToOpInput !=
nullptr)
+
+
+
+ 1188 if (spWCvMatToOpOutput ==
nullptr)
+ 1189 mThreadManager.add(mThreadId, {spWIdGenerator, spWScaleAndSizeExtractor, spWCvMatToOpInput},
+ 1190 queueIn++, queueOut++);
+
+ 1192 mThreadManager.add(mThreadId, {spWIdGenerator, spWScaleAndSizeExtractor, spWCvMatToOpInput,
+ 1193 spWCvMatToOpOutput}, queueIn++, queueOut++);
+
+
+ 1196 mThreadManager.add(mThreadId, spWIdGenerator, queueIn++, queueOut++);
+
+
+
+
+ 1201 std::vector<TWorker> workersAux;
+
+ 1203 if (!mUserInputWs.empty())
+
+
+ 1206 else if (wDatumProducer !=
nullptr)
+ 1207 workersAux =
mergeVectors(workersAux, {wDatumProducer});
+
+
+
+ 1211 error(
"No input selected.", __LINE__, __FUNCTION__, __FILE__);
+
+ 1213 workersAux =
mergeVectors(workersAux, {spWIdGenerator});
+
+ 1215 if (spWScaleAndSizeExtractor !=
nullptr && spWCvMatToOpInput !=
nullptr)
+ 1216 workersAux =
mergeVectors(workersAux, {spWScaleAndSizeExtractor,
+ 1217 spWCvMatToOpInput});
+
+ 1219 if (spWCvMatToOpOutput !=
nullptr)
+ 1220 workersAux =
mergeVectors(workersAux, {spWCvMatToOpOutput});
+
+ 1222 mThreadManager.add(mThreadId, workersAux, queueIn++, queueOut++);
+
+
+
+
+ 1227 if (!spWPoses.empty())
+
+ 1229 if (mMultiThreadEnabled)
+
+ 1231 for (
auto& wPose : spWPoses)
+
+ 1233 mThreadManager.add(mThreadId, wPose, queueIn, queueOut);
+
+
+
+
+
+ 1239 if (spWPoses.size() > 1)
+ 1240 log(
"Multi-threading disabled, only 1 thread running. All GPUs have been disabled but the"
+ 1241 " first one, which is defined by gpuNumberStart (e.g. in the OpenPose demo, it is set"
+
+ 1243 mThreadManager.add(mThreadId, spWPoses.at(0), queueIn, queueOut);
+
+
+
+
+
+ 1249 if (!mUserPostProcessingWs.empty() && mUserPostProcessingWsOnNewThread)
+
+
+ 1252 if (!mPostProcessingWs.empty())
+
+
+ 1255 mThreadManager.add(mThreadId, mPostProcessingWs, queueIn++, queueOut++);
+
+
+
+
+ 1260 mThreadManager.add(mThreadId, mUserPostProcessingWs, queueIn++, queueOut++);
+
+
+ 1263 if (!mOutputWs.empty())
+
+
+ 1266 mThreadManager.add(mThreadId, mOutputWs, queueIn++, queueOut++);
+
+
+
+
+
+
+
+ 1274 auto workersAux =
mergeVectors(mPostProcessingWs, mUserPostProcessingWs);
+
+ 1276 if (!workersAux.empty())
+
+
+ 1279 mThreadManager.add(mThreadId, workersAux, queueIn++, queueOut++);
+
+
+
+
+
+ 1285 if (!mUserOutputWs.empty())
+
+ 1287 if (mUserOutputWsOnNewThread)
+
+ 1289 mThreadManager.add(mThreadId, mUserOutputWs, queueIn++, queueOut++);
+
+
+
+ 1293 mThreadManager.add(mThreadId-1, mUserOutputWs, queueIn++, queueOut++);
+
+
+ 1296 if (spWGui !=
nullptr)
+
+
+ 1299 mThreadManager.add(mThreadId, spWGui, queueIn++, queueOut++);
+
+
+
-
-
- 1306 template<
typename TDatums,
typename TWorker,
typename TQueue>
- 1307 unsigned long long Wrapper<TDatums, TWorker, TQueue>::threadIdPP()
-
-
-
- 1311 if (mMultiThreadEnabled)
-
-
-
- 1315 catch (
const std::exception& e)
-
- 1317 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
-
-
-
-
- 1322 extern template class Wrapper<DATUM_BASE_NO_PTR>;
-
-
- 1325 #endif // OPENPOSE_WRAPPER_WRAPPER_HPP
+ 1304 catch (
const std::exception& e)
+
+ 1306 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+ 1310 template<
typename TDatums,
typename TWorker,
typename TQueue>
+ 1311 unsigned long long Wrapper<TDatums, TWorker, TQueue>::threadIdPP()
+
+
+
+ 1315 if (mMultiThreadEnabled)
+
+
+
+ 1319 catch (
const std::exception& e)
+
+ 1321 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
+
+
+
+
+ 1326 extern template class Wrapper<DATUM_BASE_NO_PTR>;
+
+
+ 1329 #endif // OPENPOSE_WRAPPER_WRAPPER_HPP
PoseModel poseModel
Definition: wrapperStructPose.hpp:87
Point< int > netInputSize
Definition: wrapperStructPose.hpp:30
@@ -1317,17 +1321,17 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
std::string writeHeatMapsFormat
Definition: wrapperStructOutput.hpp:89
Definition: wPoseSaver.hpp:12
bool identification
Definition: wrapperStructPose.hpp:156
-bool tryPush(const std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1047
+bool tryPush(const std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1051
Definition: wrapperStructPose.hpp:16
std::string writeKeypoint
Definition: wrapperStructOutput.hpp:36
float alphaKeypoint
Definition: wrapperStructFace.hpp:39
Definition: wFaceSaver.hpp:12
-void stop()
Definition: wrapper.hpp:986
+void stop()
Definition: wrapper.hpp:990
float alphaKeypoint
Definition: wrapperStructHand.hpp:59
-bool tryPop(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1081
-void exec()
Definition: wrapper.hpp:956
+bool tryPop(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1085
+void exec()
Definition: wrapper.hpp:960
@@ -1360,9 +1364,9 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
float scaleGap
Definition: wrapperStructPose.hpp:74
RenderMode renderMode
Definition: wrapperStructPose.hpp:80
-bool waitAndEmplace(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1030
+bool waitAndEmplace(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1034
Definition: wrapper.hpp:32
-bool tryEmplace(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1013
+bool tryEmplace(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1017
float scaleRange
Definition: wrapperStructHand.hpp:40
int gpuNumberStart
Definition: wrapperStructPose.hpp:59
RenderMode renderMode
Definition: wrapperStructFace.hpp:33
@@ -1373,8 +1377,8 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
Definition: wVideoSaver.hpp:11
Definition: wOpOutputToCvMat.hpp:11
-bool waitAndPush(const std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1064
-void start()
Definition: wrapper.hpp:971
+bool waitAndPush(const std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1068
+void start()
Definition: wrapper.hpp:975
OP_API std::string formatAsDirectory(const std::string &directoryPathString)
@@ -1390,7 +1394,7 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
Definition: wFaceRenderer.hpp:11
-bool waitAndPop(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1098
+bool waitAndPop(std::shared_ptr< TDatums > &tDatums)
Definition: wrapper.hpp:1102
Definition: threadManager.hpp:16
Definition: wPoseRenderer.hpp:11
@@ -1425,7 +1429,7 @@ $(document).ready(function(){initNavTree('wrapper_8hpp_source.html','');});
ScaleMode keypointScale
Definition: wrapperStructPose.hpp:46
ThreadManagerMode
Definition: enumClasses.hpp:9
int gpuNumber
Definition: wrapperStructPose.hpp:53
-bool isRunning() const
Definition: wrapper.hpp:999
+bool isRunning() const
Definition: wrapper.hpp:1003
void setWorkerInput(const TWorker &worker, const bool workerOnNewThread=true)
Definition: wrapper.hpp:323
float renderThreshold
Definition: wrapperStructFace.hpp:52