Обнаружение признаков
Wagtail умеет автоматически обнаруживать лица и признаки на ваших изображениях и обрезать их до этих признаков.
Обнаружение признаков использует сторонние инструменты для обнаружения лиц/признаков на изображении при его загрузке. Обнаруженные признаки сохраняются как точка фокусировки в полях focal_point_{x, y, width, height} на модели Image. Эти поля используются фильтром изображений fill при рендеринге изображения в шаблоне для обрезки изображения.
Установка
Два сторонних инструмента известны как работающие с Wagtail: один на основе OpenCV для общего обнаружения признаков и один на основе Rustface для обнаружения лиц.
OpenCV на Debian/Ubuntu
Для обнаружения признаков требуется OpenCV, установка которого может быть немного сложной, так как в настоящее время он не может быть установлен через pip.
Существует несколько способов установки этих компонентов, но в каждом случае вам нужно будет проверить, что OpenCV и интерфейс Python были установлены правильно.
Установить opencv-python
opencv-python доступен на PyPI. Он включает в себя интерфейс Python для OpenCV, а также статически скомпилированные двоичные файлы OpenCV.
Для установки:
$ pip install opencv-python
В зависимости от того, что ещё установлено на вашей системе, этого может быть достаточно. На более лёгких системах Linux, вам может потребоваться определить и установить недостающие системные библиотеки (например, в облегчённой версии Debian Stretch требуется установка libsm6 libxrender1 libxext6 с помощью apt).
Установить пакет системного уровня
Пакет системного уровня может позаботиться обо всех необходимых компонентах. Проверьте, что доступно для вашей операционной системы. Например, python-opencv доступен для Debian; он устанавливает сам OpenCV и настраивает Python-связки.
Однако, он может сделать неправильные предположения о том, как вы используете Python (например, какую версию вы используете) – проведите тестирование, как описано ниже.
Тестирование установки
Проверьте установку:
python3 >>> import cv2
Ошибка, такая как:
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
указывает на то, что необходимая системная библиотека (в данном случае libsm6) не установлена.
С другой стороны,
ModuleNotFoundError: No module named 'cv2'
означает, что Python-компоненты не были правильно настроены в вашей Python-среде.
Если у вас нет ошибки импорта, установка, вероятно, прошла успешно.
Rustface
Rustface — это Python-библиотека с предопределёнными файлами wheel для Linux и macOS. Несмотря на реализацию на Rust, она устанавливается через pip:
$ pip install wheel $ pip install rustface
Регистрация в Willow
Rustface предоставляет плагин, который необходимо зарегистрировать в Willow.
Это следует сделать в месте, которое запускается при запуске приложения:
from willow.registry import registry import rustface.willow registry.register_plugin(rustface.willow)
Например, в AppConfig.ready приложения.
Обрезка
Алгоритм обнаружения лица генерирует область фокусировки, которая плотно обрезается по лицу, а не по всей голове.
Для изображений с одним лицом это может быть приемлемо в некоторых случаях, например, для миниатюр, но может быть слишком узким для «портретов». Виды изображений могут охватывать больше головы, уменьшая процент обрезки (-c<percentage>), в конце правила изменения размера, вплоть до 0%:
{% image page.photo fill-200x200-c0 %}
Включение обнаружения признаков в Wagtail
После установки необходимо установить настройку WAGTAILIMAGES_FEATURE_DETECTION_ENABLED на True, чтобы автоматически обнаруживать лица/признаки всякий раз, когда новое изображение загружается в Wagtail или когда изображение без точки фокусировки сохраняется (это делается через обработчик сигнала до сохранения):
# settings.py WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = True
Ручной запуск обнаружения признаков
Если у вас уже есть изображения на вашем сайте Wagtail и вы хотите запустить обнаружение признаков на них, или вы хотите применить обнаружение признаков выборочно, когда WAGTAILIMAGES_FEATURE_DETECTION_ENABLED установлено на False, вы можете запустить его вручную, используя метод get_suggested_focal_point() на модели Image.
Например, вы можете вручную запустить обнаружение признаков на всех изображениях, выполнив следующий код в командной строке Python:
from wagtail.images import get_image_model
Image = get_image_model()
for image in Image.objects.all():
if not image.has_focal_point():
image.set_focal_point(image.get_suggested_focal_point())
image.save()
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v3.0.3/advanced_topics/images/feature_detection.html