(Аналогичный вопрос был задан на суперпользователя для ответов, связанных с приложениями. Вопрос размещен здесь, чтобы собрать программируемые решения для одного и того же)
На моем рабочем месте, размер паспортафотографии сканируются вместе, затем нарезаются на отдельные фотографии и сохраняются с уникальными номерами файлов.В настоящее время мы используем Paint.net для ручного выбора, вырезания и сохранения изображений.
Образец отсканированного документа Снимок экрана Picasa: (из: поиск изображений в Google, несколько источников, 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 пользователь Technonath говорит
@ oedious пишет: - Это будет несколько техническим, так что подождите.* Число, заключенное в rect64 (), представляет собой шестнадцатеричное 64-разрядное число.* Разбейте это на четыре 16-битных числа.* Разделите каждое на максимальное число без знака 16-разрядное (65535), и у вас будет четыре числа от 0 до 1. * Оставшиеся четыре числа дают вам относительные координаты для прямоугольника лица: (слева, сверху, справа, снизу).* Если вы хотите получить абсолютные координаты, умножьте левую и правую на ширину изображения, а верхнюю и нижнюю на высоту изображения.
Приведенная выше цитата говорит о числе, заключенном в rect64 () как насчет числа вне скобок после запятой?
Я задал связанный вопрос.Ответы на которые могут помочь вам тоже. Получите четыре 16-битных числа из 64-битного шестнадцатеричного значения
Примечание. Сведения ini такие же, как у Picasa для определенного изображения.
Кроме того, вопрос имеетобновлялся несколько раз и может быть недостаточно четким.
На сайте справки Picasa есть несколько ответов, где я задавал один и тот же вопрос Один из ответов в этой теме:получить координаты на основе шестнадцатеричных значений из INI-файла.Следующий код находится на C # из esac с сайта справки.Могу ли я сделать то же самое в 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/>";
}
?>
Выход
Остаток 1: 49551;Результат 1: 0,75608825683594 КООРДИНАТЫ: 371,99542236328 396,94633483887 Остаток 1: 19598;Результат 1: 0.29904174804688 КООРДИНАТЫ: 147.12854003906 156.99691772461 Остаток 1: 62471;Результат 1: 0,95323181152344 КООРДИНАТЫ: 468,99005126953 500,4467010498 Остаток 1: 34078;Результат 1: 0,51998901367188 КООРДИНАТЫ: 255,83459472656 272,99423217773
Так что у меня тоже есть координаты, и @Nirmal показал , как их обрезать .Теперь следующие шаги будут состоять в том, чтобы проанализировать picasa.ini для шестнадцатеричных кодов и имен файлов и интегрировать код.В настоящее время Picasa не предоставляет шестнадцатеричные коды через API (или Они? ).Если бы это было так, все было бы лучше.
Итак, мы приближаемся к решению.Спасибо всем, я хотел бы вручить награду всем (я не могу, но не бойся и высматривайте всплеск в вашем представительстве!)