Сравните изображения, используя базу данных изображений, используя ImageMagick? - PullRequest
0 голосов
/ 21 декабря 2018

Я знаю, что могу сравнить два изображения (чтобы проверить, являются ли они визуально одинаковыми , не проверять их формат файла, EXIF ​​и т. Д.), Используя функцию compareImages( Imagick $compare , int $metric ) библиотеки ImageMagick в PHP(также доступно на нескольких других языках программирования).

Примеры кодов для сравнения 2 изображений в PHP:

<?php

$image1 = new imagick("image1.png");
$image2 = new imagick("image2.png");
// TODO: have to resize 2 images to same dimension first
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");

header("Content-Type: image/png");
echo $result[0]; // display the result
// TODO: Add exception handling
?>

Но с тысячами изображений для сравнения эта функция кажется неэффективной,как это можно сравнить только один за другим.Есть ли какая-нибудь функция, которую я могу использовать, чтобы сделать отпечаток (что-то подобное) изображения, чтобы я мог легко искать в базе данных?

Методы, которые я могу придумать:

  1. Преобразование изображения в строку Base64
  2. Извлечение нескольких образцов пикселей из каждого изображения, сохранение цветов в базе данных (но этот метод не является точным)
  3. Использование библиотеки распознавания изображений (что-то вроде MachineОбучение) добавить несколько тегов для каждого изображения, затем выполнить поиск по тегу (этот метод также не точен)
  4. (что-нибудь еще?)

Все предложения приветствуются.

PS. Язык программирования не обязательно должен быть в PHP.

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете использовать функцию getImageSignature, которая будет возвращать строку, содержащую хеш-код файла SHA-256.

Так что можно выполнить цикл по всем изображениям и добавить подпись изображенияв свою базу данных изображений, или просто добавьте подпись на каждом выполняемом вами сравнении.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...