瑞芯微RV1126B开发板(EASY-EAI-PI2) 人员检测方案
1.方案简介本方案将演示如何把两路MIPI-CSI摄像头接入到【人员检测算法】进行分析并且把算法分析结果展示到屏幕上。1.1 接线示意图摄像头与板卡连接* 接线必须在断电时进行操作。* 采用反向线连接IMX415摄像头与Cmaera1接口。注意用错线会烧坏摄像头或者核心板因此在接线时务必要小心。* 接线端子卡扣与FPC线的蓝色塑料标识必须位于同一侧。如下图所示。EASY EAI PI2默认搭配IMX415单目摄像头。同时配有一根0.5mm间距的40pin FPC反向线。反向线两端的蓝色标识不在同一侧面。同向线两端的蓝色标识处于同一侧面。2. 快速上手2.1 开发环境准备如果您初次阅读此文档请阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》并按照其相关的操作进行编译环境的部署。在PC端Ubuntu系统中执行run脚本进入EASY-EAI编译环境具体如下所示。cd ~/develop_environment ./run.sh 22042.2 源码下载以及例程编译在EASY-EAI编译环境下创建存放源码仓库的管理目录cd /opt mkdir EASY-EAI-Toolkit cd EASY-EAI-Toolkit通过git工具在管理目录内克隆远程仓库git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-1126B.git注* 此处可能会因网络原因造成卡顿请耐心等待。* 如果实在要在gitHub网页上下载也要把整个仓库下载下来不能单独下载本实例对应的目录。进入到对应的例程目录执行编译操作具体命令如下所示cd EASY-EAI-Toolkit-1126B/Solutions/detect-Person ./build.sh注* 由于依赖库部署在板卡上因此交叉编译过程中必须保持/mnt挂载。2.3 模型部署要想开发实例能够顺利执行还需要先下载人员检测算法模型。百度网盘链接为https://pan.baidu.com/s/1Elmet68gYsIYY5DClF3xnw?pwd1234提取码: 1234同时需要把下载的人脸检测算法模型复制粘贴到Release/目录再执行一次编译这次要带上cpres代表把资源文件也拷过去板卡./build.sh cpres2.4 例程运行通过串口调试或ssh调试进入板卡后台定位到例程部署的位置如下所示cd /userdata/Solu/detect-Person运行例程命令如下所示。./detect-Person 23屏幕显示效果如下3. 代码解析方案主逻辑代码位于EASY-EAI-Toolkit-1126B/Solution/detect-Person/src/main.cpp。代码实现主要通过调用我司的easyeai-api库快速实现人员检测功能代码主体分为主线程和算法3.1 组件库组成要实现人员检测功能需要使用到easyeai-api库的以下组件如下所示。模组信息如下所示。3.2 逻辑框图项目的整体逻辑框图如下所示。3.3 主线程主线程处理的业务有l 初始化外设l 创建算法分析子线程l 抓图发送给到子线程l 抓图、显示本处附上主要的逻辑功能代码其他辅助的、校验型的代码先忽略。初始化显示屏如下所示。// 1.初始化显示屏 int width, height; if (disp_init(width, height) 0) { fprintf(stderr, DRM初始化失败\n); return -1; }组件初始化操作如下本处调用mipi摄像头。// 2.打开摄像头 #define CAMERA_WIDTH 1920 #define CAMERA_HEIGHT 1080 #define IMGRATIO 3 #define IMAGE_SIZE (CAMERA_WIDTH*CAMERA_HEIGHT*IMGRATIO) int cameraIndex atoi(argv[1]); ret mipicamera_init(cameraIndex, CAMERA_WIDTH, CAMERA_HEIGHT, 0); if (ret) { printf(error: %s, %d\n, __func__, __LINE__); goto exit3; } pbuf (char *)malloc(IMAGE_SIZE); if (!pbuf) { printf(error: %s, %d\n, __func__, __LINE__); ret -1; goto exit2; }创建线程互斥锁以及线程如下所示。// 3.创建识别线程以及图像互斥锁 pthread_mutex_init(img_lock, NULL); pResult (Result_t *)malloc(sizeof(Result_t)); memset(pResult, 0, sizeof(Result_t)); if(0 ! CreateNormalThread(detect_thread_entry, pResult, mTid)){ free(pResult); }抓取图像调用clone操作。// 4.1、取流 pthread_mutex_lock(img_lock); ret mipicamera_getframe(cameraIndex, pbuf); if(ret) { printf(error: %s, %d\n, __func__, __LINE__); pthread_mutex_unlock(img_lock); continue; } algorithm_image Mat(CAMERA_HEIGHT, CAMERA_WIDTH, CV_8UC3, pbuf); image algorithm_image.clone(); pthread_mutex_unlock(img_lock);调用显示图像将分析的目标位置通过Result标记出来。// 4.2、显示 char text[256]; for (int i 0; i Result.algoRes[0].resNumber; i) { detect_result_t *det_result (Result.algoRes[0].detect_Group.results[i]); if( det_result-prop 0.4) { continue; } // 标出识别目标框 sprintf(text, %s %.1f%%, det_result-name, det_result-prop * 100); printf(%s (%d %d %d %d) %f\n, det_result-name, det_result-box.left, det_result-box.top, det_result-box.right, det_result-box.bottom, det_result-prop); int x1 det_result-box.left; int y1 det_result-box.top; int x2 det_result-box.right; int y2 det_result-box.bottom; // 标出识别目标定位标记 /* rectangle(image, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(255, 0, 0, 255), 3); putText(image, text, cv::Point(x1, y1 12), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0)); */ plot_one_box(image, x1, x2, y1, y2, text, i%10); } disp_commit(image.data, CAMERA_WIDTH, CAMERA_HEIGHT, HAL_TRANSFORM_ROT_270);3.4 算法分析子线程算法分析子线程主要完成以下操作l 延时监测是否图像缓冲区是否为空l 不为空时证明主函数已发送图像数据过来线程执行图像获取操作l 调用人员分析函数l 记录目标框的数据用于后续图像合成操作延时监测是否有图像操作如下所示。if(algorithm_image.empty()) { usleep(5); continue; }获取图像操作如下所示。pthread_mutex_lock(img_lock); image algorithm_image.clone(); pthread_mutex_unlock(img_lock);调用人员检测函数算法得到的目标结果记录于pResult的algoRes[0]成员内如下所示。// 算法分析 ret person_detect_run(ctx, image, pResult-algoRes[0].detect_Group);4. 开发指南4.1 Toolkit仓库介绍4.2 示例文件目录结构4.2.1 开发实例介绍每个开发实例就是一个独立的项目项目使用cmake构建自动编译部署。一个最简单的项目至少要包含以下元素build.sh、CMakeLists.txt、main.c如下所示。具体介绍如下所示。4.2.2 可拓展的目录可拓展的目录是指开发过程中增加某些功能模块功能代码。增加模式分为两种l 增加已编译的第三方库在include、libs目录内添加头文件和库文件l 增加用户自定义的功能模块推荐在src目录内增加具体情况如下所示第三方模块相关的文件由include/3rd_model/xxx.h、libs/3rd_model/xxx.a。自定义的功能模块为src/mySrcCode、src/mySrcCode2。4.3 CMakeLists.txt文件解析4.3.1 编译环境配置部分第一部分为配置部分配置部分如下所示。获取当前方案目录、配置工具链、提取方案名称配置信息如下所示。4.3.2 easyeai-api配置部分第二部分是引入我司的功能组件库针对当前方案进行配置EASY EAI API头文件目录${XXX_INCLUDE_DIRS}、源码文件目录${XXX_SOURCE_DIRS}以及所依赖的库参数${XXX_LIBS}配置信息如下所示。4.3.3 第三方库配置部分第三部分配置第三方的库针对当前方案进行配置第三方头文件目录、库文件目录、配置第三方库链接参数以及配置源码目录配置信息如下所示。例如添加个人库的目录组成方式如下所示。aux_source_directory的修改方式为aux_source_directory(./src ./src/mySrcCode ./src/mySrcCode2 dir_srcs)或aux_source_directory(./src dir_srcs) aux_source_directory(./src/mySrcCode dir_srcs) aux_source_directory(./src/mySrcCode2 dir_srcs)4.3.4 本方案配置部分第四部分配置项目的编译信息内容如下所示配置项如下所示。4.4 build.sh编译脚本4.4.1 路径定位部分第一部分用于提取目录用于编译操作内容如下所示进入build.sh脚本所在目录并且提取当前目录绝对路径提取当前目录名称4.4.2 清除编译部分第二部分清除操作清除目录为build、Release内容如下所示执行build.sh脚本时带入了参数“clear”则清空编译输出4.4.3 编译操作第三部分编译直接调用cmake内容如下所示重新编译成部署目录并把资源自动部署进板卡

相关新闻

fakeLoader.js核心功能解析:深入理解7种加载动画的实现原理

fakeLoader.js核心功能解析:深入理解7种加载动画的实现原理

fakeLoader.js核心功能解析:深入理解7种加载动画的实现原理 【免费下载链接】fakeLoader.js fakeLoader.js is a lightweight jQuery plugin that helps you create an animated spinner with a fullscreen loading mask to simulate the page preloading effect. …

2026/7/20 20:44:36阅读更多 →
NLCISBNPlugin开发者指南:从源码解析到功能扩展的完整路径

NLCISBNPlugin开发者指南:从源码解析到功能扩展的完整路径

NLCISBNPlugin开发者指南:从源码解析到功能扩展的完整路径 【免费下载链接】NLCISBNPlugin 基于中国国家图书馆ISBN检索的calibre的source/metadata插件。https://doiiars.com/article/NLCISBNPlugin 项目地址: https://gitcode.com/gh_mirrors/nl/NLCISBNPlugin …

2026/7/20 20:44:36阅读更多 →
Incident-Response-Powershell浏览器取证:Chrome、Edge和Firefox历史记录收集

Incident-Response-Powershell浏览器取证:Chrome、Edge和Firefox历史记录收集

Incident-Response-Powershell浏览器取证:Chrome、Edge和Firefox历史记录收集 【免费下载链接】Incident-Response-Powershell PowerShell Digital Forensics & Incident Response Scripts. 项目地址: https://gitcode.com/gh_mirrors/in/Incident-Response-P…

2026/7/20 20:44:36阅读更多 →
星盾隐私安全新体系:SecurityKit 统一加密构建全链路数据防护

星盾隐私安全新体系:SecurityKit 统一加密构建全链路数据防护

适配鸿蒙7 API25,基于星盾StarShield六层纵深安全架构,全新统一kit.SecurityKit整合原HUKS、cryptoFramework、设备安全、分级管控、机密风控能力,打通存储-传输-跨设备协同-文件-Agent后台全链路加密防护,解决政企、医疗、工业终…

2026/7/21 11:26:09阅读更多 →
Play Integrity Fork 完整指南:修复Android设备完整性验证的终极解决方案

Play Integrity Fork 完整指南:修复Android设备完整性验证的终极解决方案

Play Integrity Fork 完整指南:修复Android设备完整性验证的终极解决方案 【免费下载链接】PlayIntegrityFork Fix Play Integrity 项目地址: https://gitcode.com/gh_mirrors/pl/PlayIntegrityFork 你是否因为设备root或系统修改而无法使用Google Play商店&#x…

2026/7/21 11:26:09阅读更多 →
RealChar技术深度解析:构建实时多语言AI对话系统的架构设计

RealChar技术深度解析:构建实时多语言AI对话系统的架构设计

RealChar技术深度解析:构建实时多语言AI对话系统的架构设计 【免费下载链接】RealChar 🎙️🤖Create, Customize and Talk to your AI Character/Companion in Realtime (All in One Codebase!). Have a natural seamless conversation with …

2026/7/21 11:26:09阅读更多 →
30亿激活参数如何重构企业AI成本结构?ERNIE-4.5-21B-A3B的技术破局

30亿激活参数如何重构企业AI成本结构?ERNIE-4.5-21B-A3B的技术破局

30亿激活参数如何重构企业AI成本结构?ERNIE-4.5-21B-A3B的技术破局 【免费下载链接】ERNIE-4.5-21B-A3B-Base-Paddle 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-21B-A3B-Base-Paddle 当企业AI部署成本成为规模化应用的最大障碍&#xf…

2026/7/21 11:26:09阅读更多 →
终极Wand-Enhancer指南:3步免费解锁WeMod专业版完整功能

终极Wand-Enhancer指南:3步免费解锁WeMod专业版完整功能

终极Wand-Enhancer指南:3步免费解锁WeMod专业版完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否厌倦了Wand(…

2026/7/21 11:26:09阅读更多 →
让LLM真正读懂CSV:多表结构化数据问答工作流

让LLM真正读懂CSV:多表结构化数据问答工作流

1. 项目概述:这不是一个“通用聊天机器人”,而是一套可复用的“结构化数据问答工作流” 你有没有遇到过这样的场景:销售团队每天要查十几份客户反馈CSV,HR要翻五六个员工档案表核对信息,运营同事得在三张不同维度的活动…

2026/7/21 11:24:08阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →