#include #include #include #include #include #include #include #include "header.h" #include "acl/acl.h" #include "acl/ops/acl_dvpp.h" #include "task_param_manager.h" #include "../reprocessing_module/snapshot_reprocessing.h" #include "../reprocessing_module/save_snapshot_reprocessing.h" #include "../ai_engine_module/ai_engine_module.h" #include "../util/JpegUtil.h" #include "atlas_licence.h"//授权文件 #ifdef POST_USE_RABBITMQ #include "../reprocessing_module/mq_manager.hpp" #endif using namespace std; class DeviceMemory; //分割信息 typedef struct seg_infos { bool isseg = false; //是否分割 vector> traffic_region; //道路区域(多个) vector labels; //道路区域对应的类别:机动车道、非机动车道等 vector> fence_region; //护栏区域(多个) vector fence_labels; //护栏区域对应的类别:道路护栏、车道分割栏等 } seg_infos; class CMultiSourceProcess { public: CMultiSourceProcess(); ~CMultiSourceProcess(); int InitAlgorthim(tsl_aiplatform_param vptParam); bool AddTask(task_param _cur_task_param); bool PauseTask(const string taskID); bool RestartTask(const string taskID); bool FinishTask(const string taskID); void CloseAllTask(); int SnapShot(task_param param); int CountRunningTask(); void CloseAllTask2(); #ifdef POST_USE_RABBITMQ int AddMqConn(mq_type_t mq_type, rabbitmq_conn_params_t mq_conn_param); int GetTaskStatus(const string taskID); #endif public: int algorthim_process_thread(); // 算法处理线程 void task_finished(const string task_id); void decoded_cbk(DeviceMemory* devFrame); void timing_snapshot_thread(); // 发送录制消息给任务 int recode_thread(); bool CheckTime(); bool CheckLabel(int devId); bool UpdateLabel(); private: // 算法相关 int algorthim_vpt(vector vec_gpuMem); // 人脸检测抓拍算法 void algorthim_face_detect(vector vec_gpuMem); // 逆行 void algorthim_retrograde(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 闯入 void algorthim_trespass(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult ,vector>& deleteObjectID); // 道路分割 int algorthim_road_seg(vector vec_gpuMem); // 轨迹记录 void trace_record(vector& vpt_interest_task_id, vector& vptResult); // 三轮车载人 void algorithm_tricycle_manned(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 货车载人 void algorithm_truck_manned(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 二轮车超员及未戴盔 void algorithm_motor_hs_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 电动车改装(加雨棚)及二轮车驾乘人员使用手机 void algorithm_motor_refit_phone_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 二轮车驾乘人员使用手机 void algorithm_motor_phone_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 电动车改装(加雨棚) void algorithm_motor_refit_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 行人/二轮车闯红灯 void algorithm_traffic_light_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); // 道路分割相关算法--占用机动车道等 void algorithm_roadseg_correlation_process(vector& vpt_interest_task_id, vector vpt_interest_imgs, vector& vptResult); private: // 工具处理函数 void clear_finished_task(); bool finish_task(const string taskID, const bool delete_snapshot); int algorithm_vehicle_relult(vector vec_devMem, vector& vptResult, vector>& delete_object_id); void send_locus_finished_msg(vector& vpt_interest_task_id, vector> deleteObjectID); void vehicle_snapshot(vector& vpt_interest_task_id, vector> deleteObjectID); void vehicle_locus_finished(const OBJ_KEY obj_key); bool save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type, vpc_img_info img_info, vpc_img_info roi_img, const long long id,const std::string &json_str); void retrograde_snapshot(vector& vpt_interest_task_id, vector> deleteObjectID); void trespass_snapshot(vector& vpt_interest_task_id, vector> deleteObjectID); void retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ; // village void village_snapshot(vector& vpt_interest_task_id, vector vec_vptMem, vector> deleteObjectID); void face_locus_finished(const OBJ_KEY obj_key); int snapshot_task(std::string& uri_or_name, const std::string& file_name, bool bInTask); private: int m_devId; snapshot_reprocessing *m_snapshot_reprocessing{nullptr}; task_param_manager *m_task_param_manager{nullptr}; save_snapshot_reprocessing *m_save_snapshot_reprocessing{nullptr}; std::thread* m_timing_snapshot_thread; VPTProcess vpt_process; RoadSegProcess seg_process; Road3clsSegProcess seg3cls_process; int skip_frame_ = 5; // 控制跳帧参数 deque m_RgbDataList; mutex m_DataListMtx; mutex m_FinishedTaskMtx; map m_FinishedTaskMap; mutex m_ActiveFinishedTaskMtx ; map m_ActiveFinishedTaskMap; // 记录主动结束的任务,不发送mq mutex m_RoadSegTaskMtx ; map m_RoadSegTaskMap; // 记录道路分割相关信息 mutex m_TotalObjMtx ; map m_total_obj_info; // 记录目标轨迹 thread* m_pAlgorthimThread; bool m_bfinish{false}; int m_batch_size{1}; set m_total_snapshot_info_multi_object; mutex m_total_mutex; #ifdef POST_USE_RABBITMQ mq::Manager *mq_manager_{nullptr}; #endif ai_engine_module::pedestrian_vehicle_retrograde::PedestrianVehicleRetrograde pedestrian_vehicle_retrograde_; ai_engine_module::pedestrian_vehicle_trespass::PedestrianVehicleTrespass pedestrian_vehicle_trespass_; ai_engine_module::tricycle_manned_process::TricycleMannedProcess tricycle_manned_; ai_engine_module::truck_manned_process::TruckMannedProcess truck_manned_; ai_engine_module::motocycle_hs_process::MotorHsProcess motor_hsprocess_; ai_engine_module::motocycle_refit_phone_process::MotorRefitPhoneProcess motor_refit_phoneprocess_; // ai_engine_module::motocycle_phone_process::MotorPhoneProcess motor_phoneprocess_; ai_engine_module::motocycle_refit_process::MotorRefitProcess motor_refitprocess_; ai_engine_module::traffic_light_process::TrafficLightProcess traffic_lightprocess_; ai_engine_module::road_seg_correlation_process::RoadSegCorrelation roadseg_corrprocess_; face_det_ai_engine m_face_det_ai_engine; // 人脸检测 deque m_recoderinfo_queue; mutex m_recoderinfo_queue_mtx; thread* m_recode_thread {nullptr}; void *skt_handle = nullptr;//授权 atlas_licence_check_param check_param;//授权 int check_label = -1;//授权 -1=未授权 0=授权 1=授权check日已经check成功(每月一次check) };