一个小的示例包
mroi-fd-amenji的Python项目详细描述
安装
这个项目是在python版本3.7.4
上开发和测试的。请检查一下
您的python版本使用python --version
。如果你的系统有不同的
python版本,可以考虑使用
pyenv(见Using pyenv)
首先,将cd
克隆到存储库中:
git clone https://gitlab.com/ailabuser/bacha_hybrid_mroi_face_detection
cd bacha_hybrid_mroi_face_detection
在Windows上:
创建python虚拟环境:
^{pr2}$激活虚拟环境(deactivate
)以停用虚拟环境
环境):
workon venv
在保持虚拟环境的同时安装所有必需的依赖项 活动:
pip install -r requirements.txt
在Linux上:
创建python虚拟环境:
virtualenv -p /usr/bin/python3 venv
激活虚拟环境(deactivate
)以停用虚拟环境
环境):
source venv/bin/activate
在保持虚拟环境的同时安装所有必需的依赖项 活动:
pip install -r requirements.txt
使用pyenv(Linux、Windows、MacOS)
如果您的python版本不是3.7.4,那么您可能需要使用
pyenv。安装pyenv
之后,
安装特定的python版本。在Linux上,可以通过运行
以下命令:
env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.4
然后,创建一个虚拟环境:
pyenv virtualenv 3.7.4 bacha_mroi_face_detection
您可以使用pyenv
激活虚拟环境,如下所示:
pyenv activate bacha_mroi_face_detection
说明
基于混合边缘感兴趣区域(MROI)的人脸检测技术 接近。从实现运行一个主节点的角度来看,它是混合的 例程检测人脸,但当主例程 失败。使用MROI通过选择人脸来提高人脸检测速度 只考虑子区域的检测算法 检测到)而不是整个帧。在
有三种预定义的主要例程可供您使用:
- 哈尔级联分类器
- 联合叶栅
- 多任务卷积神经网络
当主例程检测不到人脸时,实现将切换到 运行模板匹配算法的转义例程。在
此外,有五种可能的不同的混合脸组合 检测方法,除了一种非混合方法外,只使用主 例行公事。在
- 仅常规程序(N)
- 固定边距的常规程序(FM)
- DM(常规动态余量)
- 常规程序和逃生程序(NTM)
- 固定边距的常规程序和逃逸程序(FMTM)
- 带动态裕度的常规程序和逃逸程序(DMTM)
还支持三种视频源:
- 网络摄像头
- Kinect公司
- 视频文件
例如使用Haar级联分类器作为FM的主例程 方法使用来自网络摄像头的图像帧时,可以在 Linux(当虚拟环境处于活动状态时):
./main.py webcam haar fm
您可以在不使用任何参数的情况下运行该程序来打印帮助消息(或
为它提供-h
),以获取有关程序用法的更多信息。在
示例
使用混合MROI实现人脸检测
为了使用混合MROI人脸检测算法
检测器,您需要创建继承自FaceDetector
的子类,并且
重写其detect
方法。实现需要detect
方法
若要返回人脸ROI或None
;否则,将使用混合MROI人脸检测器
可能会失败。在
下面是一个示例,其中我们使用python implementation of MTCNN:
importcv2frommtcnn.mtcnnimportMTCNNfromroutinesimportFaceDetectorclassMROI_MTCNN(FaceDetector):def__init__(self):# The main routine face detector object used to detect faces.fd_obj=MTCNN()# Initialize using base class constructor. We pass the face detector# object (fd_obj) and use the MROI with fixed-margin approach with# a template matching escape routine.super().__init__(fd_obj,mode=FaceDetector.FMTM)@staticmethoddefdetect(fd_obj,image):rgb_src=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)result=fd_obj.detect_faces(rgb_src)iflen(result)>0:returnresult[0]['box']else:returnNone
在内部,这基本上就是预先定义的hyrbid MROI面部探测器
(即,MROI_HaarCascade
和{
fromroutinesimportMROI_HaarCascade,MROI_MTCNN
运行面部探测器
要使用人脸检测器,只需实例化混合MROI人脸检测器
通过调用它的run
方法来运行它。下面是一个简单的脚本,它运行
面部探测器,并将图像输入厕所p
fd=MROI_MTCNN()fd.run()# This runs the face detector in the background.whileTrue:ret,frame=cv2.VideoCapture("/path/to/video/file")# No more images; exit.ifnotret:break# Feed the image into the face detector.fd.input_image(frame)# Get the ROI containing the face. This will be `None` if no face is# detected.ROI=fd.get_face_region()ifROIisnotNone:x,y,w,h=ROIcv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)cv2.imshow("MROI_MTCNN Face Detector",frame)ifcv2.waitKey(1)==ord('q'):break
- 项目
标签: