面向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/
===============================
`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/