当前位置:网站首页>【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI
【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI
2022-08-09 23:39:00 【Mdc_stdio】
0 前言
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
基于Stm32的家庭智能监控系统
学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:4分
- 创新点:4分
🧿 选题指导, 项目分享:
1 简介
结合低功耗AI芯片以及移动网络,将人员/物体检测模型部署到设备端,达到较低功耗、实时响应、节省流量的效果。
2 主要器件
- 主控芯片使用勘智K210
- 摄像头 OV7740
- 数据传输使用 4G模块 EC20 或者 2G模块 SIM800C;
3 实现效果
4 设计原理
主模块原理图
设备端运行 FreeRTOS + LWIP
LWIP协议栈支持的主要功能如下所示,本文将具体介绍各个协议的具体功能。
部分移植过程
修改修改cc.h文件
修改sys_arch.c文件
通过PPPOS驱动4G模块
LTE Standard EC20 R2.1是移远通信推出的 LTE Cat 4 无线通信模块,采用 LTE 3GPP Rel.11 技术,支持最大下行速率 150Mbps 和最大上行速率 50Mbps,使用LCC封装。
系统启动后会加载 yolov2-tiny 模型
yolov2网络结构图
YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。
#部分代码
def test_net(net, imdb, max_per_image=300, thresh=0.5, vis=False):
num_images = imdb.num_images
# all detections are collected into:
# all_boxes[cls][image] = N x 5 array of detections in
# (x1, y1, x2, y2, score)
all_boxes = [[[] for _ in range(num_images)]
for _ in range(imdb.num_classes)]
# timers
_t = {
'im_detect': Timer(), 'misc': Timer()}
det_file = os.path.join(output_dir, 'detections.pkl')
size_index = args.image_size_index
for i in range(num_images):
batch = imdb.next_batch(size_index=size_index)
ori_im = batch['origin_im'][0]
im_data = net_utils.np_to_variable(batch['images'], is_cuda=True,
volatile=True).permute(0, 3, 1, 2)
_t['im_detect'].tic()
bbox_pred, iou_pred, prob_pred = net(im_data)
# to numpy
bbox_pred = bbox_pred.data.cpu().numpy()
iou_pred = iou_pred.data.cpu().numpy()
prob_pred = prob_pred.data.cpu().numpy()
并且通过 MQTT 协议接入后端服务器; 摄像头线程读取图像信息,处理后发送到K210内置的卷积神经网络加速器,得出 yolov2-tiny 的预测结果,如果存在超过预定分类阈值的结果,则通过 MQTT 协议发送到后端。
后端Thingsboard
后端服务器基于 Thingsboard 进行开发,实现图像信息展示以及设备固件OTA功能。
ThingsBoard 是一个基于Java的开源的物联网平台,用于数据收集、处理、可视化和设备管理。它使用物联网行业的标准协议(MQTT、CoAP和HTTP)实现设备连接,并支持云和本地部署。 ThingsBoard 具有可扩展性、容错性和高性能,因此永远不会丢失数据。
Thingsboard 基本特点
- 提供设备、资产和客户,并定义它们之间的关系。
- 警报管理:分析传入的遥测数据并通过复杂的事件处理触发警报。
- 设备管理:使用远程过程调用(RPC)控制设备。根据设备生命周期事件,REST API 事件,RPC 请- 求等构建工作流
- 可扩展性:可水平扩展的平台,使用领先的开源技术进行构建。
- 数据可视化: 从设备和资产收集并可视化数据。提供了现成的30个可配置小部件,并能够使用内置编辑器创建自己的小部件。内置线图,数字和模拟仪表,地图等等。
- 容错:没有单点故障,集群中的每个节点都是相同的。没有主人工人或热备用人员。自动检测到节点故障。可以在不停机的情况下更换故障节点。使用可靠的 NoSQL 数据库复制持久数据。
- 强大而高效:单个服务器节点可以处理成千上万个设备,具体取决于用例。ThingsBoard 集群可以处理数百万个设备。
- 可自定义的:通过可自定义的小部件和规则引擎节点,轻松添加新功能。使用可自定义的规则链,窗口小部件和传输实现来扩展默认平台功能。除了MQTT,CoAP和HTTP支持之外,ThingsBoard用户还可以使用自己的传输实现或自定义现有协议的行为。
- 持久:永远不会丢失您的数据。
- 遥测数据收集功能: 设计动态且响应迅速的仪表板,并向您的客户提供设备或资产遥测和见解。可以可靠地收集和存储遥测数据,以应对网络和硬件故障。使用可自定义的Web仪表板或服务器端API访问收集的数据。
部分相关代码
public class MqttTransportService {
.....
@Autowired
private MqttTransportContext context;
@PostConstruct
public void init() throws Exception {
log.info("Setting resource leak detector level to {}", );
ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.valueOf(leakDetectorLevel.toUpperCase()));
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new MqttTransportServerInitializer(context))
.childOption(ChannelOption.SO_KEEPALIVE, keepAlive);
}
.....
}
private void processDevicePublish(ChannelHandlerContext ctx, MqttPublishMessage mqttMsg, String topicName, int msgId) {
try {
if (topicName.equals(MqttTopics.DEVICE_TELEMETRY_TOPIC)) {
TransportProtos.PostTelemetryMsg postTelemetryMsg = adaptor.convertToPostTelemetry(deviceSessionCtx, mqttMsg);
transportService.process(sessionInfo, postTelemetryMsg, getPubAckCallback(ctx, msgId, postTelemetryMsg));
} else if (topicName.equals(MqttTopics.DEVICE_ATTRIBUTES_TOPIC)) {
TransportProtos.PostAttributeMsg postAttributeMsg = adaptor.convertToPostAttributes(deviceSessionCtx, mqttMsg);
transportService.process(sessionInfo, postAttributeMsg, getPubAckCallback(ctx, msgId, postAttributeMsg));
}
...
} else {
transportService.reportActivity(sessionInfo);
}
} catch (AdaptorException e) {
log.warn("[{}] Failed to process publish msg [{}][{}]", sessionId, topicName, msgId, e);
log.info("[{}] Closing current session due to invalid publish msg [{}][{}]", sessionId, topicName, msgId);
ctx.close();
}
}
🧿 选题指导, 项目分享:
5 最后
边栏推荐
- 二进制、八进制、十进制、十六进制之间的转换
- RebatMq消息中间件(一) 各个中间件介绍
- Golden Warehouse Database KingbaseGIS User Manual (6.5. Geometry Object Editing Function)
- EL表达式
- 7. type( )函数——查询数据类型
- Description of AirFlow
- 共创 Ray 中文社区,Ray Forward Meetup 2022 直播邀你参加!
- 3.9 - 正规表达式和正规集 3.10 - 有限自动机
- Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
- 收银管理软件如何做好员工管理?
猜你喜欢
CST Studio Suite 2021软件安装包和安装教程
上交所实时行情文件汇总
MATLB|和她跌宕起伏最终到达人生之峰【浪漫旅途】
[C language] In-depth understanding of pointers and arrays (issue 4)
openEuler 知:abi 检测
算法---整数替换(Kotlin)
Web性能测试模型小结
3.11-程序基本的控制语句 3.12-表达式 3.13-数据类型 3.14-常量/变量 3.15-标识符
LSTM-based distributed energy generation prediction (Matlab code implementation)
[C language] Address book "Static Memory Version"
随机推荐
Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
hql语言
Creo5.0 introductory tutorial free material
今日睡眠质量记录61分
Linux安装Oracle和postgrepSQL数据库
数据库的备份与恢复「建议收藏」
为什么不建议你在 Docker 中跑 Mysql ?
工程 (七) ——PolarSeg点云语义分割
C language learning journey [operator (incomplete version)]
Redis redisTemplate.execute 执行锁
LSTM-based distributed energy generation prediction (Matlab code implementation)
dlopen failed: library "libtaml.so" not found
博弈小游戏
YOLOV5学习笔记(七)——训练自己数据集
EL表达式
基于ABP的AppUser对象扩展
深入理解Aarch64内存管理
Alibaba Cloud SMS Service Activation
【云原生】Kubernetes编排工具精讲
数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口