基于树莓派和opencv实现人脸识别

这篇具有很好参考价值的文章主要介绍了基于树莓派和opencv实现人脸识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于树莓派和opencv实现人脸识别

源码我放在github上了
https://github.com/FjnuThomas/-opencv-
各位哥哥姐姐clone代码别忘了给个小心心哦😘

前言
一、人脸检测
二、图像采集
三、开始训练
四、人脸识别
总结

前言

我们这学期选修了一门嵌入式Linux,期末选择了基于树莓派和opencv实现人脸识别作为期末作业。为了展示的方便,我将几个主要的功能集成在一个文件中,并通过wxpython写了GUI界面。同时也通过pyinstaller将.py文件打包成了适配windows和Linux的
展现一下我觉得巨帅的GUI 界面
基于树莓派和opencv实现人脸识别

环境

  • 树莓派3B V1.2
  • 树莓派系统:bullseye
  • python 3.9.2
  • opencv-python 4.5.3.56
  • opencv-contrib-python 4.5.3.56
  • numpy 1.21.0
  • 摄像头罗技C170

关于树莓派安装opencv的步骤,可以参考我的另一篇博文
树莓派3B安装opencv

关于用opencv实现人脸识别的原理,晚上有很多博客已经写得很详细了,我只是基本理解,就不在这边班门弄斧了,写这篇博文的主要目的是对自己所学的进行归纳,只演示代码运行之后的结果,并在关键处进行解释。完整代码的github链接我放在文章开头了,可以直接使用。
opencv是一个用于图像处理、分析、机器视觉方面的开源函数库,它为我们提供了很多现成的函数和分类器,可以让我们很容易地实现功能。

一、人脸检测

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

haarcascade_frontalface_default.xml

代码实现:

import cv2

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')

        cap = cv2.VideoCapture(0)
        cap.set(3, 640)  # set Weight
        cap.set(4, 480)  # set Height

        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下运行如下代码可以完成人脸检测的功能
基于树莓派和opencv实现人脸识别

二、图像采集

人脸识别的本质其实就是构建一个人脸信息的数据库,电脑比对摄像头采集到的人脸信息和数据库中存放的数据,从而得到一个比对的结果
图像采集需要我们在.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)
基于树莓派和opencv实现人脸识别

采集得到的图片
基于树莓派和opencv实现人脸识别

三、开始训练

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

 recognizer.train()

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

mkdir trainer

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

recognizer.write('trainer/trainer.yml')

进行保存
训练成功实例
基于树莓派和opencv实现人脸识别

四、人脸识别

通过了前三个步骤,我们已经有了一个在data文件夹中保存采集到的图像、在trainer文件夹中保存自己训练的trainer.xml模型的文件了,我们就进入到了最后一步,也就是传说中的人脸识别了
人脸识别实例

基于树莓派和opencv实现人脸识别
可以看到,系统识别出我有73%的概率是彭于晏,识别的成功率还是很高的
关于输出名字的问题,在代码的这个部分

  id = 0
  names = ['None', 'pengyuyan', 'xsy', 'rhy']

我们可以在这里修改成自己想要的名字,在代码中还有这样的部分

        id, confidence = recognizer.predict(gray[y:y + h, x:x + w])
        # 判断成功概率>45时,输出id,否则输出unknow
        if (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版本不太匹配,只好暂时作罢。在之后应该会尝试进行一次重新编译。文章来源地址https://www.toymoban.com/news/detail-421938.html

到了这里,关于基于树莓派和opencv实现人脸识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】基于Qt的人脸识别系统,门禁人脸识别系统,Python人脸识别流程,树莓派

    在深度学习领域做人脸识别的识别准确率已经高到超出人类识别,但综合考虑模型复杂度(推理速度)和模型的识别效果,这个地方还是有做一些工作的需求的。 人脸识别的过程基本由下面的流程组成。 yolov5-face、yolov7-face等github项目都可以做到这一点,在公开数据集上训练

    2024年02月09日
    浏览(30)
  • 基于树莓派的人脸识别门禁系统

    1、概述:本次在树莓派上安装Opencv及其扩展模块,考虑到树莓派的SD卡容量和内存的限制,不采用直接pip安装方法,而采用编译Opencv源码的方式进行安装。 2、遇到的问题及解决方法 遇到的问题 解决方法 缺少”cuda.hpp” 将/home/pi/opencv_contrib3.4.1/modules/xfeatures2d/include/opencv2下的

    2023年04月19日
    浏览(35)
  • 基于OpenCv和tensorflow的人脸识别设计与实现

    项目名称: 基于OpenCv和tensorflow的人脸识别 项目地址:https://gitee.com/yq233/opencv 环境配置: Python tensorflow2 OpenCv categories: 人工智能 description: Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要

    2024年02月03日
    浏览(39)
  • Android基于opencv4.6.0实现人脸识别功能

    步骤: 1.整合opencv 2.获取相机的SurfaceView传到native层去检测(亦或是不断的获取SurfaceView的Bitmap,传到native层) 3.检测人脸,在本地保存人脸特征信息 4.上传至后台(不实现) 人脸识别实现的思路(例:人脸登录) 1.人脸信息录入 1.1获取相机的Bitmap,检测人脸(保证人脸信息比较精准

    2024年02月03日
    浏览(38)
  • 基于opencv和python的人脸识别签到系统设计与实现

    收藏和点赞,您的关注是我创作的动力   人脸识别广泛的应用于各个领域。一般来说,人脸具有人类基因、指纹等独特的生物学特性,因此可以作为生物特征识别,从而方便、快速、准确地识别被摄体,可见人脸识别是一种有效的身份识别工具。该技术可以应用于任何需要

    2024年02月04日
    浏览(37)
  • python基于opencv和tkinter实现人脸识别【内附完整代码】

    人脸识别技术已经在许多领域得到了广泛应用,例如安防、金融、医疗等等。人脸识别可以帮助我们识别和验证一个人的身份,这是一项非常重要的任务。本篇博客将介绍如何使用Python和OpenCV库进行人脸识别。我们将学习如何使用OpenCV中的人脸检测器检测图像中的人脸,如何

    2023年04月14日
    浏览(29)
  • 毕业设计——基于OpenCV的视频人脸识别检测系统的设计与实现

    如需完整源码,可以联系博主获取 本系统基于OpenCV使用Haar级联与dlib库进行人脸检测及实时跟踪,应用LBPH算法开发了一个功能相对完整的人脸识别系统。系统采用sqlite3进行序列化数据存储,能够对陌生人脸闯入进行报警,并拥有基于PyQt5设计的GUI实现。 一、引言 随着计算机

    2024年04月12日
    浏览(35)
  • 毕业设计——基于python-contrib-opencv的人脸识别及检测系统设计与实现(实现电脑端摄像头读取视频,实时人脸录入,人脸检测,人脸识别等功能)

    如需完整源码,可以联系博主获取 基于python-contrib-opencv,dlib,pyqt5。能够实现电脑端摄像头读取视频,实时人脸录入,人脸检测,人脸识别等功能。 一、引言 随着计算机视觉和人工智能技术的不断发展,人脸识别技术已成为智能安防、身份验证等领域的关键技术之一。而基于

    2024年04月12日
    浏览(37)
  • 基于Linux的树莓派和电脑之间的串口通信编程

    目录 1、串口基本认知 2、USB转TTL,使用ch340通信 2.1 TTL电平 2.2 串口接线方式 ​3、串口通信常用的API 4、代码通信实例 4.1 发送一个字符/字符串到串口 4.2 树莓读取串口数据(字符串) 4.3 双方互相通信 4.3.1 树莓派接收一个字符同时再发送字符到串口 4.3.2 树莓派子进程接收

    2024年02月03日
    浏览(30)
  • 【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现

    这里我们会实现一个项目:在linux操作系统下基于OpenCV和Socket的人脸识别系统。 目录 🌞前言 🌞一、项目介绍 🌞二、项目分工 🌞三、项目难题 🌞四、实现细节 🌼4.1 关键程序 🌼4.2 运行结果 🌞五、程序分析 🌷5.1 wkcv.link 🌷5.2 客户端client.cpp 🌷5.3 服务端server.cpp 项目

    2024年03月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包