• 技术文章 >Python技术 >Python基础教程

    python中OpenCV的人脸检测功能

    宋雪维宋雪维2021-02-22 16:03:20原创2454

    人脸检测是 OpenCV 的一个很不错的功能,它是人脸识别的基础。人脸识别其实就是一个程序能识别给定图像或视频中的人脸。

    人脸识别模块特征

    1、是用一系列分好类的图像来“训练”程序,并基于这些图像来进行识别。这就是OpenCV 及其人脸识别模块进行人脸识别的过程。

    2、每个识别都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。

    人脸识别两种方式

    1、自己获得图像或从人脸数据库免费获得可用的人脸图像。

    2、互联网上有许多人脸数据库:为了对这些样本进行人脸识别,必须要在包含人脸的样本图像上进行人脸识别。这是一 个学习的过程,但并不像自己提供的图像那样令人满意。

    python中OpenCV的人脸检测功能操作实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    import os

    import cv2

    from PIL import Image

    import numpy as np

     

    def getImageAndLabels(path):

        facesSamples = []

        ids = []

        imagePaths = [os.path.join(path, f) for f in os.listdir(path)]

     

        # 检测人脸

        # 加载特征数据

        face_detector = cv2.CascadeClassifier(

            'D:/Python/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')

        # 参数: scaleFactor(比例因子):图片缩放多少,minNeighbors:至少检测多少次,minSize maxSize:当前检测区域的最小面积

        # scaleFactor=1.01, minNeighbors=3, maxSize=(33, 33), minSize=(28, 28)

     

        # 遍历列表中的图片

        for imagePath in imagePaths:

            # 打开当前图片

            PIL_img = Image.open(imagePath).convert('L')

     

            # 将图片转化为数组

            img_numpy = np.array(PIL_img, 'uint8')

            faces = face_detector.detectMultiScale(img_numpy)

     

            # 获取每张图片的id

            id = int(os.path.split(imagePath)[1].split('.')[0])

     

            # 获取人脸区域

            for x, y, w, h in faces:

                # 进行切片处理,获取图像数组和id

                facesSamples.append(img_numpy[y:y+h, x:x+w])

                ids.append(id)

     

            return facesSamples, ids

     

     

    if __name__ == '__main__':

        # 图片路径

        path = './data/jm/'

        # 获取图像数组和id标签数组

        faces, ids = getImageAndLabels(path)

     

        # 获取循环对象

        recognizer = cv2.face.LBPHFaceRecognizer_create()

        recognizer.train(faces, np.array(ids))

     

        # 保存文件

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

    专题推荐:python基础
    上一篇:python中如何配置Logging处理器 下一篇:Python中内置类型性能有哪些?

    相关文章推荐

    • python如何转换图片灰度?• python日志库的模块化方法• python中Haar级联是什么?• python日志记录器的配置• python中如何在静态图像中人脸检测?• python中如何配置Logging处理器

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网