// // Created by Scheaven on 2020/3/23. // #include "ari_manager.h" #include "../utils/protomsg.pb.h" AriManager::AriManager() { } AriManager::~AriManager() { } void AriManager::doInfer(const char* cam_name, const void *img, TResult *t_result, void *info, const int info_size) { decode_detect(t_result, info, info_size); int temp = 0; int num = 0; int curr_num = 0; int bef_num = 0; if(t_result->count==temp){ num=num+1; }else{ temp=t_result->count; num=0; } std::string att_json = "\"{"; if(num==m_staticStruct::times){ cout<<"person num is constant: "<count; if (bef_num==curr_num){ cout<<"人数未发生变化,当前人数为:"<< curr_num<count; i++) { if(att_json.length()>2) { t_result->targets[0].attribute = new char[strlen(att_json.c_str())+1]; t_result->targets[0].attribute_size = strlen(att_json.c_str()); strcpy(t_result->targets[0].attribute, att_json.c_str()); } t_result->count = 1; } } void AriManager::decode_detect(TResult *t_result, void *human_info, const int human_info_size) { protomsg::RuleMessage rulemsg; rulemsg.ParseFromArray(human_info, human_info_size); for(int i = 0; i < rulemsg.message_size(); ++i) { auto &sdkmsg = rulemsg.message(i); if(sdkmsg.sdktype() == "BaseDetector") { DEBUG( "-----yolo-human_size:" + to_string(sdkmsg.target_size())); t_result->targets = (Target*)malloc(sizeof(Target) * sdkmsg.target_size()); // 绘制人脸信息的 int w_count = 0; for (int j = 0; j < sdkmsg.target_size(); ++j) { Target t; init_target(&t); auto &target = sdkmsg.target(j); DEBUG( "------yolo target.conf: " + std::to_string(target.confidence())); t.rect.left = target.rect().left(); t.rect.right = target.rect().right(); t.rect.top = target.rect().top(); t.rect.bottom = target.rect().bottom(); t.confidence = target.confidence(); t_result->targets[w_count] = t; w_count ++; } t_result->count = w_count; break; } } } void AriManager::init_target(Target *t){ t->attribute = NULL; t->feature = NULL; t->id = 0; t->rect = TRect{0,0,0,0}; t->confidence = 0; t->attribute_size = 0; t->feature_size = 0; }