You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
图片处理
图片Hash值
复制全文
图片Hash值

算子介绍

描述

图片哈希计算算子:支持 URL、Base64、二进制三类输入格式,统一输出十六进制与二进制哈希。

核心功能

  • 支持五种哈希方法:ahashdhashphashwhashmd5
  • 输入类型可选:image_urlimage_base64image_binary
  • 支持批量处理

适用场景

  • 图片去重与近似重复图片召回
  • 文件一致性校验
  • 多格式哈希值输出

注意事项

  • 输入数据类型需与 image_src_type 参数匹配
  • md5 与感知哈希的输出将统一为 64 位二进制与 16 位十六进制
  • 算子依赖 imagededup.methods,若依赖不可用将返回空字符串
  • 图片统一使用 Pillow 读取并转换为 RGB 格式

支持哈希方法

  • ahash
  • dhash
  • phash
  • whash
  • md5

Daft 调用

算子参数

输入

输入列名

说明

image

包含图片数据的数组,元素类型为字符串或二进制 (bytes),其具体含义由 image_src_type 参数指定。

输出

一个结构化结果数组,其中每个元素包含以下字段:

  • hash_hex (str): 图像的十六进制哈希值。对于 md5 方法,该值为 16 个字符(截取完整摘要的前 64 位)。
  • hash_bin (str): 图像的二进制哈希值。对于 md5 方法,该值为 64 位。

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

image_src_type

str

"image_url"

输入图片的来源类型。可选值:["image_url", "image_base64", "image_binary"]

method

str

"phash"

哈希计算方法。可选值:{"ahash", "dhash", "phash", "whash", "md5"}md5 使用 hashlib.md5 计算,其它方法使用 imagededup 库。

batch_size

int

64

批处理大小,用于在吞吐量和内存消耗之间进行平衡。

调用示例

下面的代码展示了如何使用 daft 调用 ImageHash 算子来计算图像的感知哈希值。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.image.image_hash import ImageHash
from daft.las.functions.udf import las_udf

if __name__ == "__main__":
    if os.getenv("DAFT_RUNNER", "native") == "ray":
        import logging

        import ray

        def configure_logging():
            logging.basicConfig(
                level=logging.INFO,
                format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                datefmt="%Y-%m-%d %H:%M:%S.%s".format(),
            )
            logging.getLogger("tracing.span").setLevel(logging.WARNING)
            logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
            logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

        ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
        daft.context.set_runner_ray()
    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com")
    samples = {
        "image": [
            f"https://{tos_dir_url}/public/shared_image_dataset/cat_ip_adapter.jpeg"
        ]
    }

    ds = daft.from_pydict(samples)
    ds = ds.with_column(
        "image_hash",
        las_udf(
            ImageHash,
            construct_args={
                "image_src_type": "image_url",
                "method": "phash",
            },
            num_gpus=0,
            batch_size=1,
            concurrency=1,
        )(col("image")),
    )

    ds.show()

    # ╭────────────────────────────────┬────────────────────────────────────────╮
    # │ image                          ┆ image_hash                             │
    # │ ---                            ┆ ---                                    │
    # │ Utf8                           ┆ Struct[hash_hex: Utf8, hash_bin: Utf8] │
    # ╞════════════════════════════════╪════════════════════════════════════════╡
    # │ https://las-cn-beijing-public… ┆ {hash_hex: 8d3986a636e768ad,           │
    # │                                ┆ …                                      │
    # ╰────────────────────────────────┴────────────────────────────────────────╯
最近更新时间:2026.01.08 19:14:21
这个页面对您有帮助吗?
有用
有用
无用
无用