takeaway_member_cls.hpp 2.69 KB
/*
 * @Author: yangzilong
 * @Date: 2021-11-25 10:42:54
 * @Last Modified by: yangzilong
 * @Email: yangzilong@objecteye.com
 * @Description:
 */
#pragma once
#include <map>
#include <vector>
#include "include.h"
#include "takeway_member.h"

#define MAX_BATCH 20
#define IMAGE_CROP_EXPAND_RATIO 0
#define MAX_OBJ_BOX_COUNT 100

namespace ai_engine_module
{
    namespace takeaway_member_classification
    {
        // typedef long id_t;
        using id_t = obj_key_t;
        using task_id_t = std::string;
        using algor_param_type = algor_config_param_takeaway_member_classification*;

        typedef struct input_data_wrap_t
        {
            id_t id;
            long objId;
            std::string taskId;
            box_t box;
        } input_data_wrap_t;


        typedef struct mn_frame_t
        {
            uint m_frame;
            uint n_frame;

            // explicit
            mn_frame_t(uint m = 0, uint n = 0)
                : m_frame(m)
                , n_frame(n)
            {}

            void reset()
            {
                m_frame = 0;
                n_frame = 0;
            }

        } mn_frame_t;

        typedef struct result_data_t
        {
            box_t box;
            sy_img ori_img;
            sy_img roi_img;
            id_t id;
            long objId;
            int category;
            std::string taskId;
        } result_data_t;

        class TakeawayMemberCls
        {
            /**
             * @brief
             *  1. move able
             */
        public:
            TakeawayMemberCls();

            ~TakeawayMemberCls();

            bool check_initied();
            bool init(int gpu_id, char* trt_serialize_file = "./serialize_file/takeaway_member_cls");

            bool update_mstreams(const std::set<task_id_t>& taskIds, const sy_img* det_input_images, const std::vector<onelevel_det_result>& det_result);
            bool update_mstreams2(const std::vector<task_id_t>& taskIds, const sy_img* det_input_images, const std::vector<onelevel_det_result>& det_result);

            std::shared_ptr<result_data_t> get_result_by_objectid(const id_t& id, bool do_erase = true);

            void force_release_result(const task_id_t& task_id);

            TakeawayMemberCls(const TakeawayMemberCls&) = delete;
            TakeawayMemberCls& operator=(const TakeawayMemberCls&) = delete;

        private:
            static algorithm_type_t algor_type_;

            bool init_;
            void* tools_;
            task_param_manager* task_param_manager_;
            std::map<id_t, mn_frame_t> id_to_mn_;
            std::map<id_t, result_data_t> id_to_result_;
        };
    }  // namespace takeaway_member_clasiication
} // namespace ai_engine_module