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

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

3天内不再提示

opencv库几个内置函数的功能和使用

lhl545545 来源:达尔闻说 作者:达尔闻说 2022-09-09 10:16 次阅读

本次分享的是一个可以用于毕业设计参考的人脸识别项目,由FJNUThomas分享。如果有做人脸识别毕设的同学,可以在此基础上,做更深入的研究,源码下载方式见文末。下面是设计步骤: 硬件及环境:

树莓派3B V1.2

摄像头罗技C170

树莓派系统:bullseye

python 3.9.2

opencv-python 4.5.3.56

opencv-contrib-python 4.5.3.56

numpy 1.21.0

关于树莓派安装opencv的步骤,可以参考下面这篇博文:

https://blog.csdn.net/m0_46190150/article/details/121501093

人脸检测

我们实现人脸识别的前提事件是人脸检测,只有检测到人脸,才能够收集到人脸的数据。我们用的是opencv自带的分类器:

haarcascade_frontalface_default.xml
代码实现:

importcv2faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')cap=cv2.VideoCapture(0)        cap.set(3, 640)  # set Weightcap.set(4,480)#setHeight        while True:            ret, img = cap.read()            img = cv2.flip(img, 1) #如果摄像头倒置,将1改成-1            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)            faces = faceCascade.detectMultiScale(gray,                scaleFactor=1.2,minNeighbors=5,                minSize=(20, 20)                )
            for (x, y, w, h) in faces:                cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)                roi_gray = gray[y:y + h, x:x + w]roi_color=img[y:y+h,x:x+w]
            cv2.imshow('video', img)
            k = cv2.waitKey(30) & 0xff            if k == 27:  # Esc for quit                break        cap.release()        cv2.destroyAllWindows()
python3下运行如上代码可以完成人脸检测的功能。

图像采集

人脸识别的本质其实就是构建一个人脸信息的数据库,电脑比对摄像头采集到的人脸信息和数据库中存放的数据,从而得到一个比对的结果。 图像采集需要我们在.py文件同目录下新建一个文件夹,用于存放采集得到的图片。

mkdir data
采集得到的图片越多,构建的数据库越完善,判断成功的概率也越高,但图片太多同样会降低比对时的速度。 我这里是设置了每0.2s拍一张照片,按ecs或拍满40张照片时退出。

k = cv2.waitKey(200) & 0xff  # ESC退出and每0.2s拍一张            if k == 27:                break            elif count >= 40:  # 拍40张照片                break
图像采集示例(这边需要我们在终端输入id号,我这边输入4) 59fb2b8a-2f77-11ed-ba43-dac502259ad0.png 采集得到的图片: 5a330ee2-2f77-11ed-ba43-dac502259ad0.png

开始训练

训练是opencv人脸识别的重中之重。opencv为我们提供了多个内置函数,调用这些函数能够帮助我们训练得到自己的训练集这边我采用的是:

 recognizer.train()
在开始训练之前,我们需要新建一个空目录用于存放得到的模型:

mkdir trainer
模型保存为.xml文件,要注意我们的代码是在树莓派下跑的,在树莓派下recognizer.write()是不能够使用的,因此我们用:

recognizer.write('trainer/trainer.yml')
进行保存,训练成功实例 5aa15776-2f77-11ed-ba43-dac502259ad0.png  

人脸识别

通过了前三个步骤,我们已经有了一个在data文件夹中保存采集到的图像、在trainer文件夹中保存自己训练的trainer.xml模型的文件了,我们就进入到了最后一步,也就是传说中的人脸识别了。人脸识别实例: 可以看到,系统识别出我有73%的概率是彭于晏,识别的成功率还是很高的、关于输出名字的问题,在代码的这个部分:

  id = 0  names = ['None', 'pengyuyan', 'xsy', 'rhy']
我们可以在这里修改成自己想要的名字,在代码中还有这样的部分:

id,confidence=recognizer.predict(gray[y:y+h,x:x+w])#判断成功概率>45时,输出id,否则输出unknowif(confidence< 55):      id = names[id]          confidence = "  {0}%".format(round(100 - confidence))       else:          id = "unknown"          confidence = "  {0}%".format(round(100 - confidence))
用于修改自己想要的判断概率。 到这里我们的人脸识别就基本完成了。

总结

通过本项目,可以获得以下技能:

学会树莓派的配置,并在树莓派上配置了环境

对opencv库有了个基本的了解,熟悉几个内置函数的功能和使用

Linux有了更深刻的理解

增加了python能力

不足之处: 在调试的过程中,发现在树莓派上运行项目还是有比较明显的卡顿的,因此有对代码进行优化的想法,查阅资料以后了解到了有一个东西叫做pypy,尝试过用pypy对文件进行编码,奈何写的代码是基于python3.9,和当前的pypy版本不太匹配,只好暂时作罢。在之后应该会尝试进行一次重新编译,感兴趣的同学可以尝试看看。

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

    关注

    87

    文章

    11223

    浏览量

    208896
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62426
  • 人脸识别
    +关注

    关注

    76

    文章

    4005

    浏览量

    81760
  • OpenCV
    +关注

    关注

    30

    文章

    628

    浏览量

    41253

原文标题:毕业设计| 树莓派与OpenCV实现人脸识别

文章出处:【微信号:达尔闻说,微信公众号:达尔闻说】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Vivado设计流程分析 Vivado HLS实现OpenCV的开发流程

    处理的几个基本步骤,完成从OpenCV设计到RTL转换综合的开发流程。 开源计算机视觉 (OpenCV) 被广泛用于开发计算机视觉应用,它包含2500多个优化的视频函数
    发表于 04-23 11:32 5851次阅读
    Vivado设计流程分析 Vivado HLS实现<b class='flag-5'>OpenCV</b>的开发流程

    Qt使用openCV

    使用Qt加OpenCV进行数字图像处理了还是很不错的,参考网上一个帖子分享一下经验:环境:Windows下的Qt4.7.0安装qt-sdk-win-opensource-4.7下载OpenCV
    发表于 11-22 16:12

    人脸识别历程中的opencv是1.0还是emcv版本?

    Q1.这个历程中的opencv是否是1.0还是emcv版本啊?Q2.看到里面好多opencv中有的函数并没有调用,而是重写了一个(比如转
    发表于 10-28 14:31

    怎样去生成能在Qt中应用的opencv

    请问如何生成适用于arm版的opencv,能在Qt中应用。(想在Qt中开发opencv相关的功能,需要调用opencv,我用别的交叉工具链
    发表于 12-30 06:58

    OpenCV3编程入门-源码例程全集-HoughLinesP函数

    OpenCV3编程入门-源码例程全集-HoughLinesP函数用法示例
    发表于 09-18 16:38 10次下载

    openCV开源模块组成部分以及介绍

    的API。 OpenCV是一个模块化结构,即由几个共享和静态组成。模块如下: core -一个定义基本数据结构的模块,包括多维数组和其它模块使用的核心函数 imgproc-图像处理模
    发表于 11-17 01:43 3691次阅读

    通过SDSoC开发环境加速OpenCV功能

    通过SDSoC开发环境仅使用C / C ++和硬件优化,在硬件中加速OpenCV功能
    的头像 发表于 11-27 06:25 2974次阅读

    OpenCV的特点和主要功能及实现光流方法的运动说明

    序列图像的光流计算是计算机视觉研究领域运动估计的重要组成部分。本文介绍了OpenCV的特点和主要功能,通过调用函数库中的金字塔Lucas—Kanade光流计算
    发表于 10-15 11:56 12次下载
    <b class='flag-5'>OpenCV</b><b class='flag-5'>库</b>的特点和主要<b class='flag-5'>功能</b>及实现光流方法的运动说明

    OpenCV函数图像处理目录说明

    本文档的主要内容详细介绍的是OpenCV函数图像处理目录说明。
    发表于 10-29 15:55 12次下载
    <b class='flag-5'>OpenCV</b><b class='flag-5'>函数</b>图像处理目录说明

    OpenCV的小波变换函数代码免费下载

    OpenCV里面没有提供小波变换函数确实是一大遗憾,网上找点小波变换的代码吧,大多是针对BMP直接操作的,还没有发现非常适合OpenCV的,没办法,自己动手手写了一个,意在抛砖引玉,欢迎大家批评,拍砖头,砸鸡蛋。
    发表于 11-14 15:51 13次下载
    <b class='flag-5'>OpenCV</b>的小波变换<b class='flag-5'>函数</b>代码免费下载

    如何安装和配置OpenCVOpenCV几个小问题解答

    本文档的主要内容详细介绍的是如何安装和配置OpenCVOpenCV几个小问题解答包括了:安装和配置OpenCV,Highgui.h与CvvImage类的问题:,如何通过摄像头获取视
    发表于 12-17 17:25 9次下载
    如何安装和配置<b class='flag-5'>OpenCV</b>及<b class='flag-5'>OpenCV</b>的<b class='flag-5'>几个</b>小问题解答

    opencv计算机视觉介绍

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉,可以运行在Linux、Windows、Android和Mac OS操作系统上。
    的头像 发表于 04-13 18:23 2938次阅读

    不属于python的内置函数

    Python是一种高级编程语言,它提供了许多内置函数,可以帮助开发人员更轻松地处理各种任务。但是,在Python中并非所有的函数都是内置函数
    的头像 发表于 11-29 14:27 1386次阅读

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉,提供了大量的计算机视觉算法和工具。以下是OpenCV的主要功能: 图像处
    的头像 发表于 07-16 10:35 1328次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件,它提供了大量的图像和视频处理功能OpenCV
    的头像 发表于 07-16 10:38 963次阅读