(A類似的問題已經被問對超級用戶與應用程序相關的答案。問題是張貼在這裏收集了相同的可編程解決方案)自動人臉檢測
在我的工作將護照尺寸的照片一起掃描,然後剪切成單獨的照片並用唯一的文件編號保存。目前我們使用Paint.net手動選擇,剪切和保存圖片。
樣品掃描的文檔的Picasa截圖: (來自:谷歌圖像搜索多個數據源,fairuse)
對於例如。在Picasa 3.8中,單擊視圖>人員時,會顯示所有人臉,並要求我爲他們命名,我是否可以將這些個人圖片自動保存爲不同圖片的名稱?
更新
所有我想要做的就是上面的轉換對單張照片的畫面。
在上面的圖片中,我已經展示了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引述說
@oedious寫道: - 這將是 有些技術性的,所以堅持下去。 *包含在rect64()中的數字是一個64位的十六進制數。 *將其分成四個16位數字。 *將每個數除以最大無符號16位數(65535),並且您將有 四個數字,介於0和1之間。 *剩餘的四個數字將爲您提供相對座標 矩形:(左,上,右,底部)。 *如果您想要以絕對座標結束,請將圖像寬度和頂部 的左側和右側多餘,然後按圖像高度底部。
上面的引用談到了rect64()中包含的數字,逗號後的圓括號之外的數字是什麼?
我已經問了一個相關的問題。其中的答案也可以幫助你。 Get four 16bit numbers from a 64bit hex value
注: INI細節其PICASA用於特定圖像生成 相同。
此問題已更新多次,可能不夠清楚。
有在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剩餘1之間
<?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/>";
}
?>
輸出
:49551;結果1: 0.75608825683594副標題:371.99542236328 396.94633483887剩餘1:19598;結果1: 0.29904174804688副標題:147.12854003906 156.99691772461剩餘1:62471;結果1: 0.95323181152344 CO-ORDINATES:468.99005126953 500.4467010498剩餘1:34078;結果1: 0.51998901367188座標:255.83459472656 272.99423217773
所以我有座標也和@Nirmal有shown how to crop them。現在接下來的步驟是解析picasa.ini中的十六進制代碼和文件名並整合代碼。 Picasa目前不通過api提供十六進制代碼(或Do they?)。如果是這樣,事情會更好。
所以我們正在接近一個解決方案。謝謝大家,我希望我能把賞金獎勵給大家(我不能,但不要害怕,並且不要在你的代表中出現尖峯!)
你可以給所有四個角的'(x,y)'格式的最終座標嗎? – Nirmal 2010-10-14 07:56:52
@Nirmal(371,156),(468,156),(468,272),(371,272) – abel 2010-10-14 08:25:35