基于AI+RT-THREAD的人检测入侵检测摄像头(一 AI模型的导入及处理)
RT-AK+RT-THREAD+ART-PI的人检测入侵检测摄像头
简介:该项目基于ART-PI+RT-THREAD平台开发了一套基于人检测AI的网络摄像头,当遥控开启时将自动检测人的特征并判断,若有人则将图片数据自动上传网络并报警。
硬件部分
ART-PI开发版,OV2640摄像头,红外接收头与遥控器软件部分
RT-THREAD操作系统,图像处理,AI模型的C语言应用,红外遥控部分,网络传输部分下面以实现顺序教学此项目的实现(预计分三期)
一、AI部分的实现
在计划这个项目之前还没有了解到RT-AK,只知道CubeMx里的Ai模型转换,也试了一下,核心函数是模型的查找初始化等等,RT-AK进一步将这些函数集成,最后产生几个应用函数,在后面会提到。RT-AK的使用在其他文章里可以找到详细用法,这里就放几张关键步骤图带过一下
导入成功后我们进入项目里看一看,APP里会多出
项目文件会多出
下面介绍通用的应用层代码
AI部分代码逻辑为:
1.给模型分配空间
rt_ai_buffer_t *work_buffer = rt_malloc(RT_AI_你设置的模型名称(默认network)_WORK_BUFFER_BYTES+RT_AI_你设置的模型名称_IN_TOTAL_SIZE_BYTES+RT_AI_你设置的模型名称_OUT_TOTAL_SIZE_BYTES);
2.查找模型
model = rt_ai_find(RT_AI_你设置的模型名称_MODEL_NAME);
3.初始化模型
result = rt_ai_init(model, work_buffer);
4.向模型传入参数(一般是数组,我这里是50*50的数组)
rt_memcpy(model->input[0], &array_out_50X50[0][0], RT_AI_IFPERSON_IN_1_SIZE_BYTES);
5.模型运行
result = rt_ai_run(model, ai_run_complete, &ai_run_complete_flag);
6.得到输出
uint8_t *out = (uint8_t *)rt_ai_output(model, 0);
以下是我自己编写的应用层,即在上面基础的详细代码,希望之后的人可以以此为模板找到方法
#include <rt_ai_ifperson_model.h>
#include <rt_ai.h>
#include <rt_ai_log.h>
#include <math.h>
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"
void ai_run_complete(void *arg){*(int*)arg = 1;
}int ifperson_app(rt_uint8_t array_in_320X240[][320])
{rt_uint8_t array_out_50X50[50][50]={0};/*数据预处理*/Bilinear_interpolation_algorithm(array_in_320X240,array_out_50X50);/*end*/rt_err_t result = RT_EOK;uint8_t answer=0;int ai_run_complete_flag = 0;//定义两个状态量rt_ai_buffer_t *work_buffer = rt_malloc(RT_AI_IFPERSON_WORK_BUFFER_BYTES+RT_AI_IFPERSON_IN_TOTAL_SIZE_BYTES+RT_AI_IFPERSON_OUT_TOTAL_SIZE_BYTES);//if(!work_buffer) {rt_kprintf("malloc err\n");return -1;}//else rt_kprintf("malloc done\n");model = rt_ai_find(RT_AI_IFPERSON_MODEL_NAME);if(model == RT_AI_NULL){return -1;} //找到模型result = rt_ai_init(model, work_buffer);//rt_kprintf("ai_init done\n");//init the model handleif(result != 0){return -1;}//prepare input datart_memcpy(model->input[0], &array_out_50X50[0][0], RT_AI_IFPERSON_IN_1_SIZE_BYTES);//rt_kprintf("memcpy done\n");result = rt_ai_run(model, ai_run_complete, &ai_run_complete_flag);//rt_kprintf("ai_run done\n");//process the inference dataif(ai_run_complete_flag){//get inference datauint8_t *out = (uint8_t *)rt_ai_output(model, 0);answer=out[0];//get argmax rt_kprintf("person prediction: %d\n",answer);if(answer>160) person=1;else person=0;if(person ) {rt_pin_write(FM_PIN, PIN_LOW);web_post_pic(array_in_320X240, 0);}else rt_pin_write(FM_PIN, PIN_HIGH);} rt_free(work_buffer);return 0;
}
//MSH_CMD_EXPORT(ifperson_app, person detection demo);
编写完代码框架之后,你的AI模型不一定能跑起来,这是因为AI模型在这里的量级必须足够小,做到这一点,需要减少激活层,减少输入量,尽可能减少层数,然后转为U8格式输入(量化),U8输出。要想知道这些参数,就需要看转C的report文件
,最后贴一张我的模型参数作为参考(这中间为了减小模型真的可能不断试错)
主要看RAM(total) ,它反映的是运行时会占用的内存,最好不要超过100kb级别。
下一章我们继续讲图像的处理,如何让图像传输和AI模型对接起来,所有代码会在最后一章附上github地址
基于AI+RT-THREAD的人检测入侵检测摄像头(二 图像数据处理)
基于AI+RT-THREAD的人检测入侵检测摄像头(一 AI模型的导入及处理)相关推荐
- 卷积神经网络训练准确率突然下降_基于联邦学习和卷积神经网络的入侵检测方法...
王蓉1,马春光2,武朋2 1. 哈尔滨工程大学计算机科学与技术学院,哈尔滨 150001:2. 山东科技大学计算机科学与工程学院,青岛 266590 doi :10.3969/j.issn.1671- ...
- 研究型论文_基于双层异质集成学习器的入侵检测方法
文章目录 基于双层异质集成学习器的入侵检测方法 论文摘要 论文解决的问题 1.模型体系结构 2.数据降维 3.交叉验证策略 4.分类评估算法 5.多分类器集成算法 6.总结 参考文献 基于双层异质集成 ...
- 基于PP-YOLOE的雾天行人车辆目标检测
1. 项目说明 随着计算机视觉算法的快速发展,目标检测作为视觉感知的基础任务,在诸多场景中得到了广泛应用.常见的公开数据集和方法大多针对能见度良好条件下的目标检测任务而建立.然而现实应用场景却面临诸如 ...
- 基于博弈理论的入侵检测与响应模型综述
基于博弈理论的入侵检测与响应模型综述 作者:中国保密协会科学技术分会 2020-05-07 20:52:01 安全 应用安全 当前网络规模急剧增加,各类入侵过程也逐渐向复杂化,多样化和分布式的趋势发展 ...
- [当人工智能遇上安全] 6.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...
- 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web渗透的第一步工作,涉及网站信息.域名信息.端口信息.敏感信息及指纹 ...
- 基于时间序列特征提取的车载网络系统入侵检测技术
目录 一.介绍 二.车载网络 三.针对的攻击 四.基于递归神经网络的入侵检测技术 五.总结 一.介绍 随着对物联网(IoT)需求的增长,通过网络提供并控制了诸如电力,天然气,水,铁路,飞机,汽车等各种 ...
- 异常检测之浅谈入侵检测
打开微信扫一扫,关注微信公众号[数据与算法联盟] 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Gith ...
- 网络工程师——网络隔离与入侵检测
网络隔离与入侵检测 1.网络隔离 网络隔离技术的目标是确保把有害的攻击隔离,在保证可信网络内部信息不外泄的前提下,完成网络间数据的安全交换. Mark Joseph Edwards 对协议隔离 ...
最新文章
- *用C#创建Windows服务(Windows Services)
- 如何利用office绘制施工进度计划横道图?
- TCP三次握手四次断开(图解)
- CSS强制按比例缩小图片
- phalcon index.php,Phalcon环境搭建与项目开发
- LabVIEW2020下载与安装教程
- 使用Flume将日志导入OSS
- 【数据结构导论】考试笔记总结(一)
- 玩转软件|通过汉化WINRAR,手把手教你如何汉化软件
- vue项目中如何解决跨域问题
- Base64编码简介
- git 团队协作正确操作流程
- WIN10 困扰多时的屏幕亮度 终于可以调节了-完美 -更新2018年2月28日
- 解决群晖 “由于系统可用存储空间不足,您将无法登录“ 的问题
- Excel转PDF如何解决显示不全的问题?
- Linux - 系统文件目录说明
- Ubuntu系统环境
- 《Emotion Cause Detection with Linguistic Construction》
- oracle 启动报错03113,ORACLE启动报错ORA-03113: end-of-file on communication channel
- 山西计算机专业英语,计算机专业英语(必懂)