       (apply 'insert
        `(
          "#pragma once
-#include <deephi/base/dpu/dpu_task.hpp>
 #include <opencv2/core.hpp>
+#include <memory>
 
 namespace deephi { namespace " ,project-name " {
 struct " ,interface-name "Result {

      (insert
       "
#include \"./" project-name "_imp.hpp\"

namespace  deephi {namespace " project-name " {

" interface-name "Imp::" interface-name "Imp() {}
" interface-name "Imp::~" interface-name "Imp() {}

" interface-name "Result " interface-name "Imp::run(const cv::Mat& image) {
  return " interface-name "Result{};
}


namespace deephi { namespace " project-name " {
class " interface-name "Imp :public " interface-name " {
  public:
    " interface-name "Imp(bool need_preprocess = true);
    virtual ~" interface-name "Imp();

  private:
    virtual " interface-name "Result run(const cv::Mat& image) override;
  private:
   std::unique_ptr<deephi::base::DpuTask> task_;
   std::vector<deephi::base::DpuLayerInput> layers_input_;
   std::vector<deephi::base::DpuLayerOutput> layers_output_;

};
} }
