Commit 52516fb93472b0e1a6cf6d87ad3426f7db96c7f0

Authored by Hu Chunming
1 parent 3f4b245b

添加授权代码;

代码优化
src/PicAnalysis.cpp
1 #include "PicAnalysis.h" 1 #include "PicAnalysis.h"
2 #include "./utils/logger.hpp" 2 #include "./utils/logger.hpp"
3 3
  4 +#define AUTHORIZATION
  5 +#define productSN "C7C1FF4EDEF1452F8BBEC8B36EAECEC0" //linux 农村一体机图片版 产品序列号
4 6
5 PicAnalysis::PicAnalysis(/* args */) 7 PicAnalysis::PicAnalysis(/* args */)
6 { 8 {
@@ -34,6 +36,18 @@ int PicAnalysis::init(VillageParam param) { @@ -34,6 +36,18 @@ int PicAnalysis::init(VillageParam param) {
34 36
35 int ret = SY_FAILED; 37 int ret = SY_FAILED;
36 38
  39 +#ifndef AUTHORIZATION
  40 + if (!CheckTime()) { //时间限制
  41 + LOG_ERROR("CheckTime failed.");
  42 + return -106 ;
  43 + }
  44 +#else
  45 + if (!CheckLabel(dev_id)) { //机器授权
  46 + LOG_ERROR("CheckLabel failed.");
  47 + return -106 ;
  48 + }
  49 +#endif
  50 +
37 VehicleAnalysisParam vehicle_analysis_param; 51 VehicleAnalysisParam vehicle_analysis_param;
38 vehicle_analysis_param.devId = dev_id; 52 vehicle_analysis_param.devId = dev_id;
39 vehicle_analysis_param.sdk_root = param.sdk_path; 53 vehicle_analysis_param.sdk_root = param.sdk_path;
@@ -139,64 +153,30 @@ vector<AnalysisResult> PicAnalysis::analysis_file(vector<string> vec_file_path){ @@ -139,64 +153,30 @@ vector<AnalysisResult> PicAnalysis::analysis_file(vector<string> vec_file_path){
139 return analysis_img(vec_img); 153 return analysis_img(vec_img);
140 } 154 }
141 155
142 -vector<AnalysisResult> PicAnalysis::va_result2AnalysisResult(va_result* result, int batchsize) {  
143 -  
144 - vector<AnalysisResult> vec_result; 156 +vector<AnalysisResult> PicAnalysis::analysis_img(vector<sy_img> vec_img){
145 157
146 - for (int b = 0; b < batchsize; b++)  
147 - {  
148 - vector<VehicleInfo> vec_info;  
149 - for(int c=0;c<result[b].count;c++)  
150 - {  
151 - vehicle_info result_info = result[b].info[c];  
152 -  
153 - VehicleInfo info;  
154 - info.vehicle_detect_res = result_info.vehicle_detect_res ;  
155 - info.vehicle_win_detect_res = result_info.vehicle_win_detect_res ;  
156 - info.vehicle_body_detect_res = result_info.vehicle_body_detect_res ;  
157 - info.vehicle_color_res = result_info.vehicle_color_res ;  
158 - info.vehicle_recg_res = result_info.vehicle_recg_res ;  
159 - info.vehicle_plate_det_recg_res = result_info.vehicle_plate_det_recg_res;  
160 - info.vehicle_illegal_det_res = result_info.vehicle_illegal_det_res ;  
161 - info.vehicle_fea_res = result_info.vehicle_fea_res ;  
162 - info.mta_res = result_info.mta_res ;  
163 - info.manned_res = result_info.manned_res ;  
164 - info.type = result_info.type ;  
165 - info.vpt_type = result_info.vpt_type ;  
166 -  
167 -  
168 - auto pendant_result = result_info.vehicle_pendant_det_res;  
169 - for (size_t j = 0; j < pendant_result.count; j++)  
170 - {  
171 - auto pendant_det_info = pendant_result.vpd_res[j];  
172 -  
173 - pendant_info one_pendant_info;  
174 - one_pendant_info.rect = pendant_det_info.rect;  
175 - one_pendant_info.index = pendant_det_info.index;  
176 - one_pendant_info.confidence = pendant_det_info.confidence;  
177 - one_pendant_info.driver_copilot_info = pendant_det_info.driver_copilot_info;  
178 - info.vehicle_pendant_det_res.push_back(one_pendant_info);  
179 - } 158 + std::lock_guard<std::mutex> l(m_single_mtx);
180 159
181 - vec_info.push_back(info);  
182 - } 160 + vector<AnalysisResult> vec_result;
183 161
184 - AnalysisResult one_result;  
185 - one_result.info = vec_info;  
186 - vec_result.push_back(one_result); 162 +#ifndef AUTHORIZATION
  163 + if (!CheckTime()) { //时间限制
  164 + LOG_FATAL("authority failed!");
  165 + return vec_result;
187 } 166 }
188 -  
189 - return vec_result;  
190 -}  
191 -  
192 -vector<AnalysisResult> PicAnalysis::analysis_img(vector<sy_img> vec_img){ 167 +#else
  168 + if (check_label == -1) { //机器授权
  169 + LOG_FATAL("authority failed!");
  170 + return vec_result;
  171 + }
  172 + if (!UpdateLabel()) {
  173 + LOG_FATAL("authority failed!");
  174 + return vec_result;
  175 + }
  176 +#endif
193 177
194 LOG_INFO("vec_img size:{}", vec_img.size()); 178 LOG_INFO("vec_img size:{}", vec_img.size());
195 179
196 - std::lock_guard<std::mutex> l(m_single_mtx);  
197 -  
198 - vector<AnalysisResult> vec_result;  
199 -  
200 const int batch_size = vec_img.size(); 180 const int batch_size = vec_img.size();
201 181
202 int ret = aclrtSetCurrentContext(m_ctx); 182 int ret = aclrtSetCurrentContext(m_ctx);
@@ -205,11 +185,7 @@ vector&lt;AnalysisResult&gt; PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){ @@ -205,11 +185,7 @@ vector&lt;AnalysisResult&gt; PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){
205 return vec_result; 185 return vec_result;
206 } 186 }
207 187
208 - va_result* result = m_vehicle_analysis.detect(vec_img);  
209 - if (result) {  
210 - vec_result = va_result2AnalysisResult(result, batch_size);  
211 - m_vehicle_analysis.release_result(result, vec_img.size());  
212 - } 188 + vec_result = m_vehicle_analysis.detect(vec_img);
213 189
214 LOG_INFO("vec_result size:{}", vec_result.size()); 190 LOG_INFO("vec_result size:{}", vec_result.size());
215 191
@@ -426,4 +402,105 @@ int PicAnalysis::release() { @@ -426,4 +402,105 @@ int PicAnalysis::release() {
426 aclrtDestroyContext(m_ctx); 402 aclrtDestroyContext(m_ctx);
427 403
428 return 0; 404 return 0;
  405 +}
  406 +
  407 +bool PicAnalysis::CheckLabel(int devId) {
  408 + const char *token_password = "village_atlas_arm_2023";
  409 + std::string guid = std::string("village_atlas_arm")+std::to_string(devId);
  410 + atlas_licence_param lic_param;
  411 + memset(&lic_param, 0, sizeof(atlas_licence_param));
  412 + sprintf(lic_param.product_id, "%s", productSN);
  413 + sprintf(lic_param.guid, "%s",guid.c_str());
  414 + sprintf(lic_param.token_pwd, "%s", token_password);
  415 + lic_param.channel_num = 1;
  416 + atlas_licence_token param_token;
  417 + memset(&param_token, 0, sizeof(atlas_licence_token));
  418 +
  419 + int result = atlas_licence_connect(&(skt_handle), lic_param, &param_token);
  420 + //printf("result:%d,code:%d,msg:%s \n", result, param_token.code, param_token.msg);
  421 + //printf("token:%s\n", param_token.token);
  422 + std::string recv_token = std::string(param_token.token);
  423 +
  424 + //atlas_licence_check_param check_param;
  425 + memset(&(check_param), 0, sizeof(atlas_licence_check_param));
  426 + sprintf(check_param.token_pwd, "%s", token_password);
  427 + sprintf(check_param.time, "%s", "2023-01-10 20:00:00");
  428 + sprintf(check_param.token, "%s", recv_token .c_str());
  429 + check_param.consume = 2;
  430 +
  431 + //授权check------------
  432 + check_label = -1;//初始值
  433 + std::cout << "sy_licence_check start." << std::endl;
  434 + atlas_licence_check_result check_result;
  435 + memset(&check_result, 0, sizeof(atlas_licence_check_result));
  436 + check_result.code = -1;
  437 +
  438 + int res = atlas_licence_check(skt_handle, check_param, &check_result);
  439 + if(res!=0) {
  440 + std::cout << "sy_licence_check failed." << std::endl;
  441 + return false;
  442 + }
  443 + //std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
  444 + if(check_result.code!=0) {
  445 + std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
  446 + return false;
  447 + }
  448 + std::cout << "sy_licence_check end." << std::endl;
  449 +
  450 + check_label = 0;//授权成功
  451 + return true;
  452 +}
  453 +
  454 +bool PicAnalysis::UpdateLabel() {
  455 + //获取系统时间,每个月1号check一次授权
  456 + struct tm* info;
  457 + int nYear, nMonth, nDay;
  458 + time_t raw;
  459 + time(&raw);
  460 + info = localtime(&raw);
  461 + nYear = info->tm_year + 1900;
  462 + nMonth = info->tm_mon + 1;
  463 + nDay = info->tm_mday;
  464 + if(nDay==1) {
  465 + if(check_label ==0) {
  466 + LOG_INFO("atlas_licence_check start.");
  467 + atlas_licence_check_result check_result;
  468 + memset(&check_result, 0, sizeof(atlas_licence_check_result));
  469 + check_result.code = -1;
  470 +
  471 + int res = atlas_licence_check(skt_handle, check_param, &check_result);
  472 + if(res!=0) {
  473 + LOG_FATAL("sy_licence_check failed.");
  474 + return false;
  475 + }
  476 + if(check_result.code!=0) {
  477 + check_label = -1;
  478 + LOG_FATAL("atlas_licence_check code:{}, msg:{}",check_result.code, check_result.msg);
  479 + return false;
  480 + }
  481 + LOG_INFO("atlas_licence_check end.");
  482 + check_label =1;
  483 + }
  484 + }
  485 + else {
  486 + check_label =0;
  487 + }
  488 + return true;
  489 +}
  490 +
  491 +bool PicAnalysis::CheckTime() {
  492 + struct tm* info;
  493 + int nYear, nMonth, nDay;
  494 + time_t raw;
  495 + time(&raw);
  496 + info = localtime(&raw);
  497 + nYear = info->tm_year + 1900;
  498 + nMonth = info->tm_mon + 1;
  499 + nDay = info->tm_mday;
  500 +
  501 + if (nYear == 2025 && (nMonth <= 11 || (nMonth <= 12 && nDay <= 31))){
  502 + return true;
  503 + } else {
  504 + return false;
  505 + }
429 } 506 }
430 \ No newline at end of file 507 \ No newline at end of file
src/PicAnalysis.h
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 #include "./utils/PathUtils.hpp" 12 #include "./utils/PathUtils.hpp"
13 13
14 #include "village_inc.h" 14 #include "village_inc.h"
  15 +#include "atlas_licence.h"
15 16
16 #include <mutex> 17 #include <mutex>
17 18
@@ -33,7 +34,9 @@ public: @@ -33,7 +34,9 @@ public:
33 private: 34 private:
34 int release(); 35 int release();
35 36
36 - vector<AnalysisResult> va_result2AnalysisResult(va_result* result, int batchsize); 37 + bool CheckTime();
  38 + bool CheckLabel(int devId);
  39 + bool UpdateLabel();
37 40
38 private: 41 private:
39 aclrtContext m_ctx{nullptr}; 42 aclrtContext m_ctx{nullptr};
@@ -52,6 +55,10 @@ private: @@ -52,6 +55,10 @@ private:
52 CropUtil m_crop_util; 55 CropUtil m_crop_util;
53 56
54 std::mutex m_single_mtx; 57 std::mutex m_single_mtx;
  58 +
  59 + void *skt_handle {nullptr};//授权
  60 + atlas_licence_check_param check_param;//授权
  61 + int check_label {-1};//授权 -1=未授权 0=授权 1=授权check日已经check成功(每月一次check)
55 }; 62 };
56 63
57 64
src/ai_engine_module/VehicleAnalysis.cpp
@@ -72,45 +72,24 @@ int VehicleAnalysis::init(VehicleAnalysisParam tParam) { @@ -72,45 +72,24 @@ int VehicleAnalysis::init(VehicleAnalysisParam tParam) {
72 return 0; 72 return 0;
73 } 73 }
74 74
75 -va_result * VehicleAnalysis::detect(vector<sy_img> vec_img) { 75 +vector<AnalysisResult> VehicleAnalysis::detect(vector<sy_img> vec_img) {
76 76
77 int batch_size = vec_img.size(); 77 int batch_size = vec_img.size();
78 78
79 va_result *result=new va_result[batch_size]; 79 va_result *result=new va_result[batch_size];
80 - for(int b=0;b<batch_size;b++)  
81 - {  
82 - result[b].count=0;  
83 - result[b].info=new vehicle_info[100];  
84 - for(int c=0; c<100; c++)  
85 - {  
86 - result[b].info[c].vehicle_pendant_det_res.vpd_res=new v_pendant_d_info[300];  
87 - }  
88 - }  
89 80
90 LOG_INFO("va_batch start"); 81 LOG_INFO("va_batch start");
91 82
92 int ret = va_batch(m_handle, vec_img.data(), batch_size, result); 83 int ret = va_batch(m_handle, vec_img.data(), batch_size, result);
93 84
  85 + auto vec_result = va_result2AnalysisResult(result, batch_size);
  86 +
  87 + delete[] result;
  88 + result = nullptr;
  89 +
94 LOG_INFO("va_batch end:{}", ret); 90 LOG_INFO("va_batch end:{}", ret);
95 91
96 - //delete result  
97 - // for(int b=0;b<batch_size;b++)  
98 - // {  
99 - // for(int c=0; c<100; c++)  
100 - // {  
101 - // if(result[b].info[c].vehicle_pendant_det_res.vpd_res!=NULL)  
102 - // delete[] result[b].info[c].vehicle_pendant_det_res.vpd_res;  
103 - // }  
104 - // if(result[b].info!=NULL){  
105 - // delete[] result[b].info;  
106 - // }  
107 - // }  
108 -  
109 - // if(result!=NULL){  
110 - // delete[] result;  
111 - // }  
112 -  
113 - return result; 92 + return vec_result;
114 } 93 }
115 94
116 void VehicleAnalysis::release(){ 95 void VehicleAnalysis::release(){
@@ -119,22 +98,52 @@ void VehicleAnalysis::release(){ @@ -119,22 +98,52 @@ void VehicleAnalysis::release(){
119 } 98 }
120 } 99 }
121 100
122 -void VehicleAnalysis::release_result(va_result* result, int batch_size){  
123 - for(int b=0;b<batch_size;b++) 101 +vector<AnalysisResult> VehicleAnalysis::va_result2AnalysisResult(va_result* result, int batchsize) {
  102 +
  103 + vector<AnalysisResult> vec_result;
  104 +
  105 + for (int b = 0; b < batchsize; b++)
124 { 106 {
125 - for(int c=0; c<100; c++) 107 + vector<VehicleInfo> vec_info;
  108 + for(int c=0;c<result[b].count;c++)
126 { 109 {
127 - if(result[b].info[c].vehicle_pendant_det_res.vpd_res!=NULL)  
128 - delete[] result[b].info[c].vehicle_pendant_det_res.vpd_res;  
129 -  
130 - }  
131 - if(result[b].info!=NULL){  
132 - delete[] result[b].info; 110 + vehicle_info result_info = result[b].info[c];
  111 +
  112 + VehicleInfo info;
  113 + info.vehicle_detect_res = result_info.vehicle_detect_res ;
  114 + info.vehicle_win_detect_res = result_info.vehicle_win_detect_res ;
  115 + info.vehicle_body_detect_res = result_info.vehicle_body_detect_res ;
  116 + info.vehicle_color_res = result_info.vehicle_color_res ;
  117 + info.vehicle_recg_res = result_info.vehicle_recg_res ;
  118 + info.vehicle_plate_det_recg_res = result_info.vehicle_plate_det_recg_res;
  119 + info.vehicle_illegal_det_res = result_info.vehicle_illegal_det_res ;
  120 + info.vehicle_fea_res = result_info.vehicle_fea_res ;
  121 + info.mta_res = result_info.mta_res ;
  122 + info.manned_res = result_info.manned_res ;
  123 + info.type = result_info.type ;
  124 + info.vpt_type = result_info.vpt_type ;
  125 +
  126 +
  127 + auto pendant_result = result_info.vehicle_pendant_det_res;
  128 + for (size_t j = 0; j < pendant_result.count; j++)
  129 + {
  130 + auto pendant_det_info = pendant_result.vpd_res[j];
  131 +
  132 + pendant_info one_pendant_info;
  133 + one_pendant_info.rect = pendant_det_info.rect;
  134 + one_pendant_info.index = pendant_det_info.index;
  135 + one_pendant_info.confidence = pendant_det_info.confidence;
  136 + one_pendant_info.driver_copilot_info = pendant_det_info.driver_copilot_info;
  137 + info.vehicle_pendant_det_res.push_back(one_pendant_info);
  138 + }
  139 +
  140 + vec_info.push_back(info);
133 } 141 }
134 -  
135 - }  
136 142
137 - if(result!=NULL){  
138 - delete[] result; 143 + AnalysisResult one_result;
  144 + one_result.info = vec_info;
  145 + vec_result.push_back(one_result);
139 } 146 }
140 -} 147 +
  148 + return vec_result;
  149 +}
141 \ No newline at end of file 150 \ No newline at end of file
src/ai_engine_module/VehicleAnalysis.h
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
5 5
6 #include "vehicle_analysis.h" 6 #include "vehicle_analysis.h"
7 7
  8 +#include "../village_inc.h"
  9 +
8 struct DriverInfo { 10 struct DriverInfo {
9 sy_rect driver_rect; 11 sy_rect driver_rect;
10 float driver_prob; 12 float driver_prob;
@@ -46,13 +48,13 @@ public: @@ -46,13 +48,13 @@ public:
46 48
47 int init(VehicleAnalysisParam tParam); 49 int init(VehicleAnalysisParam tParam);
48 50
49 - va_result* detect(vector<sy_img> vec_img);  
50 -  
51 - void release_result(va_result*, int); 51 + vector<AnalysisResult> detect(vector<sy_img> vec_img);
52 52
53 private: 53 private:
54 void release(); 54 void release();
55 55
  56 + vector<AnalysisResult> va_result2AnalysisResult(va_result* result, int batchsize);
  57 +
56 private: 58 private:
57 void* m_handle{nullptr}; 59 void* m_handle{nullptr};
58 60