특징 감지¶
Wagtail은 이미지 안의 얼굴과 특징을 자동으로 감지하고, 그 특징에 맞춰 이미지를 자르는 기능이 있습니다.
특징 감지는 서드파티 도구를 사용하여 이미지가 업로드될 때 이미지의 얼굴/특징을 감지합니다. 감지된 특징은 Image 모델의 focal_point_{x, y, width, height} 필드에 초점 정보로 내부적으로 저장됩니다. 이 필드들은 템플릿에서 이미지가 렌더링될 때 fill 이미지 필터에 의해 이미지를 자르는 데 사용됩니다.
설치¶
Wagtail과 함께 작동하는 것으로 알려진 두 가지 서드파티 도구가 있습니다: 일반적인 특징 감지를 위한 OpenCV 기반 도구와 얼굴 감지를 위한 Rustface 기반 도구입니다.
Debian/Ubuntu에서 OpenCV 설치하기¶
특징 감지에는 OpenCV가 필요하며, 현재 pip으로 설치할 수 없기 때문에 설치가 다소 까다로울 수 있습니다.
이러한 구성 요소를 설치하는 방법은 여러 가지가 있지만, 각각의 경우 OpenCV 자체와 파이썬 인터페이스가 모두 올바르게 설치되었는지 테스트해야 합니다.
opencv-python 설치하기¶
opencv-python은 PyPI에서 사용할 수 있습니다. 여기에는 OpenCV에 대한 파이썬 인터페이스와 정적으로 빌드된 OpenCV 바이너리 자체가 포함되어 있습니다.
설치 방법:
pip install opencv-python
시스템에 설치된 다른 항목에 따라 이것만으로도 충분할 수 있습니다. 경량 리눅스 시스템에서는 누락된 시스템 라이브러리를 식별하고 설치해야 할 수도 있습니다 (예: Debian Stretch의 슬림 버전에서는 apt 로 libsm6 libxrender1 libxext6 를 설치해야 함).
시스템 수준 패키지 설치하기¶
시스템 수준 패키지는 필요한 모든 구성 요소를 처리할 수 있습니다. 운영 체제에서 사용 가능한 것을 확인하십시오. 예를 들어, Debian에서는 python-opencv를 사용할 수 있으며, 이는 OpenCV 자체를 설치하고 파이썬 바인딩을 설정합니다.
그러나 파이썬 사용 방식(예: 사용 중인 버전)에 대해 잘못된 가정을 할 수 있으므로 아래 설명된 대로 테스트하십시오.
설치 테스트하기¶
설치를 테스트합니다:
python3
>>> import cv2
다음과 같은 오류는:
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
필요한 시스템 라이브러리(이 경우 libsm6)가 설치되지 않았음을 나타냅니다.
반면에,
ModuleNotFoundError: No module named 'cv2'
는 파이썬 구성 요소가 파이썬 환경에 올바르게 설정되지 않았음을 의미합니다.
import 오류가 발생하지 않으면 설치가 성공적으로 완료된 것입니다.
Rustface¶
Rustface는 리눅스 및 macOS용으로 사전 빌드된 wheel 파일이 제공되는 파이썬 라이브러리입니다. 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에 새 이미지가 업로드될 때마다 또는 초점이 없는 이미지가 저장될 때마다(이는 pre-save 시그널 핸들러를 통해 수행됨) 자동으로 얼굴/특징을 감지하도록 해야 합니다:
# settings.py
WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = True
수동으로 특징 감지 실행하기¶
Wagtail 사이트에 이미 이미지가 있고 이에 대해 특징 감지를 실행하고 싶거나, WAGTAILIMAGES_FEATURE_DETECTION_ENABLED 가 False 로 설정된 경우 선택적으로 특징 감지를 적용하고 싶다면, Image 모델의 get_suggested_focal_point() 메서드를 사용하여 수동으로 실행할 수 있습니다.
예를 들어, 파이썬 셸에서 다음 코드를 실행하여 모든 이미지에 대해 수동으로 특징 감지를 실행할 수 있습니다:
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()