一个小的示例包

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通过选择人脸来提高人脸检测速度 只考虑子区域的检测算法 检测到)而不是整个帧。在

有三种预定义的主要例程可供您使用:

  1. 哈尔级联分类器
  2. 联合叶栅
  3. 多任务卷积神经网络

当主例程检测不到人脸时,实现将切换到 运行模板匹配算法的转义例程。在

此外,有五种可能的不同的混合脸组合 检测方法,除了一种非混合方法外,只使用主 例行公事。在

  1. 仅常规程序(N)
  2. 固定边距的常规程序(FM)
  3. DM(常规动态余量)
  4. 常规程序和逃生程序(NTM)
  5. 固定边距的常规程序和逃逸程序(FMTM)
  6. 带动态裕度的常规程序和逃逸程序(DMTM)

还支持三种视频源:

  1. 网络摄像头
  2. Kinect公司
  3. 视频文件

例如使用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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这个循环打印1020之间的所有值?我想让它打印出可以被5整除的值   java如何在JTable中集中单元格   java无法通过一个键从hashmap获取对象,该键具有相同的hashcode,并且两个键等于()   不兼容的类型?JAVA   将字符串开头与空格匹配时java replaceAll的正则表达式混淆结果   java为非java应用程序创建jar文件。类文件   java无法从另一个普通Http Servlet访问筛选器Servlet的会话属性   java Ejb,第二个方法中的错误回滚第一个方法   swing java操作侦听器在菜单上,而不是在菜单项上   分析文件时出错:分析文件时出错:无法在Java的XSSF中分析excel文件   java将实体注入到ViewScope Bean中   java如何关闭终端而不终止正在运行的jar文件进程   爪哇力下传   java不能隐式地将[T]强制转换为AT,其中[T]扩展为AT   java Spring项目在jsp页面中显示mysql表数据   java在创建新实例SQLITE时出错