report_one-人脸检测收集-(智能信息处理)

该博客详细介绍了如何使用Python实现人脸识别的步骤,包括导入必要的库、定义视频显示窗体、打开摄像头、利用Haar级联分类器检测人脸,并在视频中标记人脸位置,同时保存未标记的图像帧。代码中还展示了如何调整窗口位置、设置延迟以及使用detectMultiScale函数检测人脸。此外,还提供了全局代码资源,包括对opencv和mediapipe库的使用。
摘要由CSDN通过智能技术生成

源代码来源:

E:\Python\Pycharm\MYCODE\venv\my_code\AIlearning\AI_Detector\peopleAI.py

这是我的一个路径

一.算法流程:

1.导入相关库

2.视频显示窗体定义

3.打开摄像头

4.人脸识别

         4.1.构建人脸分类器并应用分类器侦测出人脸

        4.2 .在视频图像中标记处检测到的人脸,并显示图像收集进度

        4.3.保存未被标记的的视频图像帧

二.CODE详解

part_one:导入相关库

import cv2#导入cv,获取摄像头及相关图像展示与处理
import numpy as np#导入数组模块
import mediapipe as mp#导入媒体模块,比如人脸侦测的解决方案及函数
import time#导入时间模块

插入视频:

part_two:视频显示窗体定义

cv2.namedWindow("w_img")#创建一个名叫w_img的窗体
cv2.setVideo("w_img","Videos")#设置窗口标题
cv2.moveWindows("w_img",0,0)#窗口移动到初始位置

part_three:打开摄像头

cap=cv2.VideoCaptrue(0)#调用设备0号摄像头

while(cap.isOpened()):#判断摄像头是否是打开
    status,frame=cap.read()#视频读取,并获取两个量,status,frame;
    #status:获取视频状态;frame;获取视频的图像帧

    #如果图像获取不成功,则直接退出循环,此次图像获取不成功
    if not status:
        break;

    cv2.imshow("w_img",frame)#w_img:窗体名称;frame:从视频获取到的图像帧;
    #将从视频获取到的图像帧放入名为w_img的窗体内

    #退出窗体
    key=cv2.waitKey(30)#窗体获取一定的延迟
    if key&0xFF==ord("q")
        break

#释放摄像头
cap.release()
#释放名为w_img的窗体
cv2.destoryWindow("w_img")

tips:在判断图像获取成功后要将图像转换成灰度

#图像转化成灰度,便于人脸识别;


    gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

part_four:

         4.1.构建人脸分类器并应用分类器侦测出人脸

        4.2 .在视频图像中标记处检测到的人脸,并显示图像收集进度

        4.3.保存未被标记的的视频图像帧

4.1.构建人脸分类器并应用分类器侦测出人脸

#构建一个人脸分类器

#获取一个级联分类器,后面是相应的分类文件
classifier=cv2.CascadeClassifier("E:/Python/Pycharm/MYCODE/venv/my_code/AIlearning/AI_Detector/haarcascade_frontalface_alt2.xml")


cap=cv2.VideoCaptrue(0)#调用设备0号摄像头

while(cap.isOpened()):#判断摄像头是否是打开
    status,frame=cap.read()#视频读取,并获取两个量,status,frame;
    #status:获取视频状态;frame;获取视频的图像帧

    #如果图像获取不成功,则直接退出循环,此次图像获取不成功
    if not status:
        break;
    
    #图像转化成灰度,便于人脸识别
    gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)


    #侦测人脸:它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用
    faces=classifier.detectMultiScale(gray_frame,1.2,3)



    cv2.imshow("w_img",frame)#w_img:窗体名称;frame:从视频获取到的图像帧;
    #将从视频获取到的图像帧放入名为w_img的窗体内

    #退出窗体
    key=cv2.waitKey(30)#窗体获取一定的延迟
    if key&0xFF==ord("q")
        break

#释放摄像头
cap.release()
#释放名为w_img的窗体
cv2.destoryWindow("w_img")

tips:opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示)

void detectMultiScale(
	const Mat& image,
	CV_OUT vector<Rect>& objects,
	double scaleFactor = 1.1,
	int minNeighbors = 3, 
	int flags = 0,
	Size minSize = Size(),
	Size maxSize = Size()
);


参数1:image--待检测图片,一般为灰度图像加快检测速度;

参数2:objects--被检测物体的矩形框向量组;
参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
        如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
        如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
        这种设定值一般用在用户自定义对检测结果的组合程序上;
参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为

        CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,

        因此这些区域通常不会是人脸所在区域;
参数6、7:minSize和maxSize用来限制得到的目标区域的范围。

4.2 .在视频图像中标记处检测到的人脸,并显示图像收集进度

 #视频图像中,标记出人脸

    #在得到人脸后faces后,标记出人脸(用矩形方框)
    for x,y,w,h faces:
          
    
            frame=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,255),5)
                
             
           
             cv2.putText(frame,"Image Number:%d"%counter,(x,y-30),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)




        

tips:cv2.rectangle函数运用

  #在图像识别中,需要地图像中某个特征进行标注,或者是显著出来。则可以使用:
             方法rectangle(目标图像,边框左上角坐标,边框右下角坐标,color=BGR三基色像素值, 
             thickness=矩阵边框的厚度)

tips:cv2.putText函数运用

cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)

各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细

其中字体可以选择

4.3.保存未被标记的的视频图像帧

#在绘制矩形之前保存图像
        #取出人脸,人脸是一个像素矩阵
 
           
        f_img=frame[y:y+h,x:x+w]
        f_img=cv2.resize(f_img,(256,256))
        cv2.imwrite("img/kuang/%d.jpg"%counter,f_img)#找到同级目录下的文件夹

三.全局代码资源:

import cv2
from cv2 import *
import numpy as np
import cv2
import mediapipe as mp
import time
mpFaceDetection=mp.solutions.face_detection
mpDraw=mp.solutions.drawing_utils
faceDetection=mpFaceDetection.FaceDetection(0.75)

# #视频采集
# #视频的显示窗体定义
# cv2.namedWindow("w_img")
# cv2.setWindowTitle("w_img","Video")#设置窗口标题
# cv2.moveWindow("w_img",0,0)#窗口移动到初始位置

cv2.namedWindow("w_img")
cv2.setWindowTitle("w_img","Video")
cv2.moveWindow("w_img",100,100)


classifier=cv2.CascadeClassifier("E:/Python/Pycharm/MYCODE/venv/my_code/AIlearning/AI_Detector/haarcascade_frontalface_alt2.xml")



#打开摄像头
cap=cv2.VideoCapture(0)

counter=0
#循环采集每一帧图像(保存,显示)
while(cap.isOpened()):
    status, frame = cap.read()#此处顺序不能乱,现有状态,后有图像
    #读取是否成功
    if not status:
        break
    #图像转化成灰度,便于人脸识别
    gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

    #侦测人脸,它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用
    faces=classifier.detectMultiScale(gray_frame,1.2,3)


    #视频图像中,标记出人脸
    # for face in faces:
    # #把视频帧图像显示在窗体上
    #     frame=cv2.rectangle(frame,(face[0],face[1]),(face[0]+face[2],face[1]+face[3]),(255,0,0),2)
    for x,y,w,h in faces:
        #在绘制矩形之前保存图像
        #取出人脸,人脸是一个像素矩阵
        f_img=frame[y:y+h,x:x+w]
        f_img=cv2.resize(f_img,(256,256))
        cv2.imwrite("img/kuang/%d.jpg"%counter,f_img)#找到同级目录下的文件夹


        counter+=1
        if counter>=20:
            break
        frame=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,255,0),5)
        # 显示采集数据进度
        cv2.putText(frame,"Image Number:%d"%counter,(x,y-30),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)

    if counter>=20:
        break
    cv2.imshow("w_img",frame)
    #退出窗体的操作
    key=cv2.waitKey(30)
    if key&0xFF==ord("q"):
        break
#释放摄像头
cap.release()
#释放窗体

cv2.destroyWindow("w_img")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值