12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include <opencv2/opencv.hpp>
- #include <memory>
- #include <utility>
- #include <vector>
- #include "cnstream_frame_va.hpp"
- #include "preproc.hpp"
- class PreprocLprnet : public cnstream::ObjPreproc {
- public:
- int Execute(const std::vector<float*>& net_inputs, const std::shared_ptr<edk::ModelLoader>& model,
- const cnstream::CNFrameInfoPtr& finfo, const std::shared_ptr<cnstream::CNInferObject>& pobj) override;
- DECLARE_REFLEX_OBJECT_EX(PreprocLprnet, cnstream::ObjPreproc);
- };
- IMPLEMENT_REFLEX_OBJECT_EX(PreprocLprnet, cnstream::ObjPreproc)
- int PreprocLprnet::Execute(const std::vector<float*>& net_inputs, const std::shared_ptr<edk::ModelLoader>& model,
- const cnstream::CNFrameInfoPtr& finfo,
- const std::shared_ptr<cnstream::CNInferObject>& pobj) {
- cnstream::CNDataFramePtr frame = finfo->collection.Get<cnstream::CNDataFramePtr>(cnstream::kCNDataFrameTag);
-
- cv::Mat frame_bgr = frame->ImageBGR();
-
- int w = frame->width;
- int h = frame->height;
- cv::Rect obj_roi(pobj->bbox.x * w, pobj->bbox.y * h, pobj->bbox.w * w, pobj->bbox.h * h);
- cv::Mat obj_bgr = frame_bgr(obj_roi);
-
- int input_w = model->InputShape(0).W();
- int input_h = model->InputShape(0).H();
- cv::Mat obj_bgr_resized;
- cv::resize(obj_bgr, obj_bgr_resized, cv::Size(input_h, input_w));
-
- cv::transpose(obj_bgr_resized, obj_bgr_resized);
-
- cv::Mat obj_bgra;
- cv::Mat a(input_h, input_w, CV_8UC1, cv::Scalar(0.0));
- std::vector<cv::Mat> vec_mat = {obj_bgr_resized, a};
- cv::merge(std::move(vec_mat), obj_bgra);
-
- cv::Mat obj_bgra_float32(input_h, input_w, CV_32FC4, net_inputs[0]);
- obj_bgra.convertTo(obj_bgra_float32, CV_32FC4);
- return 0;
- }
|