opencv-python——调用python库通过电脑摄像头实现人脸识别

文章目录

    • 1.利用opencv打开摄像头
    • 2.调用摄像头实现人脸识别
        • 图像识别位置信息
      • 函数讲解
        • 按键函数——cv2.waitkey()
        • 视频流获取——cv2.VideoCapture().read()

1.利用opencv打开摄像头

import cv2
# 1.打开摄像头,读取摄像头拍摄到的角度
vedio_capter = cv2.VideoCapture(0)
# 2.循环不停的获取摄像头的画面,并做进一步的处理
while True:
    # 2.1获取摄像头拍摄到的画面,并做进一步的处理
    ret, frame = vedio_capter.read() # ret是指是否返回画面true和false,frame是指读取到的视频的帧
    #  2.2 通过opencv把拍摄到的画面展示出来
    cv2.imshow('Vedio', frame)
    #  2.3 按q退出while循环,即退出程序
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capter.realease()

2.调用摄像头实现人脸识别


import os
import cv2
import face_recognition
'''
#人脸数据库
face_databases_dir = 'face_databases'
user_names = [] #存放用户姓名
user_faces_encodings = [] #存放用户脸部特征向量(一一对应)

files = os.listdir('face_databases')

for file_name in files:

'''
# 1.打开摄像头,读取摄像头拍摄到的角度
vedio_capter = cv2.VideoCapture(0)
# 2.循环不停的获取摄像头的画面,并做进一步的处理
while True:
    # 2.1获取摄像头拍摄到的画面,并做进一步的处理
    ret, frame = vedio_capter.read() # ret是指是否返回画面true和false,
    # 2.2从拍摄到的画面提取出人的脸部所在的区域
    face_locations = face_recognition.face_locations(frame)
    # 2.3 循环比那里人的脸部所在的区域并画框
    for top, right, bottom, left in face_locations:
        cv2.rectangle(frame, (left, top), (right, bottom), (0,255,0), 2)
    # 2.4 通过opencv把拍摄到的并花了框的画面展示出来
    cv2.imshow('Vedio', frame)
    # 2.5 按q退出while循环,即退出程序
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capter.realease()

运行结果:
opencv-python——调用python库通过电脑摄像头实现人脸识别_第1张图片

图像识别位置信息

face_locations是一个列表,存储了图像的位置坐标信息:

图像位置:
返回坐标为:左上角坐标右下角坐标
opencv-python——调用python库通过电脑摄像头实现人脸识别_第2张图片

函数讲解

按键函数——cv2.waitkey()

cv2.waitkey(delay)
  • 功能:等待键盘'key'键的输入
  • 参数:delay表示延时多少秒切换到下一帧图像
  • 返回值:键盘输入的字符串对应的ASCII码

代码示例:

cv2.waitKey(1) == ord(‘Key’)
  • 表示延时1ms切换到下一帧图像,对于视频而言
        0:只显示当前帧图像,相当于视频暂停
        key:要输入键盘的键

waitKey()–这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下 键,则接续等待(循环)
1.2 如下所示: while(1){ if(waitKey(100)==27)break; } 在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则继续循环
1.3 如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件

视频流获取——cv2.VideoCapture().read()

ret, frame = cv2.VideoCapture(0).read()
  • 功能:读取一帧的图片。
  • 参数:vedio对应的编号,一般都是0
  • 返回值ret:bool值
    True:读取到图片;
    False:没有读取到图片。
  • 返回值frame:当前帧的图片。

代码示例:

vedio_capter = cv2.VideoCapture(0)
ret, frame = vedio_capter.read() 
  • ret:是指这一帧是否有接收到画面
  • frame:这一帧的图片

参考文章:

  • waitKey()函数详解

你可能感兴趣的:(opencv)