简单的在线人脸检测实现

1、概述

      最近看到一个很简洁的人脸检测代码,很感兴趣,想尝试是不是可以在线对人脸检测并对人数统计,比如在商场的出入口,学校的出入口等,因为我本身对人脸检测研究少,但知道有很多人脸检测方法。写这个博客是为了记录自己的实验,后续可能继续会基于其他人脸检测方法实现自己的想法。本文基于前辈文章暂时实现实时访问摄像头IP并尝试在线检测人脸。

2、代码实现

      首先要安装两个库:

opencv-python
cvlib

      原代码:

import cv2
import cvlib as cv

img = cv2.imread('000000011699.jpg')
cv2.imshow('img', img)
cv2.waitKey()
faces, confidences = cv.detect_face(img)
# 循环遍历检测到的人脸并添加边界框
for face in faces:
    (startX, startY) = face[0], face[1]
    (endX, endY) = face[2], face[3]
    # 在人脸上绘制矩形边界框
    cv2.rectangle(img, (startX, startY), (endX, endY), (0, 255, 0), 2)
    # 显示结果
cv2.imshow('img_detect', img)
cv2.waitKey()

      检测图片为:
                                                     在这里插入图片描述
      检测结果为:
                                                     在这里插入图片描述
      人脸在线检测代码:


from threading import Thread
from collections import deque
import cv2
import cvlib as cv
#################################################
# 摄像头IP地址
url='rtsp://admin:[email protected]'

def producer(cap, q):
    while True:
        print('producer execuation')
        if cap.isOpened():
            ret, img = cap.read()
            q.append(img)

def consumer(q):
    while True:
        if len(q) == 0:
            pass
        else:
            img = q.pop()
            print('consumer execuation')
            faces, confidences = cv.detect_face(img)
            # 循环遍历检测到的人脸并添加边界框
            for face in faces:
                (startX, startY) = face[0], face[1]
                (endX, endY) = face[2], face[3]
                # 在人脸上绘制矩形边界框
                cv2.rectangle(img, (startX, startY), (endX, endY), (0, 255, 0), 2)
            # 显示结果
            cv2.imshow('img', img)
            cv2.waitKey(1)


if __name__ == '__main__':

    frame_deque = deque(maxlen=10)
    cap = cv2.VideoCapture(url)
    p1 = Thread(target=producer, args=(cap, frame_deque))
    p2 = Thread(target=consumer, args=(frame_deque,) )
    p1.start()
    p2.start()
    p1.join()
    p2.join()

3、后记

      由于手上测试的环境是安装在天花板上的鱼眼摄像头,成像图片为俯视图,人脸在其中占比较小,而自己在单张测试时的图片,人脸清晰、在图像中占比较大而且是正视图;自己在线跑起来发现检测不到人脸,记录于此,后续继续研究。

发布了62 篇原创文章 · 获赞 83 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhou4411781/article/details/102629527