(已经向 super 用户询问了类似的问题,以获取与应用程序相关的答案。该问题在此处发布,以收集相同的可编程解决方案)
在我的工作场所,将护照尺寸的照片一起扫描,然后切成单张照片,并保存为唯一的文件编号。当前,我们使用Paint.net手动选择,剪切和保存图片。
样本扫描文档Picasa屏幕快照:
(来自:谷歌图片搜索的多个来源,公平的)
例如。在Picasa 3.8中,单击“ View ”>“人物”,将显示所有面孔,并要求为其命名,是否可以将这些单独的图片自动保存为其他图片?
更新了
我要做的就是将上面的图片转换成单独的图片。
在上图中,我展示了Picasa 3.8如何检测到图像并提示我为其命名。我不需要人脸识别,我只需要人脸检测。 Picasa会检测到单个图像并将其显示在RHS上。这些是我所需要的图像。 Picasa创建一个.ini文件,该文件保存包含各个面坐标的十六进制值。
这些单独的面孔是我感兴趣的。如果可以使用坐标,则可以从图片中裁剪所需的图像。
SAMPLE.jpg
ini内容
[SAMPLE.jpg]
faces=rect64(c18f4c8ef407851e),d4ff0a020be5c3c0;rect64(534a06d429ae627),dff6163dfd9d4e41;rect64(b9c100fae46b3046),e1059dcf6672a2b3;rect64(7b5105daac3a3cf4),4fc7332c107ffafc;rect64(42a036a27062a6c),ef86c3326c143248;rect64(31f4efe3bd68fd8),90158b3d3b65dc9b;rect64(327904e0614d390d),43cbda6e92fcb63e;rect64(4215507584ae9b8c),15b6a967e857f334;rect64(895d4efeb8b68425),5c4ff70ac70b27d3
backuphash=3660
* ini文件似乎正在将面部标签的坐标保存为每个标签的
rect64(534a06d429ae627),dff6163dfd9d4e41
。从Picasa Help Site用户报价Technonath说
上面的引文讨论了用rect64()括起来的数字,逗号后括号外的数字又如何呢?
我问了一个相关的问题。答案可能也对您有帮助。
Get four 16bit numbers from a 64bit hex value
在Picasa Help site上有一些答复,在这里我问了同样的问题
该线程的答案之一,是根据ini文件中的十六进制值获取坐标。以下代码是来自帮助站点的esac中的C#代码。我可以在PHP中做同样的事情吗?
public static RectangleF GetRectangle(string hashstr)
{
UInt64 hash = UInt64.Parse(hashstr, System.Globalization.NumberStyles.HexNumber);
byte[] bytes = BitConverter.GetBytes(hash);
UInt16 l16 = BitConverter.ToUInt16(bytes, 6);
UInt16 t16 = BitConverter.ToUInt16(bytes, 4);
UInt16 r16 = BitConverter.ToUInt16(bytes, 2);
UInt16 b16 = BitConverter.ToUInt16(bytes, 0);
float left = l16 / 65535.0F;
float top = t16 / 65535.0F;
float right = r16 / 65535.0F;
float bottom = b16 / 65535.0F;
return new RectangleF(left, top, right - left, bottom - top);
}
PHP代码试图将64位转换为1到0之间的数字
<?php
$dim = getimagesize("img.jpg");
$hex64=array();
$b0="c18f4c8ef407851e";
$hex64[]=substr($b0,0,4);
$hex64[]=substr($b0,4,4);
$hex64[]=substr($b0,8,4);
$hex64[]=substr($b0,12,4);
$width=$dim[0];
$height=$dim[1];
foreach($hex64 as $hex16){
$dec=hexdec($hex16);
$divide=65536;
$mod=$dec%$divide;
$result=$dec/$divide;
$cordinate1=$result*$width;
$cordinate2=$result*$height;
echo "Remainder 1 : ".$mod." ; Result 1 : ".$result."<br/>CO-ORDINATES : <B>".$cordinate1." ".$cordinate2."</B><br/>";
}
?>
输出
所以我也有坐标,@ Nirmal也有shown how to crop them。现在,下一步是解析picasa.ini以获取十六进制代码和文件名,并集成代码。 Picasa当前不通过api(或Do they?)提供十六进制代码。如果真是这样,情况会更好。
因此,我们正在寻求解决方案。谢谢大家,我希望我能向所有人颁发赏金(我不能,但不要害怕,请注意您的代表人数激增!)
最佳答案
要回答picasa问题,请在picasa论坛上查看以下回复:
http://www.google.com/support/forum/p/Picasa/thread?tid=36ae553a7b49088e&hl=en
关于php - 使用Picasa API自动提取人脸以提取单个图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3872112/