Kingbecameadragon的文章

  • python实现对人脸的实时监测

    使用python实现对人脸的实时监测并将人脸保存到本地文件夹下1、先导入库【可能需要下载一下dlib包,注意一下版本是否对应】
    #导入库import cv2 import dlib import numpy as np2、开始编写#定义脸部特征检测器detector = dlib.getfrontal_face_detector() #得到人脸的正面cap = cv2.VideoCapture(0) #0代表打开摄像头frame_count = 0 #检测的帧数face_count = 0 #每一帧检测的人脸数margin = 0.2 # 边距比例while True:ret, frame = cap.read() #从摄像头获取的视频文件中读取第一帧if (ret != True): #判断摄像头是否正常打开并读取视频print(‘没有捕获到图像,请检查摄像头工作情况!’)breakinput_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #BGR转为RGBframe_count +=1 #帧数加一img_h,img_w, = np.shape(input_img) #获取图像的尺寸img_h:高,img_w:宽,第三个代表通道detected = detector(frame,1)#对当前帧检测faces = [] #存放当前帧中的脸部数量1代表的是上采样if len(detected) > 0: #当前帧检测到脸部,至少检测到一个 for i, d in enumerate(detected): #enumerate枚举函数,一个个的进行检测 face_count += 1#人脸数增加 # 脸部图像坐标与尺寸,分别表示左上角坐标,右下角坐标,和长宽,加一代表的是: x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height() # 用边距做调整 #限制最小是0 xw1 = max(int(x1 - margin * w), 0) yw1 = max(int(y1 - margin * h), 0) #img_w-1是:限制最大的就是img-1 xw2 = min(int(x2 + margin * w), img_w - 1) yw2 = min(int(y2 + margin * h), img_h - 1); # 脸部图像坐标 face = frame[yw1:yw2 + 1, xw1:xw2 + 1, :]#加一是为了保存边界 file_name = "./dataset/valid/one/" + str(frame_count) +'_one'+str(i) + '.jpg'#文件路径 cv2.imwrite(file_name,face) #绘制人脸边框 cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)#显示当前帧cv2.imshow("Face Detector", frame) # 按回车键终止视频检测if cv2.waitKey(1)&0xFF == 13: #1代表1ms,13代表回车键,27代表ESC键,ord('q') break3、打印运行结果print(‘已经完成了 {0} 帧检测,保存了 {1} 幅脸部图像’.format(frame_count, face_count))4、关闭摄像头和窗口cap.release()cv2.destroyAllWindows()
    0  留言 2020-10-14 14:36:47
eject