【2021集创赛】基于arm Cortex-M3处理器与深度学习加速器的实时人脸口罩检测 SoC
团队介绍
参赛单位:深圳大学
队伍名称:光之巨人队
指导老师:钟世达、袁涛
参赛队员:冯昊港、潘家豪、慕镐泽
图1 团队风采
1. 项目简介
新冠疫情席卷全球,有效佩戴口罩可以极大程度地减小病毒感染的风险。本项目开发了一种如图所示的基于arm Cortex-M3处理器和深度学习加速器的人脸口罩检测SoC,该SoC面向商场、地铁站等流动人口聚集场所,能够实现高性能、高稳定性、低功耗的人脸口罩实时检测。此外,该SoC还具备社交距离检测、蓝牙无线通信等功能,可以在特定应用场景中协助配合人脸口罩检测系统,加强对疫情的阻击防控。

图2 系统通信全景图
2. 系统架构
本项目采用arm公司提供的DesignStart Eval版本的Cortex-M3处理器作为系统的中央处理单元,通过CMSDK工具设计了AHB总线系统,在基于单级AHB总线的框架下,通过APB桥接器和AXI桥接器扩展了APB总线和AXI总线,进而构成该SoC高效的总线框架。通过搭建高效的总线系统将M3处理器与硬件加速器、高速AHB外设以及低速APB外设高效互联,从而完整地实现了一个如图 2 所示的具有人脸检测和人脸口罩佩戴检测功能以及社交距离监测报警功能的 SoC 系统,并且操作者可以通过“功能按键”切换系统的功能模式。
系统的主要功能器件包括arm Cortex-M3处理器、两组硬件加速器、AHB总线矩阵、AXI互联模块、APB桥接器、DDR3存储器、摄像头模块、片上存储模块、HDMI显示模块、APB外设、GUI图形界面、蓝牙通信模块、超声测距模块等。其中,决策树硬件加速器、OV5640、DDR3等关键模块通过AXI桥接器的方式挂载在AHB总线上,实现与Cortex-M3处理器的高速互联,而LED、蓝牙串口模块等外设则挂载在APB总线上,系统总框架如图3所示。

图 3 系统总线框架图
3. 功能介绍
控制功能:本项目中Cortex-M3处理器通过自搭建的总线系统与两组硬件加速器、高速AHB外设以及低速APB外设进行协同通信,M3处理器通过逻辑控制器对摄像头、硬件加速器以及其他外设功能模块进行调用。在对每一帧图像进行检测的过程中,M3处理器首先控制摄像头进行图像采集,采集的每一帧图像将被存储在DDR3中,之后处理器会唤醒‘人脸检测加速器’和‘人脸口罩检测加速器’对存储器中的图像数据进行读取并检测,检测的结果交由处理器进行图像后处理(画框),最后的处理结果将通过显示器显示以及GUI进行实时监测。此外,为了保证SoC的工作效率,我们的设计将一部分控制工作交由APB总线上的逻辑控制器,负责数据流信息和地址信息的分配控制。
人脸口罩检测功能:人脸口罩检测过程中,‘人脸检测加速器’和‘人脸口罩佩戴检测加速器’将会分别从DDR3和片上BRAM存储单元中读取需要检测的图像数据以及权重参数文件中的数据,之后如图4所示,这两组并行的硬件加速器将会同时对读取的图像进行移窗检测。如图5所示,两组加速器的启动过程互不影响,相互独立,均由M3处理器的中断指令控制,最后成功通过所有决策树单元的窗口将被设为感兴趣的对象输出给处理器。

图 4 并行移窗检测

图 5 两组加速器并行检测
检测结果输出功能:如图6所示,经M3处理器以及两组硬件加速器处理后的图像可通过HDMI输出模块输出到显示屏中进行显示。其中,未佩戴口罩的人脸使用‘绿框’进行标识,佩戴了口罩的人脸使用‘红框’进行标识。此外,考虑到无需视频显示的情况,检测结果也可由串口、LED灯、蜂鸣器等外设进行输出。为了实现更便捷的人机交互功能,本项目还设计了专用的图形界面(GUI),如图7所示,该界面使用Python并基于Qt进行设计,用于实时显示系统检测到的人脸数量,未佩戴口罩的人脸数量、系统实时检测平均帧率以及超声波测距模块所测得的距离等信息。

图 6 显示屏输出

图 7 GUI图形界面
社交距离检查功能:疫情期间保持安全的社交距离是避免感染风险的有效手段,针对此场景需求,我们模拟了产品小型化后随身佩戴的场景,并且添加了社交距离检测功能,使产品能够通过“功能按键”实现人脸口罩检测和社交距离检测的自由切换。在使用社交距离检测模式时,当系统检测到有未佩戴口罩的人脸且进入危险的社交距离(距离小于1米)后,系统中的LED和蜂鸣器便会启动进行报警提示,提醒使用者远离该未佩戴口罩的人,同时这些数据也会被同步到GUI中进行实时显示。
蓝牙无线通信功能:为了避免有线数据传输带来的不便,本项目还添加了蓝牙无线通信模块,通过分别与FPGA开发板和PC连接的两个蓝牙模块的主从通信,SoC实时检测到的未佩戴口罩的人脸数目、佩戴了口罩的人脸数目、系统检测平均帧率、检测距离等信息均可通过蓝牙模块传输到PC上,再通过计算机中的GUI进行实时显示,提高了系统部署的灵活性,更适应市场需求。
4. 系统优势
- 人脸口罩佩戴检测无人系统
- 面向社交的近距离检测功能
- 基于DL的并行移窗加速器
- 低延迟高性能系统总线架构
- 低能耗高稳定高效运行能力
- 显示屏蜂鸣器LED三重提醒
- 面向管理者的同步
- 支持蓝牙无线数据传输*
5. 参赛感受和分享
随着物联网和边缘智能的发展,将有越来越多的AI模型部署在边缘设备之上,如何低功耗地执行智能算法已经成为研究和产品开发的热点,通过参加本次arm杯比赛,进一步增加了我们片上系统的设计经验,同时切身体会到设计部署智能算法到边缘系统中的问题,整个项目分为SoC搭建和智能算法模型设计两部分进行,两条路线的协调整合需要团队成员之间不断的沟通配合,在团队协作以及团队老师的指导下,最终我们成功完成了整个系统的设计并取得了全国一等奖的好成绩,本次比赛也会成为日后科研和工作中的宝贵经验。
附作品视频展示
视频展示
作品内容来源于光之巨人队,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~
相关文章:
【2021集创赛】基于arm Cortex-M3处理器与深度学习加速器的实时人脸口罩检测 SoC
团队介绍 参赛单位:深圳大学 队伍名称:光之巨人队 指导老师:钟世达、袁涛 参赛队员:冯昊港、潘家豪、慕镐泽 图1 团队风采 1. 项目简介 新冠疫情席卷全球,有效佩戴口罩可以极大程度地减小病毒感染的风险。本项目开发…...
B码的相关知识点笔记
B码(B-Code)通常是指中国北斗卫星导航系统的坐标编码方式。北斗卫星导航系统使用的坐标系是WGS-84,而B码是针对WGS-84坐标系进行编码的一种方式。 B码的格式通常为18位或24位,其中包含以下信息: 前两位为国家码&…...
java“贪吃蛇”小游戏
基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 我是在javaSwing项目下创建了一个包 名字叫做:Snakes包 包下有一个启动类和一个设置代码的主界面两个类 代码主界面: 代码主界面主要讲解的是 …...
【面试经典150 | 位运算】数字范围按位与
文章目录 Tag题目来源题目解读解题思路方法一:公共前缀方法二:n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…...
推介会如何做好媒体宣传
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式,旨在促进交流活动,形成合作,从而带来共同利益。推介会的本…...
【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机
致谢:ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、地图 nav_msgs/MapMetaData 地图元数据,包括地图的宽度、高度、分辨率等。 nav_msgs/OccupancyGrid 地图栅格数据&#…...
什么是脏读、不可重复读、幻读讲解
数据库隔离级别是数据库管理系统中一个重要的概念,它定义了事务之间的可见性和影响。在多用户并发访问数据库时,隔离级别能够确保事务之间的相互独立性,避免数据不一致的问题。本文将深入探讨三种常见的并发问题:脏读、不可重复读…...
2018年五一杯数学建模C题江苏省本科教育质量综合评价解题全过程文档及程序
2019年五一杯数学建模 C题 江苏省本科教育质量综合评价 原题再现 随着中国的改革开放,国家的综合实力不断增强,中国高等教育发展整体已进入世界中上水平。作为一个教育大省,江苏省的本科教育发展在全国名列前茅,而江苏省13个地级…...
第四代智能井盖传感器:万宾科技助力城市安全
在繁华喧嚣的城市里人来人往,井盖作为基础设施的一个组成部分在路面上分布范围广。然而这些看似普通的井盖却存在着位移、水浸的风险,可能给我们的生活带来诸多不便,更会威胁到我们的人身安全。如何有效监测和管理井盖的状态,成为…...
[Jenkins] Docker 安装Jenkins及迁移流程
系统要求 最低推荐配置: 256MB可用内存1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB) 为小团队推荐的硬件配置: 1GB可用内存50 GB 可用磁盘空间 软件配置: Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDKÿ…...
第七篇 基于JSP 技术的网上购书系统——新品上架、推荐产品、在线留言、搜索功能实现(网上商城、仿淘宝、当当、亚马逊)
目录 1.新品上架 1.1功能说明 1.2界面设计 1.3处理流程 1.4数据来源和算法 1.4.1数据来源 1.4.2查询条件 1.4.3表间关系 1.4.4相关sql实例 2.推荐产品 2.1功能说明 2.2界面设计 2.3处理流程 2.4数据来源和算法 2.4.1数据来源 2.4.2查询条件 2.4.3表间关…...
IntelliJ IDE 插件开发 |(一)快速入门
前言 IntelliJ IDEA 作为 Java 开发的首选 IDE,其强大、方便之处不必多说。不过,由于个人或者团队的个性化需求,我们或多或少会想对其功能进行拓展,这时就需要开发插件(在 IntelliJ 平台下的所有 IDE 均可运行&#x…...
【Ubuntu】Windows远程Ubuntu系统
步骤 开启ssh服务并开放22端口关闭防火墙ufw或iptables ;或者将远程端口添加到入站与出站规则安装xrdp并将xrdp用户添加到ssl-cert用户组mstsc 远程,输入账号密码 1、开启ssh服务 1.1. 查看ssh是否已经开启 sudo ps -e | grep ssh如果最后返回是sshd…...
pipeline jenkins流水线
Pipeline 是 Jenkins 中一种灵活且强大的工作流机制,它允许您以代码的形式来定义和管理持续集成和持续交付的流程。 Pipeline 的作用主要体现在以下几个方面: 可编排的构建流程:使用 Pipeline,您可以将一个或多个阶段(…...
软件工程理论与实践 (吕云翔) 第六章 面向对象分析课后习题及其解析
第六章 面向对象分析 知识点: 一个典型的软件系统通常包括的内容为:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。 3种模型之间的关…...
langchain(1):使用LangChain 调用 openai 的 text/chat model
文章目录 重要参考OPENAI API调用 Text 模型调用 Chat 模型消息角色 Chat 模型 vs Text 模型 通过 LangChain 调用 Text 和 Chat 模型调用 text 模型调用 chat 模型 重要参考 langchain 中文网 langchain api openai api 文档 huggingface LangChain 是一个全方位的、基于大…...
rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例
扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机(logs),控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…...
VSCode打开Json 文件格式化
在VSCode中打开JSON文件时,你可以使用以下步骤来格式化JSON并显示为多行: 使用快捷键: 在打开的JSON文件中,使用快捷键格式化文档。 Windows/Linux:Shift Alt FmacOS:Shift Option F 右键菜单ÿ…...
【C++】:STL——标准模板库介绍 || string类
📚1.什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 📚2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…...
Python小白之PyCharm仍然显示“No module named ‘xlwings‘”
Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行,输入python出现>>>的提示格,输入import xlwings 回车,正常报错:No module named xlwings。输入python 回车后,再输入im…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

