python+opencv获取视频并做人脸识别

最近自学python,因为之前从事过人脸识别的项目,所以一开始也是从人脸识别入手,菜鸟一枚,大牛勿喷

在手机上装一个ip摄像头,通过wifi将视频流传到电脑上,起两个子线程,主线程解码,一个子线程作识别,另一个子线程编码图像保存到本地

 

main.py

__author__ = 'zhuzr'

import queue
import cv2
from view import *

video = "http://***.***.**.***:****/video"
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
frame_queue = queue.Queue(50)
face_queue = queue.Queue(50)


if __name__ == '__main__':

    detect  = Process(1, "Detect",  frame_queue, face_queue);
    saveimg = Process(2, "SaveImg", frame_queue, face_queue);
    #saveimg = Process(2, "SaveImg", frame_queue);

    saveimg.start()
    detect.start()

    while True:
        ret, img = capture.read()
        frame_queue.put(img)
        key = cv2.waitKey(1)
        cv2.imshow('Video', img)
        if key == ord('q'):
            break


 

将人脸和人脸当时所在的场景分别保存,face部分采用的是github上https://github.com/yinchuandong/opencv-face.git的方法

view.py

__author__ = 'zhuzr'

import cv2
import numpy as np
import math
import threading
import time
from face import FaceDetect

#num = 0

class Process (threading.Thread):   #继承父类threading.Thread
    def __init__(self, threadID, name, queue, face):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.queue = queue
        self.face = face
        self.num = 0
    def run(self):                   #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
        print ("Starting " + self.name)
        if(self.name == "SaveImg"):
            SaveImg(self.queue, self.face, self.num)
        elif (self.name == "Detect"):
            Detect(self.queue, self.face)
        else:
            print("unKnow Process!")
        print ("Exiting " + self.name)


def SaveImg(queue, face, num):
    while True:
        if(1 == face.empty()):
            time.sleep(1)
        else:
            frame, img   = face.get()
            cv2.imwrite('D:\\test\\frame%s.jpg' % (str(num)), frame)
            cv2.imwrite('D:\\test\\face%s.jpg' % (str(num)), img)
            num = num + 1

def Detect(queue, face_queue):
    model = FaceDetect()
    while True:
        if(1 == queue.empty()):
            time.sleep(1)
        else:
            frame = queue.get()
            imgArr = model.detect(frame)
            for img in imgArr:
                whole = [frame, img]
                face_queue.put(whole)

 

你可能感兴趣的:(python+opencv获取视频并做人脸识别)