opencv人脸识别(python)

先上几个cv2模块的函数

1.读取保存图片

import cv2 as cv
img=cv.imread("img.jpg")
cv.imshow("read",img)
cv.imwrite("img2.jpg",img)
cv.waitKey(0)
cv.destroyAllWindows()

2.改变图片尺寸

import cv2 as cv
img=cv.imread("img.jpg")
resize_img=cv.resize(img,dsize=(450,250))
cv.imshow("resize",resize_img)
print('未修改',img.shape)
print('修改后',resize_img.shape)
cv.destroyAllWindows()

3.转换灰度图片

import cv2 as cv
img= cv.imread("img.jpg")
gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow("gray",gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

4.绘制矩形

import cv2 as cv
img= cv.imread("img.jpg")
gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow("gray",gray_img)
cv.imwrite("gray_img.jpg",gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

开始人脸识别(确保电脑有摄像头)

1.先获取图片

import cv2 as cv
cap=cv.VideoCapture(0)#参数为0调用默认摄像头,为视频路径读取视频
num=1
while(cap.isOpened()):
    flag,Vshow=cap.read()
    cv.imshow("Capture_Test",Vshow)
    k=cv.waitKey(1)
    if k==ord('s'):
        cv.imwrite('ykc/'+str(num)+'.ykc'+'.jpg',Vshow)
        print('success to save'+str(num)+'.ykc'+'.jpg')
        print('-------------------------------')
        num+=1
    elif k==ord('q'):
        break
cap.release()
cv.destroyAllWindows()

2.训练数据

import os
import cv2 as cv
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=cv.CascadeClassifier('D:/BaiduNetdiskDownload/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
    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=int(os.path.split(imagePath)[1].split('.')[0])
        for x,y,w,h in faces:
            ids.append(id)
            facesSamples.append(img_numpy[y:y+h,x:x+w])
    print('id:',id)
    print('fs:',facesSamples)
    return facesSamples,ids


if __name__=='__main__':
    path='./ykc'
    faces,ids=getImageAndLabels(path)
    recognizer=cv.face.LBPHFaceRecognizer_create()
    recognizer.train(faces,np.array(ids))
    recognizer.write('ykc.yml')

3.人脸识别

import cv2 as cv
import os
import urllib
import urllib.request
from PyQt5.QtWidgets import QWidget, QApplication,QMessageBox

recogizer=cv.face.LBPHFaceRecognizer_create()
recogizer.read('ykc.yml')
names=[]
warningtime=0

def warning():
    # app = QApplication([])
    # w = QWidget()   # 没有父类的widget将被作为窗口使用
    # reply = QMessageBox.warning(w, '警告', '有坏银')
    # app.exec()
    print('有坏银')
    
def face_detect(img):
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    face_detector=cv.CascadeClassifier('D:/BaiduNetdiskDownload/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
    face=face_detector.detectMultiScale(gray,1.1,5,cv.CASCADE_SCALE_IMAGE,(100,100),(300,300))
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
        ids,confidence=recogizer.predict(gray[y:y+h,x:x+w])
        if confidence >80:
            global warningtime
            warningtime+=1
            if warningtime>100:
                warning()
                warningtime=0
            cv.putText(img,'unknow',(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)
        else:
            cv.putText(img,str(names[ids-1]),(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)
    cv.imshow("result",img)

def name():
    path = './ykc/'
    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=cv.VideoCapture(0)
name()
while True:
    flag,frame=cap.read()
    if not flag:
        break
    face_detect(frame)
    if ord('q')==cv.waitKey(10):
        break
cv.destroyAllWindows()
cap.release()

warning()函数还有优化的地方,我是想在没有被录入的人脸进入摄像头多次后弹出一个警告的对话框,但是对话框弹出后,程序就终止运行了,所以目前只能print()提示,效果不是很好

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用OpenCV进行人脸识别,你可以按照以下步骤来实现: 首先,在项目文件夹下创建一个脚本文件。 然后,导入OpenCV库并指定待检测的图片和人脸识别模型的路径。你可以使用以下代码进行预准备操作: import cv2 filename = 'OIP-C.jpg' pathface = 'B:\\Python\\Practic\\Face recognition\\cascades\\haarcascade_frontalface_default.xml' 接下来,定义一个函数来进行人脸检测。在这个函数中,你需要加载人脸识别模型并读取待检测的图片。然后,将图片转换为灰度图像,使用人脸识别模型对其进行检测,并将检测到的人脸位置标注在图像上。最后,显示标注后的图像,并保存结果图像。 def detect(filename): face_cascade = cv2.CascadeClassifier(pathface) img = cv2.imread(filename) 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.namedWindow('Face recognition') cv2.imshow('Face recognition', img) cv2.imwrite('./Try.jpg', img) cv2.waitKey(0) 最后,调用detect函数并传入待检测的图片文件名即可进行人脸识别。 detect(filename) 以上就是使用OpenCV进行人脸识别Python代码。请确保你已正确安装了OpenCV库,并将人脸识别模型文件(haarcascade_frontalface_default.xml)放置在正确的路径下。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于OpenCV-Python实现的人脸识别](https://blog.csdn.net/weixin_52978638/article/details/124287279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值