[파이썬] Pillow 이미지의 시각적 해시 생성하기

이미지 해싱은 이미지를 고유하게 식별하기 위해 사용되는 기술입니다. 시각적 해싱은 이미지의 시각적 부분을 가져와 해시를 생성하는 기법입니다. 이 기술은 이미지의 유사성을 비교하거나 유해한 이미지를 탐지하는 데 사용될 수 있습니다.

이 튜토리얼에서는 Python의 Pillow 라이브러리를 사용하여 이미지의 시각적 해시를 생성하는 방법에 대해 알아보겠습니다.

Pillow 라이브러리 설치하기

Pillow는 Python에서 이미지 처리를 위한 강력한 라이브러리입니다. 다음 명령을 사용하여 Pillow를 설치하세요:

pip install Pillow

이미지 해시 생성 코드 구현하기

다음은 Pillow를 사용하여 이미지의 시각적 해시를 생성하는 간단한 코드입니다:

from PIL import Image

def visual_hash(image_path, hash_size=8):
    # 이미지 열기
    image = Image.open(image_path)

    # 이미지 리사이징
    image = image.resize((hash_size, hash_size))

    # 이미지를 그레이스케일로 변환
    image = image.convert("L")

    # 픽셀 값 가져오기
    pixels = list(image.getdata())

    # 픽셀 값을 이진 문자열로 변환
    binary_hash = "".join(["1" if pixel > 128 else "0" for pixel in pixels])

    # 해시 값 반환
    return binary_hash

위 코드는 다음 단계를 수행합니다:

  1. Pillow를 import합니다.
  2. visual_hash 함수를 정의합니다. 이 함수는 이미지 파일 경로와 해시 크기를 입력으로 받습니다.
  3. 이미지를 열고, 리사이즈하고, 그레이스케일로 변환합니다.
  4. 픽셀 값을 가져와 이진 문자열로 변환합니다. 여기서는 픽셀 값이 128보다 크면 1, 작으면 0으로 변환됩니다.
  5. 이진 해시 값을 반환합니다.

코드 사용 예시

이제 위에서 구현한 visual_hash 함수를 사용해보겠습니다:

image_path1 = "image1.jpg"
image_path2 = "image2.jpg"

hash1 = visual_hash(image_path1)
hash2 = visual_hash(image_path2)

if hash1 == hash2:
    print("두 이미지는 동일한 시각적 해시를 가집니다.")
else:
    print("두 이미지는 다른 시각적 해시를 가집니다.")

위 코드는 image1.jpgimage2.jpg 두 이미지의 시각적 해시를 비교하고, 해시가 동일한지를 확인합니다.

이제 Pillow를 사용하여 이미지의 시각적 해시를 생성하는 방법을 알게 되었습니다. 이를 활용하여 이미지 유사성 비교, 유해한 이미지 탐지 등 다양한 응용 프로그램을 개발할 수 있습니다.