https://zhuanlan.zhihu.com/p/59376027
https://www.bilibili.com/video/BV1ti4y147b7/?spm_id_from=333.337.search-card.all.click&vd_source=5111e604c67920cbd514149dc481888a
rl.png

来源

深圳大学的于仕琪老师发布的人脸检测库:libfacedetection。这是一个基于CNN的人脸检测的开源库,CNN模型已在C源文件中转换为stastic variales。源代码不依赖于任何其他库。在速度上还是精度上,都有巨大的优势,是目前已知开源库中最好用的一款。以下是于老师对这个开源库的介绍:

我们做出了一个决定:将我们的CNN人脸检测算法开源。
开源地址: https://github.com/ShiqiYu/libfacedetection

我们自己用C++语言实现了CNN的前向操作,专门针对人脸检测而实现。代码量少,使用方便。现在您可以下载源代码,在Windows、Linux、ARM、Android等所有支持C++编译的环境中编译使用!

这个开源算法库有如下优点:

速度快:在树莓派上可以实时进行人脸检测;有采用AVX2(x64平台)和NEON(ARM平台)指令集进行优化。
简洁:只有一个接口函数,把代码放到你的项目中,然后直接调用接口函数则可。
独立:不依赖Caffe、OpenBLAS、OpenCV等任何算法库。
兼容:可以在几乎所有平台上使用,只要有C++编译器则可。
小:代码仅1500行;INT8模型仅800KB!
另注意,项目License改用3-clause BSD License,注意不要违规哦!

算法在树莓派上可以单核实时运行。树莓派3B+,CPU是Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz,并不强大。在这种情况下的速度如下:
3b.jpg

Python(不推荐)

使用python来使用会降低效率和精度,可以网上找找封装
1、Python 运用libfacedetection实现超轻量级人脸检测(准确率高处理快)(2023)

2、libfacedetection的python封装(2019)

python代码测试

1、静态图片

# fd_image.py

from PyFaceDet import facedetectcnn
import cv2
import sys
path = sys.argv[1]
frame = cv2.imread(path)
faces = facedetectcnn.facedetect_cnn(path)
print( " ===faces: {}".format(faces) )

for face in faces:
    x=face[0]
    y=face[1]
    L=face[2]
    w=face[3]
    confidence=face[4]
    angle=face[5]
    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.rectangle(frame,(x,y),(x+L,y+w),(255,0,0),2)
    roi_color = frame[y:y+w,x:x+L]
    cv2.putText(frame,str(confidence),(x+5,y-5), font,1,(0,0,255),1)
                
cv2.imwrite('result.jpg', frame)
cv2.destroyAllwindows()

result.jpg

2、摄像头

# fd_camera.py

from PyFaceDet import facedetectcnn
import cv2

cap = cv2.VideoCapture(0)

while True :
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    faces = facedetectcnn.facedetect_cnn(frame)
    for face in faces:
        x=face[0]
        y=face[1]
        L=face[2]
        W=face[3]
        confidence=face[4]
        angle=face[5]
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.rectangle(frame,(x,y),(x+L,y+W),(255,0,0),2)
        roi_color = frame[y: y+W,x:x+L]
        cv2.putText(frame,str(confidence),(x+5,y-5), font,1,(0,0,255),1)
    cv2.imshow('frame', frame)

    if cv2.waitKey(1) & 0xff == ord('q'):
        break
cap.release()
cv2.destroyAllwindows()

face.jpg

发表评论