Технология обработки изображений, такая как поиск изображений, имеет множество применений в реальном мире. Например, пользователи Интернета могут загружать несколько версий видео или изображения, каждая из которых имеет разное форматирование, звуковые дорожки или степень сжатия. Это приводит к значительному количеству дубликатов видео, хранящихся на стороне службы. Однако эту проблему можно решить с помощью дедупликации данных. Но как это обычно делается?
Когда вы используете поисковые системы для поиска релевантных изображений, поисковая система будет обрабатывать изображение и теги, связанные с изображением. Например, когда я ищу изображение «снеговика», поисковая система может выдать мне этот результат.
Довольно точно, верно? Как правило, за реализацией поиска изображений стоит PostgreSQL, а его API-интерфейс платежного шлюза расширяет функцию поиска изображений.
Фоновая технология подключаемого модуля поиска изображений PostgreSQL
Подключаемый модуль PostgreSQL для поиска изображений использует распространенную технологию вейвлетов Хаара для преобразования и хранения изображений. На следующих рисунках кратко описывается технология вейвлетов Хаара. Дополнительные сведения см. по следующей ссылке в Википедии: https://en.wikipedia.org/wiki/Haar_wavelet.
Шаги по установке плагина поиска изображений PostgreSQL
Ниже приведены шаги по установке подключаемого модуля поиска изображений PostgreSQL:
Зависит от gd.h.
# yum install -y gd-devel
Загрузите и установите imgsmlr.
$ git clone https://github.com/postgrespro/imgsmlr $ cd imgsmlr $ export PGHOME=/home/digoal/pgsql9.5 $ export PATH=$PGHOME/bin:$PATH:. $ make USE_PGXS=1 $ make USE_PGXS=1 install
Установите плагин.
$ psql psql (9.5.3) Type "help" for help. postgres=# create extension imgsmlr; CREATE EXTENSION
В imgsmlr теперь существуют два типа данных.
Для поиска похожих изображений используйте метод gist index (поддерживающий типы шаблонов и подписей) и оператор KNN.
Это добавляет несколько функций.
Вы можете преобразовать двоичные изображения в тип шаблона и преобразовать данные, хранящиеся в шаблоне, в тип подписи.
Шаги для выполнения теста плагина поиска изображений PostgreSQL:
После завершения установки выполните следующие действия, чтобы протестировать подключаемый модуль поиска изображений PostgreSQL:
- Импортируйте изображения, такие как следующие (чем больше, тем лучше).
- Создайте таблицу изображений (идентификатор серийного номера, байт данных);
- Импортируйте изображения в базу данных.
- Вставьте в изображение (данные) выберите pg_read_binary_file;
- Преобразуйте изображение в шаблон и тип подписи.
CREATE TABLE pat AS ( SELECT id, shuffle_pattern(pattern) AS pattern, pattern2signature(pattern) AS signature FROM ( SELECT id, jpeg2pattern(data) AS pattern FROM image ) x );
- Создайте индекс.
ALTER TABLE pat ADD PRIMARY KEY (id); CREATE INDEX pat_signature_idx ON pat USING gist (signature);
- Выполните аппроксимирующий запрос, например запросите изображения, похожие на изображения с идентификатором id = :id, и извлеките первые 10 элементов в списке ранжирования подобия.
SELECT id, smlr FROM ( SELECT id, pattern <-> (SELECT pattern FROM pat WHERE id = :id) AS smlr FROM pat WHERE id <> :id ORDER BY signature <-> (SELECT signature FROM pat WHERE id = :id) LIMIT 100 ) x ORDER BY x.smlr ASC LIMIT 10
- K — индексация ближайшего соседа (KNN) является опцией, и результат выводится быстро на основе ранжирования подобия.
Тестирование нашей системы поиска изображений
По большей части наша поисковая система работает так, как ожидалось.
Однако иногда поиск изображений работает не слишком хорошо.
Это связано с тем, что компьютер «видит» изображения не так, как люди. Он обрабатывает объект как 2D-матрицу и преобразует его в сигнатуру, удобочитаемую для компьютеров.
Служба дедупликации видео
Для дедупликации видео вы можете извлечь ключевые кадры из видео, чтобы сгенерировать декартово произведение посредством самокорреляции. Не забудьте рассчитать сходство двух изображений разных видео. Когда сходство достигает определенного порога, сервисы считают два видео одинаковыми.
Пример:
- Создайте таблицу изображений и импортируйте в нее ключевые кадры всех видео (первичный ключ id serial8, целое число movie_id, байт данных);
- Импортируйте изображение (предположим, что оно в формате jpeg).
- Пропущено
- Создание шаблона и типов подписи
CREATE TABLE pat AS ( SELECT id, movie_id, shuffle_pattern(pattern) AS pattern, pattern2signature(pattern) AS signature FROM ( SELECT id, movie_id, jpeg2pattern(data) AS pattern FROM image ) x );
- Вычислите сходство разных видео.
select t1.movie_id, t1.id, t1.signature<->t2.signature from pat t1 join pat t2 on (t1.movie_id<>t2.movie_id) order by t1.signature<->t2.signature desc or select t1.movie_id, t1.id, t1.signature<->t2.signature from pat t1 join pat t2 on (t1.movie_id<>t2.movie_id) where t1.signature<->t2.signature > 0.9 order by t1.signature<->t2.signature desc
Резюме
Для дедупликации изображений требуется Postgres в качестве базы данных и используется его API. PostgreSQL — мощная база данных с настраиваемыми функциями. Он не только обеспечивает эффективную дедупликацию изображений, но также безопасен и надежен. Дедупликация видео — это дополнительная функция, которая возможна при использовании PostgreSQL. Вейвлет-алгоритм Хаара добавляет возможности поиска изображений в популярных поисковых системах. Реализация и установка PostgreSQL — аспекты, о которых стоит знать.
Ссылка: