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

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()

运行结果:
在这里插入图片描述

图像识别位置信息

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

图像位置:
返回坐标为:左上角坐标右下角坐标
在这里插入图片描述

函数讲解

按键函数——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:这一帧的图片

参考文章:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值