人脸识别

  • 前言
  • 一、人脸识别是什么?
  • 二、人脸识别的学习
  • 1.先是学习摄像头的调用
  • 2. 不同的花样
  • 2.1
  • 2.2
  • 2.3
  • 3、视频保存
  • 4、人脸识别
  • 总结



前言

人脸识别技术可以在很多地方运用得到,比如进入小区,比如一些学校的学生安检,手机解锁等等


提示:以下是本篇文章正文内容,下面案例可供参考

一、人脸识别是什么?

就是通过代码然后视像头会识别出我们人脸的位置并将他标注起来便于我们进行操作和分析或者判断。


二、人脸识别的学习

1.先是学习摄像头的调用

代码:

import cv2
import numpy as np

#实例化一个摄像头对象
sxt = cv2.VideoCapture(0) # 调取第一个摄像头并返回
while(sxt.isOpened()):  # 如果这个摄像头已经被打开
    ret,frame = sxt.read() # 用调用摄像头并打开读取功能
    #
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) #将gbg的转成bgr
 
    cv2.imshow("frame",gray)
    if cv2.waitKey(1)==ord("q"):
        break
sxt.release()       
cv2.destroyAllWindows()

2. 不同的花样

2.1

代码如下(示例)

import cv2
import numpy as np

#实例化一个摄像头对象
sxt = cv2.VideoCapture(0) # 调取第一个摄像头并返回
while(sxt.isOpened()):  # 如果这个摄像头已经被打开
    ret,frame = sxt.read() # 用调用摄像头并打开读取功能
    #
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    # 设定绿色的阈值
    lower_green = np.array([35,43,46])
    upper_green = np.array([77,255,255])
    
    # 构建掩膜
    mask = cv2.inRange(hsv,lower_green,upper_green)
    
    #进行位运算
    res = cv2.bitwise_and(frame,frame,mask = mask)
    
    # 根据阈值
    
    cv2.imshow("frame",res)
    if cv2.waitKey(1)==ord("q"):
        break
sxt.release()       
cv2.destroyAllWindows()

代码效果如下

javacv opencv 人脸对比 opencv人脸识别流程_人脸识别

2.2

代码如下(示例)

import cv2
import numpy as np

#实例化一个摄像头对象
sxt = cv2.VideoCapture(0) # 调取第一个摄像头并返回
while(sxt.isOpened()):  # 如果这个摄像头已经被打开
    ret,frame = sxt.read() # 用调用摄像头并打开读取功能
    #
    h,w,c= frame.shape
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    ret,binary = cv2.threshold(gray,50,255,0)
    canny=cv2.Canny(binary,50,100)
    #
    cv2.imshow("frame",canny)
    if cv2.waitKey(1)==ord("q"):
        break
sxt.release()       
cv2.destroyAllWindows()

代码效果如下

javacv opencv 人脸对比 opencv人脸识别流程_python_02


想必大家都觉得非常酷炫了,可以自己动手尝试起来自己玩出自己的花样呢

2.3

代码如下

import cv2
cap = cv2.VideoCapture('caruav.mp4')
while(cap.isOpened()):
 # 获取一帧
    ret, frame = cap.read()
    frame=cv2.Canny(frame,50,200)
    cv2.imshow('frame', frame) 
    if cv2.waitKey(25) == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

代码效果如下

javacv opencv 人脸对比 opencv人脸识别流程_python_03

3、视频保存

代码如下(这个代码我是从的博主那边借鉴来的细看的花话可以点击访问视频保存详细)

import cv2
from datetime import datetime

FILENAME = 'myvideo.avi'
WIDTH = 1280
HEIGHT = 720
FPS = 24.0

# 必须指定CAP_DSHOW(Direct Show)参数初始化摄像头,否则无法使用更高分辨率
cap = cv2.VideoCapture(0)
# 设置摄像头设备分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
# 设置摄像头设备帧率,如不指定,默认600
cap.set(cv2.CAP_PROP_FPS, 24)
# 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案
fourcc = cv2.VideoWriter_fourcc(*'XVID')

out = cv2.VideoWriter(FILENAME, fourcc, FPS, (WIDTH, HEIGHT))

start_time = datetime.now()

while True:
    ret, frame = cap.read()
    if ret:
        out.write(frame)
        # 显示预览窗口
        cv2.imshow('Preview_Window', frame)
        # 录制5秒后停止
        if (datetime.now()-start_time).seconds == 5:
            cap.release()
            break
        # 监测到ESC按键也停止
        if cv2.waitKey(3) & 0xff == 27:
            cap.release()
            break

out.release()
cv2.destroyAllWindows()

4、人脸识别

代码如下

import cv2
import numpy as np


sxt = cv2.VideoCapture(0) #读取摄像头
face_cascade=cv2.CascadeClassifier(r"D:\Python374\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml") #告诉OpenCV使用人脸识别分类器
eye_cascade=cv2.CascadeClassifier(r"D:\Python374\Lib\site-packages\cv2\data\haarcascade_eye.xml") #告诉OpenCV使用人脸识别分类器中的眼睛识别
smile_cascade=cv2.CascadeClassifier(r"D:\Python374\Lib\site-packages\cv2\data\haarcascade_smile.xml") #告诉告诉OpenCV使用人脸识别分类中的微笑识别

while(sxt.isOpened()):  # 如果这个摄像头已经被打开
    ret,frame = sxt.read() # 用调用摄像头并打开读取功能
    h,w,c=frame.shape
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #转化为灰度图处理,加快处理速度
    faces=face_cascade.detectMultiScale(gray,1.3,11,0) # 需要操作的图,1.3是越快处理越快 11是提高他的检测准确度,越高越精确
    for (x,y,w,h) in faces:
        frame = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,255),4) # x,y是左上角的点,x+w,y+h是右下角的点,然后是颜色,最后是粗细
        eyes=eye_cascade.detectMultiScale(gray,1.2,5,0)
        for (ex,ey,ew,eh) in eyes:
            frame = cv2.rectangle(frame,(ex,ey),(ex+ew,ey+eh),(255,255,0),3)
        smiles=smile_cascade.detectMultiScale(gray,scaleFactor=1.16,minNeighbors=65,minSize=(25,25),flags=cv2.CASCADE_SCALE_IMAGE)
        for (ex,ey,ew,eh) in smiles:
            cv2.rectangle(gray,(ex,ey),(ex+ew,ey+eh),(0,255,255),2)
            cv2.putText(frame,"smile",(x,y-7),3,1.2,(0,0,255),2,cv2.LINE_AA)
    cv2.imshow("img",frame)
    if cv2.waitKey(1)==ord("q"): # 按q退出
        break
sxt.release() 
cv2.destroyAllWindows()

结果我就不展示给大家了,毕竟我太丑了,希望大家都能爱上图像处理。

总结

提示:这里对文章进行总结:
人脸识别学起来是比较难的,大家一定要多花点心思,不懂得地方多问看多,打下坚实的基础为以后的学习做好准备。