IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python:使用cv2模块进行人脸识别Demo -> 正文阅读

[人工智能]Python:使用cv2模块进行人脸识别Demo

简介:opencv的人脸检测的xml文件,这些文件可用于检测静止图像,视频和摄像头所得到图像中的人脸。业余AI相关学习人员,错误的地方请指正,轻喷。

案例的前提:Python环境、Opencv库,笔记本摄像头

实现步骤

1、调用开启摄像头,进行人脸录入。(单人场景可以考虑通过sanic编写一个接口实现远程访问进行截图保存)
2、对采集的人脸进行数据训练。
3、调用数据训练的模型算法结果,开启摄像头,编写识别逻辑。

案例源码:

input_face.py


import cv2.cv2 as cv2
# 思路:
# 1、开启摄像头
# 2、按{数目.名字.jpg}的形式保存到人脸目录


cap = cv2.VideoCapture(0)
num = 1

# 录入保存的英文名字。cv2.putText不支持中文,中文需要设置字体,暂不考虑,后续单独更新一篇。
name = "tom"

while True:
    ret_flag, v_show = cap.read()
    cv2.imshow("Capture", v_show)
    k = cv2.waitKey(1)
    if k == ord("s"):
        face_num = str(num) + "." + name
        cv2.imwrite(fr"D:\xxxxx\person_face\{face_num}.jpg", v_show)
        print("成功保存", str(num) + ".jpg")
        print("*" * 80)
        num += 1
    elif k == ord(" "):
        break

cap.release()  # 释放摄像头
cv2.destroyAllWindows()

单人sanic远程截图:参考sanic:通过API接口进行电脑截图或录像

data_training.py

import os
import cv2.cv2 as cv2
import numpy as np
from PIL import Image


def get_img_labels(path):
    faces_samples = []
    ids = []
    img_paths = [os.path.join(path, f) for f in os.listdir(path)]
    face_detector = cv2.CascadeClassifier(
        r"D:\xxxxxx\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")

    for img_path in img_paths:
        pil_img = Image.open(img_path).convert("L")
        img_numpy = np.array(pil_img, "uint8")

        faces = face_detector.detectMultiScale(img_numpy)
        id = int(os.path.split(img_path)[1].split(".")[0])
        for x, y, w, h in faces:
            ids.append(id)
            faces_samples.append(img_numpy[y:y + h, x:x + w])
    print(f"id:{id}")
    print(f"faces_samples:{faces_samples}")
    return faces_samples, ids


if __name__ == '__main__':
    path = r"D:\codes\ai2022\person_face"
    faces, ids = get_img_labels(path)
    recognizer = cv2.face.LBPHFaceRecognizer_create()
    recognizer.train(faces, np.array(ids))
    recognizer.write("TrainingDataSet.yml")

main.py

# coding=utf-8
import cv2.cv2 as cv2
import os

# 加载训练数据集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('TrainingDataSet.yml')
names = []


def face_detect_demo(img):
    # 准备识别的视频,图片,摄像头等。
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度
    face_detector = cv2.CascadeClassifier(
        r'D:\xxxxx\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    face = face_detector.detectMultiScale(gray, 1.1, 3, cv2.CASCADE_SCALE_IMAGE, (50, 100), (300, 300))
    for x, y, w, h in face:
        cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
        cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
        # 人脸识别
        print(f"names:{names}")
        ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
        print(f"confidence:{confidence}")
        if confidence > 70:
            cv2.putText(img, 'unKnow', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
        else:
            cv2.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
    cv2.imshow('result', img)


def name():
    path = r'D:\xxxxx\person_face'
    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
    for imagePath in imagePaths:
        name = str(os.path.split(imagePath)[1].split('.', 2)[1])
        names.append(name)


cap = cv2.VideoCapture(0)
name()
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)
    if ord(' ') == cv2.waitKey(10):
        break
cv2.destroyAllWindows()
cap.release() # 释放摄像头
print(names)

人脸录入保存的结果:保存的图像特征labels越多,执行的时间就越长,效果越好。一般建议多角度,多条件录入,例如侧脸,正脸,远近高低,光照,衣服颜色,背景,角度,俯视平视仰视。
图片

最终运行效果:

截取1

图片

截取2
截取2

针对识别视频类型的类例的执行效果:

图片

图片
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:59:55  更:2022-01-12 00:00:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 22:45:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码