0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【EASY EAI Nano开源套件试用体验】4AI功能测试之人脸检测

开发板试用精选 ? 来源:开发板试用 ? 作者:电子发烧友论坛 ? 2022-10-11 16:40 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:码农爱学习, 帖子地址:https://bbs.elecfans.com/jishu_2307951_1_1.html


EASY EAI Nano AI人脸检测测试(附上体验视频,详细见原作者帖子)

本篇介绍EASY EAI Nano的AI人脸检测功能,先看下测试效果:

1.jpg

本篇参考官方文档:https://www.easy-eai.com/document_details/3/109

1 代码下载

下载官方测试代码:https://github.com/EASY-EAI/EASY-EAI-Toolkit-C-Solution.git,本篇来修改face_detect中的代码并测试。

下载AI算法模型face_detect.model,百度网盘:https://pan.baidu.com/s/1mrhVHxHWJ8cY9Fl9k5KtYg#list/path=%2F提取码:0k7j

总的资料百度网盘了也有算法模型:https://pan.baidu.com/s/1AjOIu77mzFM4cDA0MMVr2A#list/path=%2F,提取码:5ttf

我先使用总的资料里下载的模型测试。

2 人脸检测API接口介绍

组件 头文件以及库路径 描述
系统操作组件 easyeai-api/common_api/system_opt 提供线程操作函数
摄像头组件 easyeai-api/peripheral_api/camera 提供摄像头操作函数
显示屏组件 easyeai-api/peripheral_api/display 提供显示屏操作函数
人脸检测组件 easyeai-api/algorithm_api/face_detect 提供人脸检测操作函数

主要来看下人脸检测组件。

face_detect.h主要内容如下,包括一个det(detect)类的3个人脸检测API函数:

class det {
public:
    det(){
landmarks.resize(5);
    }
    ~det(){
    }
?
    bool operator<(const det &t) const {
return score < t.score;
}
?
    bool operator>(const det &t) const {
return score > t.score;
}
?
    cv::Rect_ box;
    std::vector landmarks;
    float score;
?
    void print() {
printf("finalbox(x1y1x2y2) %f %f %f %f, score %fn", box.x, box.y, box.br().x, box.br().y, score);
printf("landmarks ");
int point_number = landmarks.size();
for (int i = 0; i < point_number; i++) {
printf("%f %f, ", landmarks[i].x, landmarks[i].y);
}
printf("n");
}
    
};
?
int face_detect_init(rknn_context *ctx, const char *path);
?
int face_detect_run(rknn_context ctx, cv::Mat &input_image, std::vector &result);
?
int face_detect_release(rknn_context ctx);

一些参数:

  • ctx:输入参数,rknn_context句柄
  • path:输入参数,算法模型路径
  • input_image:输入参数, Opencv Mat格式图像
  • result:输出参数, 人脸检测的结果输出

3 代码分析与修改

官方例程使用的是双目摄像头中的RGB摄像头,本篇测试修改为使用外接USB摄像头来采集图像,并将采集的图像横屏显示。另外,在识别到人脸后,通过OpenCV函数,在屏幕左上角显示出识别到的人脸个数。

3.1 图像采集与显示线程(主线程)

修改后的主程序逻辑如下:

2.png

主要代码结构如下:

Mat algorithm_image;
pthread_mutex_t img_lock;
?
int main(int argc, char **argv)
{
//省略...
pthread_t mTid;
Result_t Result;
Mat image;
// 1.打开USB摄像头
//省略...
// 2.创建识别线程,以及图像互斥锁
pthread_mutex_init(&img_lock, NULL);
Result.result.clear();
Result.face_number = 0;
CreateNormalThread(detect_thread_entry, &Result, &mTid);
// 3.显示初始化
    //省略...
// 4.(取流 + 显示)循环
while(1){
// 4.1、取流
pthread_mutex_lock(&img_lock);
ret = usbcamera_getframe(USB2_0, USB_DIRECT, pbuf);
if (ret) {
printf("error: %s, %dn", __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);
// 4.2、显示
        cv::putText(image, std::string("detect faces: ") + std::to_string((int)Result.result.size()), 
                    cv::Point2f(30, 50), cv::FONT_HERSHEY_SIMPLEX,1.45, CV_RGB(255,0,0),3.0);
for (int i = 0; i < (int)Result.result.size(); i++)
{
// 标出人脸框
int x = (int)(Result.result[i].box.x);
int y = (int)(Result.result[i].box.y);
int w = (int)(Result.result[i].box.width);
int h = (int)(Result.result[i].box.height);
rectangle(image, Rect(x, y, w, h), Scalar(0, 255, 0), 2, 8, 0);
// 标出人脸定位标记
for (int j = 0; j < (int)Result.result[i].landmarks.size(); ++j) {
cv::circle(image, cv::Point((int)Result.result[i].landmarks[j].x, (int)Result.result[i].landmarks[j].y), 2, cv::Scalar(0, 255, 0), 3, 8);
}
}
        disp_commit(image.data, IMAGE_SIZE);

        usleep(20*1000);
}
?
//省略...
}

3.2 人脸检测处理

人脸检测处理序逻辑如下:

3.png

代码如下:

// 识别线程
void *detect_thread_entry(void *para)
{
int ret;
Result_t *pResult = (Result_t *)para;

// 人脸检测初始化
rknn_context ctx;
face_detect_init(&ctx, "face_detect.model");

Mat image;
while(1)
{
        if(algorithm_image.empty()) {
usleep(5);
            continue;
        }

pthread_mutex_lock(&img_lock);
image = algorithm_image.clone();
pthread_mutex_unlock(&img_lock);
// 算法分析
ret = face_detect_run(ctx, image, pResult->result);
pResult->face_number = pResult->result.size();
if(ret <= 0){
pResult->result.clear();
usleep(1000);
continue;
}

printf("n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n");
printf("face number : %dn", pResult->face_number);

        usleep(16*1000);
}
/* 人脸检测释放 */
face_detect_release(ctx);
return NULL;
}

4 测试

测试效果如下,可以同时检测到多张人脸,在屏幕左上角标注有检测到的人脸个数:

4.png

5 总结

本篇介绍了EASY EAI Nano的AI人脸检测功能,修改官方代码,改用外接USB摄像头来采集图像,并在识别到人脸后,通过OpenCV函数,在屏幕左上角显示出识别到的人脸个数。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    5781

    浏览量

    106605
  • 灵眸
    +关注

    关注

    0

    文章

    20

    浏览量

    3323
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    EASY EAI Orin Nano开发板试用体验】PP-OCRV5文字识别实例搭建与移植

    EASY EAI Orin Nano开发板试用体验】PP-OCRV5文字识别实例搭建与移植 PP-OCRV5是PP-OCR新一代文字识别解决方案, 该方案聚焦于多场景、多文字类型的
    发表于 08-18 16:57

    EASY EAI Orin Nano开发板试用体验】使用stream推流代码和WEB服务器代码实现在客户端网页上查看摄像头图像

    本帖最后由 donatello1996 于 2025-8-13 20:32 编辑 【EASY EAI Orin Nano开发板试用体验】使用stream推流代码和WEB服务器代码
    发表于 08-11 23:15

    EASY EAI Orin Nano开发板试用体验】基于RKLLM大模型的聊天机器人

    计划在EASY EAI Orin Nano开发板部署QWEN大模型,然后通过部署flask服务将其web化,成为一个web聊天对话机器人,最后再对接语音识别模块,最终实现一个语音聊天机器人的目标
    发表于 08-07 16:52

    EASY-EAI携手Hailo,推出高性能、高算力的边缘AI硬件组合

    导读EASY-EAI与Hailo建立合作关系,共同推出高算力的边缘AI产品组合。此次合作,EASY-EAI将采用Hailo公司的AI加速芯片,并与我司硬件相结合,打造一款性能优异、性价
    的头像 发表于 07-25 15:22 ?352次阅读
    <b class='flag-5'>EASY-EAI</b>携手Hailo,推出高性能、高算力的边缘<b class='flag-5'>AI</b>硬件组合

    EASY EAI Orin Nano开发板试用体验】EASY-EAI-Toolkit人脸识别

    本篇使用算法组件实现人脸检测。 一.准备工作 1.首先使用到EASY-EAI-Toolkit组件,ubuntu挂载目录下克隆git clone https://github.com/EASY-
    发表于 07-20 14:40

    EASY EAI Orin Nano开发板试用体验】人脸识别提升

    【前言】【新提醒】【EASY EAI Orin Nano开发板试用体验】人脸识别体验 - EASY
    发表于 07-05 15:21

    EASY EAI Orin Nano开发板试用体验】EASY-EAI-Toolkit通用组件体验

    、环境准备 阅读EASY EAI Orin Nano开发板说明书,板子预留了UART4、UART8和UART10三个串口。 UART8靠上面,比较方便接线,就选择你了。 先配置好UAR
    发表于 07-04 23:38

    EASY EAI Orin Nano开发板试用体验】EASY-EAI-Toolkit初体验

    的软件开发包,旨在简化 AI算法 的开发、转换和部署过程。? EASY-EAI-Toolkit包含多种算法组件,如 人脸检测人脸识别
    发表于 06-28 21:21

    EASY EAI Orin Nano开发板试用体验】开箱和固件烧录更新体验

    首先感谢灵眸科技和发烧友组织的开发板大赛! 一、硬件介绍 灵眸科技EASY EAI Orin-Nano基于瑞芯微的RK3576处理器设计,集成了4个Cortex-A72和
    发表于 06-26 23:41

    EASY EAI Orin Nano开发板试用体验】人脸识别体验

    /nfs -o nolock 【注】此处需要插上网线连上网,要不提示连接服务器出错。 3、进入人脸识别目录,并执行./build.sh编译: root@EASY-EAI-ORIN-NANO:/home
    发表于 06-26 06:54

    EASY EAI Orin Nano开发板试用体验】--开发板开箱了解

    感谢灵眸科技与论坛提供的开发板与平台。EASY EAI Orin-Nano开发板实物如下: EASY EAI Orin
    发表于 06-25 23:32

    EASY EAI Orin Nano开发板试用体验】01-开箱报告及开发环境准备

    前言 首先要特别感谢发烧友论坛和广州灵眸科技给我们提供的本次EASY EAI Orin Nano开发板试用机会, 在申请通过后很快就收到顺丰邮过来的板子,这次发烧友论坛提供了很多不错的
    发表于 06-24 19:04

    EASY EAI Orin Nano开发板试用体验】安装nfs服务器

    /developer/nfsroot * developer@EASY-EAI-Develop:~$ 测试: 使用typec连上开发板后,执行adb shell登录开发板。 在Desktop中创建nfs 然后
    发表于 06-22 17:32

    EASY EAI Orin Nano开发板试用体验】开发环境准备

    【前言】 首先感谢电子发烧友论坛以及灵眸科技给示了我这次非常难得的【EASY EAI Orin Nano开发板试用体验】的机会,在进行评测之前首先需要创建开发环境。 灵眸科技有非常详细
    发表于 06-22 16:42

    基于RK3576处理器,EASY EAI Orin Nano开发板免费试用

    EASY EAI Orin Nano是广州灵眸科技有限公司的旗舰级硬件产品。基于瑞芯微的RK3576处理器设计,集成了4个Cortex-A72和4
    的头像 发表于 06-09 15:01 ?620次阅读
    基于RK3576处理器,<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b> Orin <b class='flag-5'>Nano</b>开发板免费<b class='flag-5'>试用</b>