Python基于pyopencv人脸识别并绘制GUI界面

下面我将详细介绍"Python基于pyopencv人脸识别并绘制GUI界面"的完整攻略。

一、前置知识

在进行人脸识别和GUI界面绘制之前,需要先掌握以下知识点:

  • Python编程语言基础
  • OpenCV库(用于图像处理和计算机视觉)
  • PyQt5库(用于GUI界面绘制)

二、安装必要库

在进行Python基于pyopencv的人脸识别和GUI界面绘制之前,需要安装以下库:

1. Python3

可以在Python官网下载 https://www.python.org/downloads/

2. OpenCV

可以使用以下指令进行安装:

pip install opencv-python

3. PyQt5

可以使用以下指令进行安装:

pip install pyqt5

三、人脸识别

1. 导入必要库

import numpy as np
import cv2

2. 加载人脸识别模型

可以使用OpenCV提供的已经训练好的人脸识别模型进行识别。可以下载文件haarcascade_frontalface_default.xml,然后加载为OpenCV的分类器模型。

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

3. 读取图像文件

可以使用cv2.imread()函数读取本地图像文件,也可以通过opencv的摄像头打开实时图像。

如果需要使用已有的图像文件,可以使用以下代码:

img = cv2.imread('img.jpg')

4. 进行人脸识别

人脸识别通常是通过对图像进行特征提取,然后使用分类器进行识别。在OpenCV中,可以使用detectMultiScale()方法进行人脸检测。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

其中,cv2.cvtColor()函数将图像转换为灰度图像,这样用于人脸检测时更方便。faces包含检测到的人脸区域坐标。

5. 绘制人脸区域

可以使用cv2.rectangle()函数在图像中绘制人脸区域。

for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

其中,(x,y)为人脸区域的左上角坐标,(w,h)表示人脸区域的宽度和高度,(255,0,0)是绘制矩形框的颜色,2是矩形框的粗细。

6. 显示图像

可以使用cv2.imshow()函数显示绘制好的图像。

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

其中,'img'表示窗口标题,0表示按任意键即可关闭窗口。

四、GUI界面绘制

1. 导入必要库

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon

2. 创建GUI应用

可以通过继承QWidget类来创建一个GUI应用程序。

class MyApp(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('My App')
        self.show()

其中,setGeometry()方法用于设置窗口的位置和大小,setWindowTitle()方法设置窗口标题,show()方法显示应用程序。

3. 运行应用

创建GUI应用程序之后,需要通过QApplication类来执行应用。

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

其中,sys.argv是一个字符串列表,表示命令行参数,可以用于从命令行中启动应用程序。

五、将人脸识别与GUI界面结合

可以将上述两部分代码结合起来,实现一个能够对图像进行人脸识别并绘制GUI界面的应用程序。

下面是一个示例代码:

import sys
import numpy as np
import cv2
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QFileDialog

class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 280, 150)
        self.setWindowTitle('人脸识别')

        self.label = QLabel(self)
        self.label.move(10,10)
        self.label.resize(250, 130)
        self.label.setText('请点击打开图像文件')

        self.statusBar().showMessage('请点击打开图像文件')
        self.show()

    def openFile(self):
        fileName, _ = QFileDialog.getOpenFileName(self, "选择图像文件", "", "图像文件 (*.jpg *.png)")
        self.statusBar().showMessage('正在处理,请稍候...')
        if fileName:
            img = cv2.imread(fileName)
            face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            faces = face_cascade.detectMultiScale(gray, 1.3, 5)
            for (x,y,w,h) in faces:
                img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
            cv2.imwrite('result.jpg', img)
            pixmap = QPixmap('result.jpg')
            self.label.setPixmap(pixmap)
            self.label.setScaledContents(True)
            self.statusBar().showMessage('处理完成')

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MyApp()

    ex.label.mousePressEvent = ex.openFile

    sys.exit(app.exec_())

以上代码运行后,点击“请点击打开图像文件”链接,选择一张图片,程序会自动识别出其中的人脸并在GUI应用中显示出来。可以在窗口中查看具体的处理结果。

另一个示例是在GUI应用中添加预览摄像头的功能。可以参考以下代码:

import sys
import numpy as np
import cv2
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QFileDialog

class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

        self.timer = QTimer()
        self.timer.timeout.connect(self.show_camera)
        self.timer.start(30)

        self.cap = cv2.VideoCapture(0)

    def initUI(self):

        self.setGeometry(300, 300, 480, 360)
        self.setWindowTitle('人脸识别')

        self.label = QLabel(self)
        self.label.move(10,10)
        self.label.resize(460, 340)

        self.statusBar().showMessage('摄像头已启动')
        self.show()

    def show_camera(self):
        ret, img = self.cap.read()
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
        for (x,y,w,h) in faces:
            img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.imshow('camera', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            self.statusBar().showMessage('摄像头已关闭')
            self.cap.release()
            cv2.destroyAllWindows()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MyApp()

    sys.exit(app.exec_())

以上代码运行后,程序会打开摄像头进行实时预览,并在检测到人脸时将其用矩形框标记出来。用户可以按下q键来关闭程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于pyopencv人脸识别并绘制GUI界面 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python中BeautifuSoup库的用法使用详解

    Python中BeautifulSoup库的用法使用详解 本文将详细讲解如何使用Python中的BeautifulSoup库进行HTML和XML的解析。我们将从环境配置开始,一步步地介绍如何使用BeautifulSoup库解析HTML和XML,并提取所需的信息。 环境配置 在使用BeautifulSoup库进行HTML和XML解析之前,我们需要先进行环境配置…

    python 2023年5月15日
    00
  • 批量将ppt转换为pdf的Python代码 只要27行!

    下面是详细讲解“批量将ppt转换为pdf的Python代码 只要27行!”的完整攻略。 1. 确定需求 首先,我们需要明确自己的需求:将多个PPT文件批量转换为PDF文件,且转换过程需要自动化处理。 2. 安装Python库 第二步,我们需要安装Python库,用于实现PPT转PDF的功能。使用PyWin32和comtypes两个库,他们可以让我们通过自动化…

    python 2023年6月5日
    00
  • Python中字符串的处理技巧分享

    好的。关于Python中字符串的处理技巧,我们可以从以下几个方面进行讲解: 字符串的基础操作 在Python中,字符串是一种不可变的数据类型,因此我们无法像列表一样对其进行直接的修改。常见的字符串操作包括: 字符串连接 使用”+”运算符可以将两个字符串拼接在一起。例如: str1 = "Hello" str2 = "world&…

    python 2023年5月31日
    00
  • opencv基于Haar人脸检测和眼睛检测

    OpenCV基于Haar人脸检测和眼睛检测攻略 OpenCV是一个功能强大的开源计算机视觉库,可以用于图像和视频处理。其中,基于Haar特征的人脸检测和眼睛检测是OpenCV中的一个经典应用,本文将介绍这一应用的完整攻略。 步骤1:安装OpenCV 首先,我们需要在本地电脑上安装OpenCV库。具体可参考OpenCV官网的安装教程:https://docs.…

    python 2023年6月2日
    00
  • python 如何使用find和find_all爬虫、找文本的实现

    Python如何使用find和find_all爬虫、找文本的实现 本攻略将介绍如何使用Python的BeautifulSoup库中的find和find_all方法进行爬虫和文本查找。我们将使用一个示例网站进行演示,并提供两个示例代码,分别用于爬虫和文本查找。 安装所需库 在开始前,我们需要安装BeautifulSoup库。我们可以使用以下命令在命令行中安装这…

    python 2023年5月15日
    00
  • pandas中的Timestamp只保留日期不显示时间

    首先,我们需要明确 Timestamp 是 Pandas 中一个用于处理时间序列的数据类型,它表示的是某个具体的时间点。默认情况下,Timestamp 会同时保留日期和时间信息。如果你想保留日期信息,移除时间信息,可以通过下列方法实现: import pandas as pd # 创建一个包含日期和时间的 Timestamp 对象 ts = pd.Times…

    python 2023年6月2日
    00
  • Python 函数分类

    从功能角度,Python 函数可以分为内置函数和自定义函数。内置函数是Python解释器提供的函数。开发者可以直接使用内置函数,而不需要进行任何的定义和导入。例如,print()、input()等等。自定义函数是用户自己编写的函数。自定义函数用来实现特定的功能或任务。 从形式角度,Python函数可以分为函数声明和匿名函数。函数声明即常见的函数定义方式,通过…

    python-answer 2023年3月25日
    00
  • Python解析CDD文件的代码详解

    下面我来详细讲解如何解析CDD文件的Python代码,并且提供两个示例说明。 Python解析CDD文件的代码详解 什么是CDD文件 CDD(CAN DBC file)文件,是声明CAN总线上通信网络中发送和接收的消息、信号及其关系;不仅定义了网络的物理层、数据链路层,还定义了网络上所有的消息在数据链路层之上的描述和格式,包括MsgID、DataLength…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部