#ifndef OPENPOSE_HAND_W_HAND_EXTRACTOR_NET_HPP #define OPENPOSE_HAND_W_HAND_EXTRACTOR_NET_HPP #include #include #include namespace op { template class WHandExtractorNet : public Worker { public: explicit WHandExtractorNet(const std::shared_ptr& handExtractorNet); virtual ~WHandExtractorNet(); void initializationOnThread(); void work(TDatums& tDatums); private: std::shared_ptr spHandExtractorNet; DELETE_COPY(WHandExtractorNet); }; } // Implementation #include namespace op { template WHandExtractorNet::WHandExtractorNet(const std::shared_ptr& handExtractorNet) : spHandExtractorNet{handExtractorNet} { } template WHandExtractorNet::~WHandExtractorNet() { } template void WHandExtractorNet::initializationOnThread() { spHandExtractorNet->initializationOnThread(); } template void WHandExtractorNet::work(TDatums& tDatums) { try { if (checkNoNullNorEmpty(tDatums)) { // Debugging log opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Profiling speed const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); // Extract people hands for (auto& tDatumPtr : *tDatums) { spHandExtractorNet->forwardPass(tDatumPtr->handRectangles, tDatumPtr->cvInputData); for (auto hand = 0 ; hand < 2 ; hand++) { tDatumPtr->handHeatMaps[hand] = spHandExtractorNet->getHeatMaps()[hand].clone(); tDatumPtr->handKeypoints[hand] = spHandExtractorNet->getHandKeypoints()[hand].clone(); } } // Profiling speed Profiler::timerEnd(profilerKey); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__); // Debugging log opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } } catch (const std::exception& e) { this->stop(); tDatums = nullptr; error(e.what(), __LINE__, __FUNCTION__, __FILE__); } } COMPILE_TEMPLATE_DATUM(WHandExtractorNet); } #endif // OPENPOSE_HAND_W_HAND_EXTRACTOR_NET_HPP