Я знаю, что могу сравнить два изображения (чтобы проверить, являются ли они визуально одинаковыми , не проверять их формат файла, 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
?>
Но с тысячами изображений для сравнения эта функция кажется неэффективной,как это можно сравнить только один за другим.Есть ли какая-нибудь функция, которую я могу использовать, чтобы сделать отпечаток (что-то подобное) изображения, чтобы я мог легко искать в базе данных?
Методы, которые я могу придумать:
- Преобразование изображения в строку Base64
- Извлечение нескольких образцов пикселей из каждого изображения, сохранение цветов в базе данных (но этот метод не является точным)
- Использование библиотеки распознавания изображений (что-то вроде MachineОбучение) добавить несколько тегов для каждого изображения, затем выполнить поиск по тегу (этот метод также не точен)
- (что-нибудь еще?)
Все предложения приветствуются.
PS. Язык программирования не обязательно должен быть в PHP.