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

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

前言

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

本项目适用于瑞芯微 Rockchip 系列的板端,开源链接在文章最下面。

功能

人脸门禁系统

  • 人靠近自动亮屏,人走自动息屏
  • 支持人脸识别
  • 支持录入人脸,并进行人脸配对(极速配对 < 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,实现实时对话功能

https://github.com/qaz624824554/deep_learning_security_system

Read more

树莓派保姆级教程:如何将 Ubuntu 烧录到 SD 卡

树莓派保姆级教程:如何将 Ubuntu 烧录到 SD 卡

树莓派保姆级教程:如何将 Ubuntu 烧录到 SD 卡 * 前言 * 准备工作 * 烧录镜像 * 第一步:安装并打开烧录工具 * 第二步:格式化SD 卡 * 第三步:烧录并选择操作系统 (Ubuntu) * 首次开机与连接 * 结语 前言 树莓派(Raspberry Pi)不仅仅是一个微型电脑,它是开启 Linux学习、家庭服务器搭建以及机器人开发(ROS)大门的钥匙。虽然官方的 Raspberry Pi OS 很棒,但在很多开发场景下(尤其是服务器搭建或 AI 开发),生态更庞大的 Ubuntu 往往是更好的选择。 今天这篇博客,我将手把手教你如何用最简单、最现代的方法,将 Ubuntu 系统烧录到 SD 卡中,并完成开机前的关键配置(

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 nanoid —— 斩杀臃肿 UUID 的新一代紧凑型唯一标识引擎(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 nanoid —— 斩杀臃肿 UUID 的新一代紧凑型唯一标识引擎(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区 前言 在利用 Flutter for OpenHarmony 开发框架打造如“离线终端消息系统”、“扫码枪物料分发”或“分布式订单中台”时,我们需要确保各端产生的数据凭证绝对不冲突。 传统的解决思路通常是使用原生的 UUID v4。但一个标准 UUID 长达 36 个字符(例如 123e4567-e89b-12d3-a456-426614174000)。在涉及海量本地 SQLite 索引或网络极高频轮询的通信传输环境中,UUID 中过长的无效字符和破折号会对整体性能及存储空间造成不小的负担。 此时,nanoid 以更加安全及优异压缩比的设计架构进入了我们的视野。它使用密码学级别的底层真随机机制,能产生更加短小、不易碰撞并且天然支持 URL-Friendly(URL 友好,无需转义即可拼接到链接中)的极致身份码。 一、原理解析 / 概念介绍 1.1 基础概念 为了防范恶意遍历,nanoid 没有选用低维度的简单时间戳截断或者可预估的线性哈希。系统底层深度使用了

By Ne0inhk
Flutter 三方库 w_module 的鸿蒙化适配指南 - 实现具备高度隔离与契约驱动的模块化架构、支持端侧复杂业务模组的动态注入与生命周期协同实战

Flutter 三方库 w_module 的鸿蒙化适配指南 - 实现具备高度隔离与契约驱动的模块化架构、支持端侧复杂业务模组的动态注入与生命周期协同实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 w_module 的鸿蒙化适配指南 - 实现具备高度隔离与契约驱动的模块化架构、支持端侧复杂业务模组的动态注入与生命周期协同实战 前言 在进行 Flutter for OpenHarmony 的超大型应用(如超级 App)开发时,如何确保不同团队研发的业务模块(Module)之间既能互通有无,又能实现代码级的物理隔离?w_module 是一款专为大规模工程设计的模块化通信与生命周期管理库。它强调通过“契约(API Contract)”进行交互。本文将探讨如何在鸿蒙端构建极致解耦的模块化底座。 一、原直观解析 / 概念介绍 1.1 基础原理 w_module 建立在“模块封装(Encapsulation)”与“分发器(Dispatcher)”机制之上。

By Ne0inhk