https://zhuanlan.zhihu.com/p/59376027
https://www.bilibili.com/video/BV1ti4y147b7/?spm_id_from=333.337.search-card.all.click&vd_source=5111e604c67920cbd514149dc481888a
来源
深圳大学的于仕琪老师发布的人脸检测库: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,并不强大。在这种情况下的速度如下:
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()
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()