人脸视频检测

#视频人脸检测

#coding:utf-8

import pytesseract as pyact
import cv2
import dlib
import datetime

# 获取人脸关键点检测器
predictor = dlib.shape_predictor(r"D:\models\lydirect\xmlfiles\shape_predictor_68_face_landmarks.dat")

# 使用默认 人脸识别器模型
detector = dlib.get_frontal_face_detector()

def get_time():

    return datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S-%f')


def ocr_rec():
    path = r"C:\Users\ly\Desktop\shortcut.png"
    src=cv2.imread(path)
    text=pyact.image_to_string(src)
    print(text)

#opencv 版本的人脸检测
def face_rec():

    filepath = r"C:\Users\ly\Desktop\pic\timg.jpg"
    img=cv2.imread(filepath)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    classifer = cv2.CascadeClassifier(r"D:\models\lydirect\xmlfiles\lbpcascade_frontalface.xml")
    color = (0,255,0)

    faceRects = classifer.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))

    if(len(faceRects)):
        for faceRect in faceRects:
            x,y,w,h = faceRect
            cv2.rectangle(img,(x,y),(x+w,y+h),color,2)
    cv2.imshow("image", img)  # 显示图像
    c = cv2.waitKey(0)

#dlib版本的人脸检测 68个特征点的检测 single pic
def dlib_face_recogn():
    # filepath = r"D:\models\lydirect\pics\2008_001322.jpg "
    filepath = r"D:\models\lydirect\pics\timg.jpg "
    img=cv2.imread(filepath)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    # 人脸的识别器模型
    detector = dlib.get_frontal_face_detector()

    # 先通过分类器判断人脸个数
    start = datetime.datetime.now()
    dets = detector(gray,1)
    end = datetime.datetime.now()
    print("识别时间:", end - start)

    for face in dets:
        # 取出一张人脸 跌入检测器找到标记点
        # print(face.left(),face.top(),face.right(),face.bottom())

        pt1 = (face.left(),face.top())
        pt2 = (face.right(),face.bottom())


        cv2.rectangle(img,pt1,pt2,(255,0,0),1)

        start = datetime.datetime.now()
        shape = predictor(img, face)
        end = datetime.datetime.now()
        print("关键点时间:", end - start)


        for pt in shape.parts():
            pt_pos = (pt.x,pt.y)
            cv2.circle(img,pt_pos,1,(0,255,0),1)
        # cv2.imshow("image",img)
        # cv2.waitKey(0)
    pass


#视频版dlib 人脸检测
def video_dlib_face_recogn(img):

    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dets = detector(gray,1)
    for face in dets:

        left = face.left()
        top = face.top()
        right = face.right()
        bottom = face.bottom()
        if(right-left>100):

            cv2.rectangle(img,(left,top),(right,bottom),(0,255,0),1)

            points=predictor(img,face)

            for point in points.parts():
                per_point = (point.x,point.y)
                cv2.circle(img,per_point,3,(0,0,255),1)
            cv2.imshow("image",img)
            cv2.waitKey(1)
    pass

def start_video_detect():
    video_path = ""
    # cap = cv2.VideoCapture(r"D:\models\lydirect\pics\2020_02_05_19_34_IMG_2936.MP4")
    cap = cv2.VideoCapture(0)
    # video_len = cap.get(7)
    while(1):
        ret,img = cap.read()
        video_dlib_face_recogn(img)

        # if(ret>=video_len):
        #     break

        # if(cv2.waitKey()=='q'):
        #     break

if __name__ == '__main__':
    start=datetime.datetime.now()
    print(start)
    # dlib_face_recogn()
    # 开启检测
    start_video_detect()
    end = datetime.datetime.now()
    print(end)
    print("总体时间:",end-start)

    # face_rec()

效果

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { CvCapture* capture=0; /*初始化一个视频捕获操作。告诉底层的捕获api我想从Capture1.avi中捕获图片, 底层api将检测并选择相应的解码器并做好准备工作*/ capture = cvCaptureFromFile( "F:\\1.avi"); //设置要读的视频(avi格式) static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml",0,0,0); if( !cascade || !capture ) return -1; storage = cvCreateMemStorage(0); /*创建一个窗口,用“Video”作为窗口的标识符*/ cvNamedWindow( "Video",1); /*如果初始化失败,那么capture为空指针,程序停止,否则进入捕获循环*/ if( capture ) { for(;;) { IplImage* frame = cvQueryFrame( capture ); IplImage* img = NULL; CvSeq* faces; if( !frame ) break; img = cvCloneImage(frame); img->origin = 0; if( frame->origin ) cvFlip(img,img); cvClearMemStorage( storage ); //目标检测 faces = cvHaarDetectObjects( img, cascade, storage,1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(20, 20) ); for( int i = 0; i < (faces ? faces->total : 0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); cvRectangle( img, cvPoint(r->x,r->y), cvPoint(r->x+r->width,r->y+r->height), CV_RGB(255,0,0), 1); } cvShowImage( "Video", img ); //设置每帧图像的间隔 Sleep(50); /*如果你敲了键盘,就退出程序,否则继续捕获下一帧*/ if( cvWaitKey(10)>0 ) break; } /*退出之前结束底层api的捕获操作,比如会使得别的程序无法访问已经被它们打开的文件*/ cvReleaseCapture( &capture;); } /*销毁窗口*/ cvDestroyWindow("Video"); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值