【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言

本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁+ IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前流行的三款产品,人脸识别门禁系统、IPC 安防和 NVR。在最下面会有视频演示。

本项目适用于瑞芯微 Rockchip 系列的板端,如果本篇文章点赞超过 100,我将整理后开源~

功能

人脸门禁系统

  • 人靠近自动亮屏,人走自动息屏
  • 支持人脸识别
  • 支持录入人脸,并进行人脸配对(极速配对 < 0.2S)

IPC 智能安防监控系统

  • 支持通过 onvif 实时查看摄像头画面
  • 支持实时目标检测(支持高达80种物体检测)
  • 支持录像
  • 支持检测到人时自动录像
  • 支持检测到人时自动报警

用到的硬件

1738765194618.jpg

  • 野火鲁班猫4 RK3588S2
  • IMX415 800W 4k 摄像头
  • RTL8822CE Wifi+BT
  • mipi LCD RGB 7寸 1024×600 触摸屏
  • 人体红外检测 SR501:通过 GPIO 读取相应数值,用于判断是否有人靠近
  • 128×32 OLED屏:通过 I2C 通信显示画面内容,用于显示人脸检测结果
  • 蓝牙音箱

用到的深度学习模型

  • yolo11:用于实时目标检测
  • retinaFace:用于人脸检测
  • facenet:用于人脸特征提取

模型需要经过转换和量化,并且进行精度评估,如果不知道如何在 Rockchip 平台进行模型转换的同学,可以参考我这篇文章:《瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程》

用到的技术栈

  • C++
  • RKNN:用于在 Rockchip 上进行 NPU 推理
  • FFmpeg:用于音视频编解码,使用了 ffmpeg-rockchip 库进行 MPP 硬件编解码,提高编解码速度
  • Opencv:用于视频帧处理
  • LVGL:流行的 GUI 框架
  • Bluez-Alsa:用于连接蓝牙音箱并播放音频
  • Onvif:一个流行的 IP 摄像头协议标准,支持在电脑端直接查看摄像头画面,操作摄像头云台等等

线程架构图

这个项目涉及的线程较多,其中包含推理线程池、渲染线程、处理线程等待,使用了原子操作、锁、条件变量等解决了线程同步问题。

线程架构如下图所示:

image.png

如果不理解线程池概念的同学,可以参考我这篇文章:《C++ 线程池浅析》

项目演示

项目改进

由于是个人项目且时间有限,因此还存在很多可优化空间。

比如在人脸门禁系统中,可以有如下改进:

  • 加入 IR 摄像头,进行活体检测
  • 为人脸门禁系统加入 NFC 模块,支持通过 NFC 解锁
  • 为人脸门禁系统加入指纹模块,支持通过指纹解锁
  • 添加 mysql 数据库,将姓名、年龄、工号、人脸特征进行存储

而在 IPC 安防摄像头系统中,可以有如下改进:

  • 加入舵机云台,完善 onvif,支持远程控制云台转动
  • 对 yolo11 模型进行微调,加入摔倒识别、火焰识别、打架识别等等
  • 加入 IRCUT 滤光片,添加 IR 灯,实现日夜切换功能
  • 加入 webrtc,实现实时对话功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java: framework from BLL、DAL、IDAL、MODEL、Factory using oracle

oracel 21c sql: -- 创建 School 表 CREATE TABLE School (SchoolId CHAR(5) NOT NULL,SchoolName NVARCHAR2(500) NOT NULL,SchoolTelNo VARCHAR2(8) NULL,PRIMARY KEY (SchoolId) );CREATE OR REPLACE PROCEDURE addschool(p_school_id IN CHAR,p_school_name IN NVARCHAR2,p…

解决错误:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决错误&#xff1a;CondaHTTPError: HTTP 000 CONNECTION FAILED for url 查看channels:vim ~/.condarcshow_channel_urls: true channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/…

Apache APISIX 快速入门

文章目录 apisix 快速入门什么是apisix有了 NGINX 和 Kong&#xff0c;为什么还需要 Apache APISIX&#xff1f;软件架构基于 Nginx 开源版本&#xff0c;而 Nginx 并不支持动态配置&#xff0c;为什么 Apache APISIX 声称自己可以实现动态配置&#xff1f; 安装配置 APISIX配置…

2025嵌入式高频面试题解析

一、概述 到了年初&#xff0c;是求职者最活跃的时间。本文梳理了嵌入式高频面试题&#xff0c;帮助求职者更好地准备面试&#xff0c;同时也为技术爱好者提供深入学习嵌入式知识的参考。 二、C 语言基础 2.1 指针与数组 问题 1&#xff1a;指针和数组的区别是什么&#xf…

1.攻防世界 baby_web

题目描述这里有提示&#xff0c;初始页面 进入题目页面如下 很简洁的页面只有一行HELLO WORLD ctrlu查看了源码也没有信息 用burp suite抓包&#xff0c;并发送到重放器 根据提示&#xff08;初始页面&#xff09;修改访问index.php文件 index.php index.php 是一种常见的…

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术&#xff1f;让你的网络飞起来&#xff01; 一. 什么是三层交换技术&#xff1f;二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 大家好…

【机器学习】数据预处理之数据归一化

数据预处理之数据归一化 一、摘要二、数据归一化概念三、数据归一化实现方法3.1 最值归一化方法3.2 均值方差归一化方法 一、摘要 本文主要讲述了数据归一化&#xff08;Feature Scaling&#xff09;的重要性及其方法。首先通过肿瘤大小和发现时间的例子&#xff0c;说明了不同…

【AIGC】语言模型的发展历程:从统计方法到大规模预训练模型的演化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;语言模型的发展历程&#xff1a;从统计方法到大规模预训练模型的演化1 统计语言模型&#xff08;Statistical Language Model, SLM&#xff09;&#xff1a;统…

高效知识管理与分类优化指南:从目录设计到实践应用

摘要 本文旨在帮助读者在信息爆炸时代构建高效的知识管理体系&#xff0c;提供了知识收藏目录、浏览器书签和电脑文件夹的优化分类方案。知识收藏目录方案包括工作与项目、记录与日常、知识管理等八大类&#xff0c;具有边界清晰、扩展灵活、贴合实际场景等优势。浏览器书签分类…

OpenAI 实战进阶教程 - 第十二节 : 多模态任务开发(文本、图像、音频)

适用读者与目标 适用读者&#xff1a;已经熟悉基础的 OpenAI API 调用方式&#xff0c;对文本生成或数据处理有一定经验的计算机从业人员。目标&#xff1a;在本节中&#xff0c;你将学会如何使用 OpenAI 提供的多模态接口&#xff08;图像生成、语音转录等&#xff09;开发更…

Java面试题2025-JVM

JVM 1.为什么需要JVM&#xff0c;不要JVM可以吗&#xff1f; 1.JVM可以帮助我们屏蔽底层的操作系统 一次编译&#xff0c;到处运行 2.JVM可以运行Class文件 2.JDK&#xff0c;JRE以及JVM的关系 3.我们的编译器到底干了什么事&#xff1f; 仅仅是将我们的 .java 文件转换成了…

Deepseek的MLA技术原理介绍

DeepSeek的MLA(Multi-head Latent Attention)技术是一种创新的注意力机制,旨在优化Transformer模型的计算效率和内存使用,同时保持模型性能。以下是MLA技术的详细原理和特点: 1. 核心思想 MLA技术通过低秩联合压缩技术,将多个注意力头的键(Key)和值(Value)映射到一…

QML初识

目录 一、关于QML 二、布局定位和锚点 1.布局定位 2.锚点详解 三、数据绑定 1.基本概念 2.绑定方法 3.数据模型绑定 四、附加属性及信号 1.附加属性 2.信号 一、关于QML QML是Qt框架中的一种声明式编程语言&#xff0c;用于描述用户界面的外观和行为&#xff1b;Qu…

java项目之美妆产品进销存管理系统的设计与开发源码(ssm+mysql)

项目简介 美妆产品进销存管理系统的设计与开发实现了以下功能&#xff1a; 美妆产品进销存管理系统的设计与开发的主要使用者分为管理员登录后修改个人的密码。产品分类管理中&#xff0c;对公司内的所有产品分类进行录入&#xff0c;也可以对产品分类进行修改和删除。产品管…

Python(pymysql包)操作MySQL【增删改查】

下载pymysql&#xff1a; pip install pymysql 在MySQL中创建数据库&#xff1a;unicom create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;use unicom; 在unicom中创建数据表&#xff1a;admin create table admin(id int not null primary key auto_i…

日志2025.2.9

日志2025.2.9 1.增加了敌人挥砍类型 2.增加了敌人的死亡状态 在敌人身上添加Ragdoll&#xff0c;死后激活布偶模式 public class EnemyRagdoll : MonoBehaviour { private Rigidbody[] rigidbodies; private Collider[] colliders; private void Awake() { rigidbodi…

HTTP无状态的概念以及对后端服务的设计会产生的影响

HTTP无状态(Statelessness) 是指每个HTTP请求都是独立的,服务器不会记住或依赖于前一个请求的任何信息。每次请求的处理都与其他请求没有直接关系。也就是说,服务器在处理请求时,不会存储关于客户端状态的信息。 一、HTTP无状态的具体含义 ①每个请求独立:每个请求包含了…

操作系统—进程与线程

补充知识 PSW程序状态字寄存器PC程序计数器&#xff1a;存放下一条指令的地址IR指令寄存器&#xff1a;存放当前正在执行的指令通用寄存器&#xff1a;存放其他一些必要信息 进程 进程&#xff1a;进程是进程实体的运行过程&#xff0c;是系统进行资源分配和调度的一个独立单位…

python:面向对象案例烤鸡翅

自助烤鸡翅的需求&#xff1a; 1.烤鸡翅的时间和对应的状态&#xff1a; 0-4min :生的 4-7min:半生不熟 7-12min&#xff1a;熟了 12min以上&#xff1a;烤糊了 2.添加调料&#xff1a; 客户根据自己的需求添加 定义烤鸡翅的类、属性和方法&#xff0c;显示对象的信息 …

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.上传头像 -持久…