OpenPose  1.7.0
The first real-time multi-person system to jointly detect human body, hand, facial, and foot keypoints
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
wImageSaver.hpp
Go to the documentation of this file.
1 #ifndef OPENPOSE_FILESTREAM_W_IMAGE_SAVER_HPP
2 #define OPENPOSE_FILESTREAM_W_IMAGE_SAVER_HPP
3 
7 
8 namespace op
9 {
10  template<typename TDatums>
11  class WImageSaver : public WorkerConsumer<TDatums>
12  {
13  public:
14  explicit WImageSaver(const std::shared_ptr<ImageSaver>& imageSaver);
15 
16  virtual ~WImageSaver();
17 
19 
20  void workConsumer(const TDatums& tDatums);
21 
22  private:
23  const std::shared_ptr<ImageSaver> spImageSaver;
24 
25  DELETE_COPY(WImageSaver);
26  };
27 }
28 
29 
30 
31 
32 
33 // Implementation
35 namespace op
36 {
37  template<typename TDatums>
38  WImageSaver<TDatums>::WImageSaver(const std::shared_ptr<ImageSaver>& imageSaver) :
39  spImageSaver{imageSaver}
40  {
41  }
42 
43  template<typename TDatums>
45  {
46  }
47 
48  template<typename TDatums>
50  {
51  }
52 
53  template<typename TDatums>
54  void WImageSaver<TDatums>::workConsumer(const TDatums& tDatums)
55  {
56  try
57  {
58  if (checkNoNullNorEmpty(tDatums))
59  {
60  // Debugging log
61  opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
62  // Profiling speed
63  const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__);
64  // T* to T
65  auto& tDatumsNoPtr = *tDatums;
66  // Record image(s) on disk
67  std::vector<Matrix> opOutputDatas(tDatumsNoPtr.size());
68  for (auto i = 0u; i < tDatumsNoPtr.size(); i++)
69  opOutputDatas[i] = tDatumsNoPtr[i]->cvOutputData;
70  const auto fileName = (!tDatumsNoPtr[0]->name.empty()
71  ? tDatumsNoPtr[0]->name : std::to_string(tDatumsNoPtr[0]->id));
72  spImageSaver->saveImages(opOutputDatas, fileName);
73  // Profiling speed
74  Profiler::timerEnd(profilerKey);
75  Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__);
76  // Debugging log
77  opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
78  }
79  }
80  catch (const std::exception& e)
81  {
82  this->stop();
83  error(e.what(), __LINE__, __FUNCTION__, __FILE__);
84  }
85  }
86 
88 }
89 
90 #endif // OPENPOSE_FILESTREAM_W_IMAGE_SAVER_HPP
static void printAveragedTimeMsOnIterationX(const std::string &key, const int line, const std::string &function, const std::string &file, const unsigned long long x=DEFAULT_X)
static const std::string timerInit(const int line, const std::string &function, const std::string &file)
static void timerEnd(const std::string &key)
WImageSaver(const std::shared_ptr< ImageSaver > &imageSaver)
Definition: wImageSaver.hpp:38
void workConsumer(const TDatums &tDatums)
Definition: wImageSaver.hpp:54
void initializationOnThread()
Definition: wImageSaver.hpp:49
virtual ~WImageSaver()
Definition: wImageSaver.hpp:44
bool checkNoNullNorEmpty(const TPointerContainer &tPointerContainer)
COMPILE_TEMPLATE_DATUM(WPoseTriangulation)
OP_API void error(const std::string &message, const int line=-1, const std::string &function="", const std::string &file="")
void opLogIfDebug(const T &message, const Priority priority=Priority::Max, const int line=-1, const std::string &function="", const std::string &file="")
Definition: errorAndLog.hpp:97