Skip to content

ImageHash

pipeline pipeline

图像哈希管道生成感知图像哈希。这些哈希可用于检测近乎重复的图像。此方法不依赖于机器学习模型,也不旨在寻找概念上相似的图像。

示例

以下展示了一个使用此管道的简单示例。

from txtai.pipeline import ImageHash

# 创建并运行管道
ihash = ImageHash()
ihash("图像文件路径")

请参阅以下链接以获取更详细的示例。

笔记本 描述
近似重复图像检测 识别重复和近似重复的图像 在 Colab 中打开

配置驱动示例

管道可以通过 Python 或配置运行。管道可以通过配置使用管道的类名的小写形式实例化。配置驱动的管道可以通过工作流API运行。

config.yml

# 使用类名的小写形式创建管道
imagehash:

# 使用工作流运行管道
workflow:
  imagehash:
    tasks:
      - action: imagehash

使用工作流运行

from txtai import Application

# 使用工作流创建并运行管道
app = Application("config.yml")
list(app.workflow("imagehash", ["图像文件路径"]))

使用 API 运行

CONFIG=config.yml uvicorn "txtai.api:app" &

curl \
  -X POST "http://localhost:8000/workflow" \
  -H "Content-Type: application/json" \
  -d '{"name":"imagehash", "elements":["图像文件路径"]}'

方法

管道的 Python 文档。

__init__(algorithm='average', size=8, strings=True)

Creates an ImageHash pipeline.

Parameters:

Name Type Description Default
algorithm

image hashing algorithm (average, perceptual, difference, wavelet, color)

'average'
size

hash size

8
strings

outputs hex strings if True (default), otherwise the pipeline returns numpy arrays

True
Source code in txtai/pipeline/image/imagehash.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def __init__(self, algorithm="average", size=8, strings=True):
    """
    Creates an ImageHash pipeline.

    Args:
        algorithm: image hashing algorithm (average, perceptual, difference, wavelet, color)
        size: hash size
        strings: outputs hex strings if True (default), otherwise the pipeline returns numpy arrays
    """

    if not PIL:
        raise ImportError('ImageHash pipeline is not available - install "pipeline" extra to enable')

    self.algorithm = algorithm
    self.size = size
    self.strings = strings

__call__(images)

Generates perceptual image hashes.

Parameters:

Name Type Description Default
images

image|list

required

Returns:

Type Description

list of hashes

Source code in txtai/pipeline/image/imagehash.py
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def __call__(self, images):
    """
    Generates perceptual image hashes.

    Args:
        images: image|list

    Returns:
        list of hashes
    """

    # Convert single element to list
    values = [images] if not isinstance(images, list) else images

    # Open images if file strings
    values = [Image.open(image) if isinstance(image, str) else image for image in values]

    # Convert images to hashes
    hashes = [self.ihash(image) for image in values]

    # Return single element if single element passed in
    return hashes[0] if not isinstance(images, list) else hashes