#ifndef OPENPOSE__FILESTREAM__W_IMAGE_SAVER_HPP #define OPENPOSE__FILESTREAM__W_IMAGE_SAVER_HPP #include // std::shared_ptr #include #include "../thread/workerConsumer.hpp" #include "imageSaver.hpp" namespace op { template class WImageSaver : public WorkerConsumer { public: explicit WImageSaver(const std::shared_ptr& imageSaver); void initializationOnThread(); void workConsumer(const TDatums& tDatums); private: const std::shared_ptr spImageSaver; DELETE_COPY(WImageSaver); }; } // Implementation #include #include #include "../utilities/errorAndLog.hpp" #include "../utilities/macros.hpp" #include "../utilities/pointerContainer.hpp" #include "../utilities/profiler.hpp" namespace op { template WImageSaver::WImageSaver(const std::shared_ptr& imageSaver) : spImageSaver{imageSaver} { } template void WImageSaver::initializationOnThread() { } template void WImageSaver::workConsumer(const TDatums& tDatums) { try { if (checkNoNullNorEmpty(tDatums)) { // Debugging log dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Profiling speed const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); // T* to T auto& tDatumsNoPtr = *tDatums; // Record image(s) on disk std::vector cvOutputDatas(tDatumsNoPtr.size()); for (auto i = 0; i < tDatumsNoPtr.size(); i++) cvOutputDatas[i] = tDatumsNoPtr[i].cvOutputData; const auto fileName = (!tDatumsNoPtr[0].name.empty() ? tDatumsNoPtr[0].name : std::to_string(tDatumsNoPtr[0].id)); spImageSaver->saveImages(cvOutputDatas, fileName); // Profiling speed Profiler::timerEnd(profilerKey); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__, Profiler::DEFAULT_X); // Debugging log dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } } catch (const std::exception& e) { this->stop(); error(e.what(), __LINE__, __FUNCTION__, __FILE__); } } COMPILE_TEMPLATE_DATUM(WImageSaver); } #endif // OPENPOSE__FILESTREAM__W_IMAGE_SAVER_HPP