ubuntu20.04系统、jupyter - notebook - python3语言、利用opencv的相关性“cv.TM_CCOEFF_NORMED”进行不同人脸识别:

第一步模板制作

import cv2 as cv

def main():
    
    cap = cv.VideoCapture(0)

    while cap.isOpened():

        # 获取视频的一帧图像   若获取成功则ret为True,否则返回False     Frame:获取到的某一帧的图像
        ret,img = cap.read()    

        gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

        # 实例化检测器
        face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
        face_cas.load("haarcascade_frontalface_default.xml")

        # 人脸检测
        face_rects = face_cas.detectMultiScale(gray,scaleFactor = 1.2,minNeighbors = 3, minSize = (32,32))
        # face_rects = face_cas.detectMultiScale(gray)

        for facerect in face_rects:
            # 找到的人脸左上角座标原点  人脸的宽、高。
            x,y,w,h = facerect
            # 画矩形
            cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
#             cv.imwrite("路径/文件名.格式",保存的图片) 
            roi_face = img[y:y+h,x:x+w]
            cv.imwrite("face_file/XXX_XXX.jpg",roi_face)
            
        cv.imshow("face",img)
        key = cv.waitKey(500)
        if key == 27:
            break
    cap.release()
    cv.destroyAllWindows() 

第二步人脸识别

import cv2 as cv
import os

referImg_list = []
for filename in os.listdir("./face_file/"):
    referImg_list.append("./face_file/" + filename)

referImg_list.remove('./face_file/.ipynb_checkpoints')

def sumALL(x):
    sum = 0
    for r in range(len(x)):
        for c in range(len(x[0])):
            sum = sum + x[r][c]

    return sum

def main():
    
    cap = cv.VideoCapture(0)
    
    while cap.isOpened():

        # 获取视频的一帧图像   若获取成功则ret为True,否则返回False     Frame:获取到的某一帧的图像
        ret,img = cap.read()    

        gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

        # 实例化检测器
        face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
        face_cas.load("haarcascade_frontalface_default.xml")

        # 人脸检测
        face_rects = face_cas.detectMultiScale(gray,scaleFactor = 1.2,minNeighbors = 3, minSize = (32,32))

        for facerect in face_rects:
            # 找到的人脸左上角座标原点  人脸的宽、高。
            x,y,w,h = facerect
            # 画矩形
            cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
#            cv.imwrite("路径/文件名.格式",保存的图片) 
            roi_face = img[y:y+h,x:x+w]
#             cv.imwrite("./face_file/zhaojm2.jpg",roi_face)
            for faces in referImg_list:
                face = cv.imread(faces,flags=3)
                res = cv.matchTemplate(face,roi_face,cv.TM_CCOEFF_NORMED)
                x,y = res.shape
                z = x * y
                agv = sumALL(res)/z
                if agv > 0.35:
                    print(faces)
        cv.imshow("face",img)        
        key = cv.waitKey(500)
        if key == 27:
            break
    cap.release()
    cv.destroyAllWindows()

if __name__ == '__main__':
    try:
        main()
    except:
        print("摄像头打开失败!")

“haarcascade_frontalface_default.xml” 可通过百度可得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhaojieming1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值