图像宽高比
更新时间:2026-09-14
简介
图像宽高比算子,输出 width / height 比值。算子只产出比值,不按 min/max 区间过滤,过滤交给 pipeline。
功能描述
- 只用 PIL
Image.open读图像头部取image.size,不做全图解码;纯 CPU,无模型权重 - 支持三种输入形式:
image_url(本地路径 /file:/// http(s) /bos:///s3://,远端路径先下载到临时目录)、image_base64(允许带 data URI 前缀,按第一个逗号切掉)、image_binary - 输出 float64,口径是宽 / 高;取的是文件记录的原始像素尺寸,不做 EXIF 旋转矫正
- 高为 0 时该行返回 None
- 单行失败(读不到文件、非图像数据、输入类型与
image_src_type不匹配)打 exception 日志后该行填 None,不中断整批 - 一行一张图,只产标量比值,不按
any/all策略决定样本去留
算子参数
输入
| 输入 | 含义 |
|---|---|
| images | 图像输入列,内容形式由 image_src_type 决定(路径/URL 字符串、base64 字符串、bytes) |
输出
| 输出 | 含义 |
|---|---|
| aspect_ratio | float64,宽 / 高。高为 0 或该行处理失败时为 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| image_src_type | str | "image_url" | 输入图像编码形式:image_url / image_base64 / image_binary,取值非法在初始化阶段抛 ValueError |
注意事项
- 算子只产出统计字段,不做过滤。等价过滤要自己在 pipeline 里写,常用区间是
min_ratio=0.333、max_ratio=3.0(见调用示例里的where)。
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.image.image_aspect_ratio import ImageAspectRatio
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18samples = {"image": ["bos://your-bucket/sample.jpg"]}
19 ds = daft.from_pydict(samples)
20 ds = ds.with_column(
21 "aspect_ratio",
22 aihc_udf(
23 ImageAspectRatio,
24 construct_args={"image_src_type": "image_url"},
25 num_cpus=1,
26 concurrency=4,
27 batch_size=64,
28 )(col("image")),
29 )
30 ds = ds.where((col("aspect_ratio") > 0.333) & (col("aspect_ratio") < 3.0))
31 ds.show()
评价此篇文章
