Поиск изображений: создайте поисковую систему для красивых картинок, которые вы сканируете

Python задняя часть

написать впереди

Недавно я тестировал SPTAG, инструмент поиска ближайшего соседа.Я планировал использовать что-то, чтобы проверить и потренировать свои руки, поэтому я подумал о создании индекса предыдущих изображений красоты, чтобы посмотреть, смогу ли я найти нужные изображения красоты.

Необходимая среда выглядит следующим образом:

  • python3.7
  • СПТАГ (версия Docker)
  • MongoDB

См. код:GitHub.com/yourado/MM FI…

Подготовьте картинку

Первый - это подготовить фотографии красивых женщин.Вот несколько фотографий, которые я облазил давным-давно, всего около 10 000 фотографий.

Если нет, вот ссылка для скачивания с Google Диска:/1 из drive.Google.com/file/ — это Z…. Распаковать пароль: nladuo.

фильтр изображений

Затем следующим шагом является предварительная обработка изображения.В основном я собираюсь сделать здесь не весь поиск изображения, а поиск всего изображения будет более хлопотным. Я только здесь ищу лица.

здесь черезface_recognitionЭта библиотека сохраняет изображение только с одним лицом, извлекает лицо и помещает его в mongodb.

cd MMFinder/data_preprocess
python3 filter_images.py

отфильтровать здесь9477фотографий

разработка функций

Следующим шагом является преобразование изображения в вектор, что представляет собой разработку признаков. Поскольку я не делаю изображения сам, поэтому я не очень хорошо знаю конкретный метод.Я, вероятно, проверил его.Традиционные методы:SIFT, теперь есть神经网络.

Если это обычное изображение, просто используйте ImageNet, обученный извлекать вектор последнего слоя в качестве функции. Здесь я нашел предварительно обученную модель, посвященную распознаванию лиц:Цвет FI Start.com/2018/08/06/…, точность должна быть выше.

Модель — VGG, а последний слой — вектор размерности 2622. В процессе обработки все грани преобразуются в вектор длиной 2622, а затем сохраняются в mongodb.

cd MMFinder/data_preprocess
python3 feature_extraction.py

показатель

Следующим шагом является установление индекса ближайшего соседа, также называемого плотным индексом.В системах текстового поиска мы обычно используем TF-IDF, который относится к разреженному индексу, который является инвертированным индексом. Плотный индекс обычно является индексом структуры графа.

Зачем создавать индекс?

На самом деле, это для ускорения поиска.Если мы ищем изображение в обычных условиях, нам действительно нужно вычислить сходство с 9477 векторами в базе данных, чтобы получить точный рейтинг сходства. Временная сложность этого O (N), что не кажется высоким, но каждый поиск - O (N).Предполагая, что есть 100 миллионов изображений, я не знаю, какой год ждать.

С помощью индекса вы можете гарантировать, что результаты поиска возвращаются в фиксированное время O(C), если он все еще медленный, просто добавьте машину.

Установка системы индексации

Что касается выбора индекса, здесь я использую SPTAG, потому что это эффективная и масштабируемая система поиска ближайшего соседа. Похожая система у фэйсбука faiss. Шаги установки можно найти в моей предыдущей статье:Установка и тестирование СПДАГ под Docker

Это на самом деле довольно проблематично для установки.Если вы хотите запустить и поиграть, вы также можете посмотреть KDTree, LSH и другие методы приблизительного поиска ближайшего соседа в scikit-learn.

показатель

После установки SPTAG в Docker экспортируйте все данные изображения во входной формат, указанный SPTAG.

cd MMFinder/index_construction
python3 export_SPTAG_indexbuilder_input.py
docker cp mm_index_input.txt (你的容器ID):/app/Release/

Затем поместите экспортированные данные в контейнер SPTAG-Docker, черезindexbuilderСоздайте индекс.

docker attach (你的容器ID)
./indexbuilder -d 2622 -v Float  -i ./mm_index_input.txt -o data/mm_index -a BKT -t 2

После того, как индекс установлен, запустите службу поиска rpc.

python3 SPTAG_rpc_search_service.py

тест запроса

Далее вы можете ввести тест запроса, если вы пользователь Mac, вы можете установить егоimgcatинструмент для просмотра изображений из командной строки.

python3 search_test.py

Эффект следующий, он все еще чувствует себя хорошоsearch_test_result.jpg

Демонстрационный дисплей внешнего интерфейса

Наконец, интегрируйте каждый модуль, напишите загрузку, интерфейс поиска и сформируйте полное демо-приложение.

cd web_demo
python3 main.py

Эффект следующий:

(Картинки красоты легко блокируются, вот еще одна подборка картинок в качестве альтернативы)