根据RK3576开发板的安全帽检测算法
1. 安全帽检测简介。
安全帽佩带检测是工地、出产安全、安防的重中之重,但人为片面检测的方法时效性差且不能全程监控。AI技能。的日渐老练催生了安全帽佩带检测计划,成为了监督佩带安全帽的利器。本安全帽检测。算法。是一种根据。深度学习。的对人进行检测定位的方针检测,能有效用于产品落地。
本安全帽检测算法在数据集体现如下所示:
安全帽检测算法。 | mAP0.5。 |
HELMET。 | 0.93。 |
根据EASY-E。AI。-Orin-nano硬件主板的运转功率:
算法品种。 | 运转功率。 |
helmet_detect。 | 57ms。 |
2. 快速上手。
假如您。初度阅览此文档。,请阅览:《入门攻略/源码办理及。编程。介绍/源码工程办理》,按需办理自己工程源码(注:此文档必看,并主张选用。【长途挂载办理】。方法,不然有代码丢掉危险!!!)。
2.1 开源码工程下载。
先在PC虚拟机定位到nfs服务目录,再在目录中创立寄存源码库房的办理目录:
cd ~/nfsrootmkdir GitHubcd GitHub。
再经过git东西,在办理目录内克隆长途库房(需求设备能对外网进行拜访)。
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git。
注:
* 此处可能会因网络原因形成卡顿,请耐性等候。
* 假如真实要在gitHub网页上下载,也要把整个库房下载下来,不能独自下载本实例对应的目录。
2.2 开发环境建立。
经过。ad。b shell进入板卡开发环境,如下图所示。
经过以下指令,把nfs目录挂载上nfs服务器。
mount -t nfs -o nolock。 < nfs server ip >:。< nfs path in server >/home/orin-nano/Desktop/nfs/。
2.3 例程编译。
然后定位到板卡的nfs的挂载目录(依照实践挂载目录),进入到对应的例程目录履行编译操作,详细指令如下所示:
cd EASY-EAI-Toolkit-3576/Demos/algorithm-helmet/./build.sh。
2.4 模型布置。
要完结算法Demo的履行,需求先下载安全帽检测算法模型。
百度网盘链接为:https://pan.baidu.com/s/1VQGznN3Htq_F_bUn3KAWYQ?pwd=1234 (提取码:1234 )。
一起需求把下载的安全帽检测算法模型复制粘贴到Release/目录:
2.5 例程运转及作用。
进入开发板Release目录,履行下方指令,运转示例程序:
cd Release/./。te。st-helmet_detect helmet_detect.model test.jpg。
运转例程指令如下所示:
成果图片如下所示:
A。PI。的详细阐明,以及API的调用(本例程源码),详细信息见下方阐明。
3. 安全帽检测API阐明。
3.1 引证方法。
为便利客户在本地工程中直接调用咱们的EASY EAI api库,此处列出工程中需求链接的库以及头文件等,便利用户直接增加。
选项。 | 描绘。 |
头文件目录。 | easyeai-api/algorithm/helmet_detect。 |
库文件目录。 | easyeai-api/algorithm/helmet_detect。 |
库链接参数。 | -lhelmet_detect。 |
3.2 安全帽检测初始化函数。
安全帽检测初始化函数原型如下所示。
int helmet_detect_init(rknn_context *ctx, const char * path)。
详细介绍如下所示。
函数名: helmet_detect_init()。 | |
头文件。 | helmet_detect.h。 |
输入参数。 | ctx:rknn_context句柄。 |
输入参数。 | path:算法模型的途径。 |
回来值。 | 成功回来:0。 |
失利回来:-1。 | |
注意事项。 | 无。 |
3.3 安全帽检测运转函数。
安全帽检测运转函数helmet_detect_run原型如下所示。
int helmet_detect_run(rknn_context ctx, cv::Mat input_image, detect_result_group_t *detect_result_group)。
详细介绍如下所示。
函数名:helmet_detect_run()。 | |
头文件。 | helmet_detect.h。 |
输入参数。 | ctx: rknn_context句柄。 |
输入参数。 | input_image:图画数据输入(cv::Mat是Opencv的类型)。 |
输出参数。 | output_dets:方针检测框输出。 |
回来值。 | 成功回来:0。 |
失利回来:-1。 | |
注意事项。 | 无。 |
3.4 安全帽检测开释函数。
安全帽检测开释函数原型如下所示。
int helmet_detect_release(rknn_context ctx)。
详细介绍如下所示。
函数名:helmet_detect_release ()。 | |
头文件。 | helmet_detect.h。 |
输入参数。 | ctx: rknn_context句柄。 |
回来值。 | 成功回来:0。 |
失利回来:-1。 | |
注意事项。 | 无。 |
4. 安全帽检测算法例程。
例程目录为Demos/algorithm-helmet/test-helmet_detect.cpp,操作流程如下。
参阅例程如下所示。
#include。 < opencv2/opencv.hpp >#include。 < stdio.h >#include。 < sys/time.h >#include"helmet_detect.h"using namesp。ac。e cv;using namespace std;static Scalar co。lorA。rray[10]={ Scalar(255, 0, 0, 255), Scalar(0, 255, 0, 255), Scalar(0,0,139,255), Scalar(0,100,0,255), Scalar(139,139,0,255), Scalar(209,206,0,255), Scalar(0,127,255,255), Scalar(139,61,72,255), Scalar(0,255,0,255), Scalar(255,0,0,255),};int plot_one_box(Mat src, int x1, int x2, int y1, int y2, char *label, char colour){ int tl = round(0.002 * (src.rows + src.cols) / 2) + 1; rectangle(src, cv::Point(x1, y1), cv::Point(x2, y2), colorArray[(unsigned char)colour], 3); int。 tf。= max(tl -1, 1); int base_line = 0; cv::Size t_size = getTextSize(label, FONT_HE。RS。HEY_。SIM。PLEX, (float)tl/3, tf, &base_line); int x3 = x1 + t_size.width; int y3 = y1 - t_size.height - 3; rectangle(src, cv::Point(x1, y1), cv::Point(x3, y3), colorArray[(unsigned char)colour], -1); putText(src, label, cv::Point(x1, y1 - 2), FONT_HERSHEY_SIMPLEX, (float)tl/3, cv::Scalar(255, 255, 255, 255), tf, 8); return 0;}int main(int argc, char **argv){ if (argc != 3) { printf("%s。 < model_path >< image_path >n", argv[0]); return -1; } const char *model_path = argv[1]; const char *image_path = argv[2]; /* 参数初始化 */ detect_result_group_t detect_result_group; /* 算法模型初始化 */ rknn_context ctx; helmet_detect_init(&ctx, model_path); /* 算法运转 */ cv::Mat src; src = cv::imread(image_path, 1); struct。 ti。meval start; struct timeval end; float time_use=0; gettimeofday(&start,NULL); helmet_detect_run(ctx, src, &detect_result_group); gettimeofday(&end,NULL); time_use=(end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec);//微秒 printf("time_use is %fn",time_use/1000); /* 算法成果在图画中画出并保存 */ // Draw Objects char text[256]; for (int i = 0; i。 < detect_result_group.count; i++) { detect_result_t* det_result = &(detect_result_group.results[i]); if( det_result- >prop。 < 0.4) { continue; } sprintf(text, "%s %.1f%%", det_result- >name, det_result->prop * 100); printf("%s (%d %d %d %d) %fn", det_result->name, det_result->box.left, det_result->box.top, det_result->box.right, det_result->box.bottom, det_result->prop); int x1 = det_result->box.left; int y1 = det_result->box.top; int x2 = det_result->box.right; int y2 = det_result->box.bottom; /* rectangle(src, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(255, 0, 0, 255), 3); putText(src, text, cv::Point(x1, y1 + 12), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0)); */ plot_one_box(src, x1, x2, y1, y2, text, i%10); } cv::imwrite("result.jpg", src); /* 算法模型空间开释 */ helmet_detect_release(ctx); return 0;}。
审阅修改 黄宇。
内容来源:https://hoangkimngan.com/app-1/mobat mb,http://chatbotjud.saude.mg.gov.br/app-1/criar-jogos
(责任编辑:人文)