2173|2

241

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板】8-opencv人脸识别测评 [复制链接]

 

本期测评基于opencv来进行一个人脸识别测评。模型是我在网上找的一个开源现成的我会在最后把模型和工程分享给大家。开发板烧录的是Ubuntu系统,得益于Ubuntu下载一些包非常容易且快我们能快速搭建好开发环境。我这里是输入图片,输出人脸识别检测结果的图片。如果自己编译过内核源码可以把摄像头驱动适配上,就可以用摄像头在线检测,我这里由于不想从新编译一个SD的系统,就直接使用官方给的Ubuntu镜像了。SD卡镜像烧录方法请参考官方教程:SD 卡镜像烧录 | LUCKFOX WIKI

 

下面开始正文,官方给的Ubuntu系统是给了python支持的,我们可以输入下面的命令看看python的版本

python3 --version

 

我是打算用python来写这个 程序的,因为python代码简单易懂

用python来写opencv就必须要下载opencv的python支持包,我们使用下面的命令来下载

sudo apt update
sudo apt install python3-opencv

 

我这里已经下载好了。接下来就可以进行人脸识别的代码编写了。

 

我们新建一个model文件用来装我们的模型,将模型文件放到这个文件夹里面。

然后新建一个picture文件夹装我们的人脸照片。我从网上找了两张人脸的图,他们本来是如下所示:

 

 

我们新建一个detect.py文件用来存放我们代码,代码如下所示

import cv2
#加载训练模型
face_detect=cv2.CascadeClassifier(r"./model/lbpcascade_frontalface_improved.xml")
#读取摄像头画面
img=cv2.imread("./picture/face.jpg")
#视频图片经过灰色处理后只有黑白两种颜色,像素的位置并不会改变,便于像素识别
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#进行人脸检测
output_face = face_detect.detectMultiScale(img_gray,scaleFactor=1.02,minNeighbors=5)#将检测图片放大1.02倍,构成检测目标的相邻矩形的最小个数(默认为3个),这里设置了5个。
#判断是否有人脸
if len(output_face):
    for x,y,w,h in output_face:
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite("output_face,jpg",img)#保存图片
print("图片保存成功")

因为python是解释性语言,代码编写好后我们直接用python3执行,如下所示

 

这样我们就可以再当前文件夹查看结果了

我们打开着两张图片看一下结果如何

  

 

效果看起来还不错。这里我会把我的工程分享给大家。

 

如果实现了摄像头驱动的朋友可以试试下面的代码,下面的代码我在树莓派上跑过,亲测有效,跑的结果不是很好,有点卡,就是不知道在幸狐上跑的效果如何。当然处理方式和上面一样。

import cv2
import time
#加载训练模型
face_detect=cv2.CascadeClassifier(r"./model/lbpcascade_frontalface_improved.xml")
cap=cv2.VideoCapture(0)
while cap.isOpened():
    #读取摄像头画面
    frla,img=cap.read()
    #画面翻转y轴
    img=cv2.flip(img,1)
    #视频图片经过灰色处理后只有黑白两种颜色,像素的位置并不会改变,便于像素识别
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #进行人脸检测
    faces = face_detect.detectMultiScale(
        img_gray, #进行检测的灰度图片
        scaleFactor=1.02,#将检测图片放大1.02被
        minNeighbors=5)#表示构成检测目标的相邻矩形的最小个数(默认为3个),这里设置了5个。
    #判断是否有人脸
    if len(faces):
        #遍历检测到的人脸
        for x,y,w,h in faces:
            #绘制人脸矩形框
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    if cv2.waitKey(30) & 0xff == ord('q'):
        break
    if cv2.waitKey(30)&0xff == ord('s'):#按s键保存图片
        timer=time.time()#获取时间戳
        name=str(int(timer))+".jpg"#将时间戳转换成字符串类型和.jpg拼接,用作下一步的保存图片的名字
        cv2.imwrite(name,img)#保存图片
        print("图片保存成功")
    #显示人脸
    cv2.imshow("face",img)
#释放摄像头
cap.release()
#销毁窗口
cv2.destroyAllWindows()

 

总结:通过本期测评成功的使用Luckfox幸狐 RV1106开发板实现了人脸识别,从照片的结果来看实现的还算精准。

附件:

face_detect.zip (2.49 MB, 下载次数: 17)

 

最新回复

总结:通过本期测评成功的使用Luckfox幸狐 RV1106开发板实现了人脸识别,从照片的结果来看实现的还算精准。 我原来搞过,不知道就不知道如何把这些放到数据里,然后进行对比。   详情 回复 发表于 2024-3-8 16:28
点赞 关注
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 

总结:通过本期测评成功的使用Luckfox幸狐 RV1106开发板实现了人脸识别,从照片的结果来看实现的还算精准。

我原来搞过,不知道就不知道如何把这些放到数据里,然后进行对比。

点评

直接用opencv的库就行了  详情 回复 发表于 2024-3-11 10:37
 
 
 

回复

241

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
lugl4313820 发表于 2024-3-8 16:28 总结:通过本期测评成功的使用Luckfox幸狐 RV1106开发板实现了人脸识别,从照片的结果来看实现的还算精准。 ...

直接用opencv的库就行了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表