面向python的facedetect库(最初由wave++“yuri d'elia”<wavexx@threg.org>提供)

facedetectp的Python项目详细描述


FaceDetect:一个用于批处理的简单人脸检测器
===============================

`FaceDetect`是一个用于批处理的简单人脸检测器。它回答了
基本问题:"图像中是否有人脸?"并返回一个exit
代码或标准输出中每个检测面的坐标。

同时随着时间的推移逐步改进
检测算法。

"facedetect"用于fgallery\u等软件中,以改进缩略图
切割区域,因此面始终居中。

path/to/input.jpg
289 139 56
295 283 55 55


output:
x,y,width height
x1,y1,width1,height1



输出值是x y坐标**(从左上角开始)**,
,后跟宽度和高度。为了调试,可以使用`-o``标志检查直接覆盖在源图像上的面部位置:

./bin/facedetect-o outfile.jpg path/to/input.jpg

使用"q"开关并检查退出状态:


./bin/facedetect-q path/to/input.jpg
echo$?

退出状态**0表示至少存在一个面**。退出状态
为2表示无法检测到任何面(1保留为失败)。

只需输出面中心的x-y坐标::

./bin/facedetect--center path/to/image.jpg
317167
322310



`--best``将尝试选择焦点和/或
帧中心的面。

图:doc/max best.jpg
:align:center


所选的脸用黄色突出显示。

同时计算速度显著加快。



示例
——


对有面和无面图像进行排序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~代码:

for file in path/to/pictures/*.jpg;do
name=$(basename"$file")
if./bin/facedetect-q"$file";然后
mv"$file"path/to/people/$name"
else
mv"$file"path/to/landscape/$name"
fi



所有使用"mogrify"的源图像(来自imagemagick):对于路径/to/pictures/*.jpg中的文件,do
name=$(basename"$file")
out="path/to/fuldized/$name"
cp"$file""$out"
./bin/facedetect"$file",同时读取x y w h;do
mogrify-重力西北-区域"${w}x${h}+${x}+${y}"\
-比例"10%"-比例"1000%""$out"
完成
完成

这里为"facedetect"的每个输出行调用"mogrify"(这是
次优的),修改文件。

独立图像
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~对于路径/to/pictures/*.jpg;中的文件,请执行
name=$(basename"$file")
i=0
./bin/facedetect"$file",同时读取x y w h;
convert
convert"$file"--crop${w}x${h}{{x}{x}{{y}{y}"path/to/faces/${name%.{{i}${i}${{name{{}}"
i=$($i+1))

don




convert"$file"
convert"$file"--crop${crop${w{w}w}x}{h}{h}{h}{x}{x}{x}{x}{x搜索特定的面作为为
提供了`-s``文件参数。提供的文件必须是包含
的图像,最好是*单个*面。` facedetect`然后将所有人脸与
进行比较,并仅输出高于请求的相似度
阈值(默认为30%)的匹配项。

当人脸搜索与``-q```(查询)一起使用时,只有当至少有一个面与请求的模板匹配时,才发出退出状态0。

当前的匹配算法基于简单的mssim,它远远不够完美(请参见"开发状态和想法"。




dependencies
----


>当前需要以下软件用于"facedetect":

-python 3或python 2.7
-python opencv>;=2.4(``python3 opencv``或``python opencv``)
-opencv数据文件(``opencv data``如果可用,或``libopencv dev`)

您可以使用以下命令安装所有必需的依赖项:

sudo apt get install python3 opencv opencv data

,然后使用以下命令安装"facedetect":sudo cp./bin/facedetect/usr/local/bin

/usr/local/bin



开发状态和思路(遵循wavexx的原始解释)
-----------------------------------


当前的"facedetect"并不是opencv和"frontalface_alt2"配置文件在准确性/检测率方面提供了最好的结果,
可供我使用的真实照片。

在速度方面,lbp分类器更快。但是,虽然一般理论认为它也应该更准确,但"lbp_frontalface"的简介并没有提供可比的结果,这表明有必要进行额外的培训。如果找到了训练数据集,创建lbp配置文件
可能是一个更好的解决方案,特别是在处理速度方面。

``haar_profile face``在我的测试中有太多的误报,无法使用。
但是,将它与``haar_eye``和其他面部部件结合使用,若要降低假阳性率和/或对区域进行排序,则可能是一个非常好的
解决方案。


lbp和haar都不能很好地处理旋转的面。这在以一定角度拍摄的"艺术"肖像中尤为明显。在很多情况下,使用hough变换的信息对图像进行预旋转可以提高检测率,而且应该相对容易实现。


人脸匹配具有用户期望的界面("查找我*这张*脸"),但是
并不能正常工作。目前,人们使用成对mssim对人脸进行比较,这与正确的人脸分割相去甚远。mssim只会找到具有类似方向、表达式和照明条件的面
。haar
特征不能提供执行最简单的面部分割操作(如眼间距离)所需的定位精度。
有趣的是,使用1:1的sift特征匹配计算分数甚至比普通的mssim还要差(在大多数情况下没有足够的粒度场景)。在facedetect之上构建一个
gui来训练支持向量机模型(然后可以反馈到
``-s``),这似乎是一个更好的方法。更高的准确率,但不知何故
偏离了无监督搜索的初衷。




根据GPLV2+发行(见复印件),无任何保证。
版权所有(c)2013-2017由Wave++"Yuri d'elia"<;wavexx@thregr.org>;.

facedetect的git存储库可在以下位置公开访问:

git://src.thregr.org/facedetect(通过wavexx)


或https://github.com/wavexx/facedetect(通过wavexx)
和https://github.com/picovico/facedetect-py(通过picovico)



。_ imagemagick:http://www.imagemagick.org
。_ fGallery:https://www.threg.org/~wavexx/software/fGallery/

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

推荐PyPI第三方库


热门话题
java游戏!框架伪造应用程序它实际上做什么?   java如何在JavaFx中显示表视图中的即时更改?   对象类的equals()方法的java重载   xpages介绍如何部署java。IBM Notes中的策略更改   java如何访问侦听器中的另一个视图?   java getDefaultDisplay()的替代方法是什么   java opencv匹配模板   java Android Firebase写入数据时的常量超时   在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。   带有GUI的swing Java模拟无法运行模拟   java NoSuchElementException在特定的Web端上使用无头铬和硒   java对文件进行迭代,即使文件在目录中也会出现“未找到文件”异常。你能告诉我为什么吗?谢谢   递归Java 8,匿名递归嵌套方法   java为什么我看到枚举常量的字段值会被序列化/反序列化?在哪种情况下,枚举中哪些内容没有序列化?   java在运行sonar scanner和Spotbugs规则时出错,用于单片项目?   java如何检查硬件键盘是否可用?(黑莓)   tile游戏动作侦听器循环中的java错误   sockets Java线程池与高请求场景中的新线程   java如何使用Hibernate注释在联接表上创建索引?