12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include <memory>
- #include <string>
- #include <utility>
- #include <vector>
- #include "cnstream_frame_va.hpp"
- #include "cnstream_logging.hpp"
- #include "video_postproc.hpp"
- class VideoPostprocSsd : public cnstream::VideoPostproc {
- public:
-
- bool Execute(infer_server::InferData* output_data, const infer_server::ModelIO& model_output,
- const infer_server::ModelInfo& model_info) override;
- DECLARE_REFLEX_OBJECT_EX(VideoPostprocSsd, cnstream::VideoPostproc)
- };
- IMPLEMENT_REFLEX_OBJECT_EX(VideoPostprocSsd, cnstream::VideoPostproc)
- bool VideoPostprocSsd::Execute(infer_server::InferData* output_data,
- const infer_server::ModelIO& model_output,
- const infer_server::ModelInfo& model_info) {
- LOGF_IF(DEMO, model_info.InputNum() != 1);
- LOGF_IF(DEMO, model_info.OutputNum() != 1);
- LOGF_IF(DEMO, model_output.buffers.size() != 1);
- cnstream::CNObjsVec objs;
- const float* data = reinterpret_cast<const float*>(model_output.buffers[0].Data());
- unsigned box_num = static_cast<unsigned>(data[0]);
- data += 64;
- for (unsigned bi = 0; bi < box_num; ++bi) {
- if (data[1] == 0) continue;
- if (threshold_ > 0 && data[2] < threshold_) continue;
- std::shared_ptr<cnstream::CNInferObject> object = std::make_shared<cnstream::CNInferObject>();
- object->id = std::to_string(static_cast<int>(data[1] - 1));
- object->score = data[2];
- object->bbox.x = data[3];
- object->bbox.y = data[4];
- object->bbox.w = data[5] - object->bbox.x;
- object->bbox.h = data[6] - object->bbox.y;
- objs.push_back(object);
- data += 7;
- }
- cnstream::CNFrameInfoPtr frame = output_data->GetUserData<cnstream::CNFrameInfoPtr>();
- cnstream::CNInferObjsPtr objs_holder = frame->collection.Get<cnstream::CNInferObjsPtr>(cnstream::kCNInferObjsTag);
- std::lock_guard<std::mutex> objs_mutex(objs_holder->mutex_);
- objs_holder->objs_.insert(objs_holder->objs_.end(), objs.begin(), objs.end());
- return true;
- }
|