图片算子概述
图片算子用于图片的探测、格式转换、缩放、裁剪、文字识别(OCR)、内容描述与向量化,所有图片算子均通过 ds.mmops.<算子>() 接收并返回 Ray Dataset。每个输入行对应一个结果行,OCR 的多个页面和图片向量各自以 list 列保存。
算子列表
|
算子 |
用途 |
默认顶层结果列 |
|
探测尺寸、颜色与帧信息。 |
|
|
|
标准化为模型可用的图片字节。 |
|
|
|
转为 PNG、JPEG 或 WebP。 |
|
|
|
等比缩放。 |
|
|
|
按明确的矩形框裁剪。 |
|
|
|
识别图片或 PDF 中的文字。 |
|
|
|
根据提示词生成图片描述。 |
|
|
|
生成图片向量。 |
|
输入与参数
不同图片算子使用的输入列如下:
|
输入列 |
类型 |
说明 |
|
|
str 或 struct |
默认由 |
|
|
list[number] |
crop_image 的 |
|
|
str 或 struct 或 list |
ocr 的 |
normalize_image 只读取图片 URI。除该算子外,其他图片算子还可以接收 ImageRef 和 Base64 对象两种 struct。URI 和 Base64 不能放在同一个对象中,声明的格式与尺寸必须与真实文件一致。
|
struct 字段 |
类型 |
使用条件 |
|
|
str |
ImageRef 必需,指向当前图片。 |
|
|
int |
ImageRef 可选,EXIF 方向校正后的可见宽度。 |
|
|
int |
ImageRef 可选,EXIF 方向校正后的可见高度。 |
|
|
str |
ImageRef 可选;Base64 对象必需,必须与字节的实际格式一致。 |
|
|
str |
Base64 对象的规范字节字段,不含 data URI 前缀;也可以使用兼容别名 |
|
|
str,可选 |
兼容别名,用于适配文档内嵌图片的结果。与 |
图片算子的通用参数如下:
|
通用参数 |
类型 |
默认值 |
说明 |
|
|
str |
|
图片算子读取每行图片的列名。OCR 使用 |
|
|
str |
写文件的算子必填 |
产物的共享目录或对象存储前缀。SDK 自动为每行生成互不冲突的文件名。 |
|
|
str |
|
输出格式,取值为 png、jpeg、jpg 或 webp。适用于 |
|
|
list[str] | None |
|
需要追加保留的原输入列。与标准结果列重名时报错,需先用 Ray Data 原生的 |
|
|
int |
|
Ray 批处理大小。 |
|
|
int |
|
Ray 执行并发度,取值为正整数。 |
|
|
float |
|
每个执行任务申请的 Ray CPU 资源,取值须大于 0。 |
*_column 参数指定从每行读取数据的列名;prompt、width、coordinate_system 等普通参数是本次调用的全局常量。基础处理算子默认单行总超时时间为 60 秒,调用模型的算子默认为 180 秒;单张图片默认上限为 32 MiB、8000 万像素。OCR 读取 PDF 的默认上限为 256 MiB。详细的可调参数以对应算子的接口文档为准。
输出与图片语义
转换、缩放和裁剪算子将每项元数据作为独立的顶层列输出,后续算子可直接通过 image_column="image_uri" 读取产物 URI。其他输入列不会自动透传,需要业务标识时请使用 keep_columns。normalize_image 输出的两列可以用原生 map 打包为图片 struct,再交给视觉模型。
|
图片产物列 |
类型 |
说明 |
|
|
str |
已写出的图片地址。 |
|
|
int |
输出图片的可见宽度,单位为像素。 |
|
|
int |
输出图片的可见高度,单位为像素。 |
|
|
str |
实际编码格式,取值为 png、jpeg 或 webp。 |
|
|
list[int] |
仅裁剪算子输出,表示在当前输入图片上实际使用的 xyxy 像素框。 |
图片输入支持 PNG、JPEG、WebP、GIF、BMP 和 TIFF 格式,处理时的语义如下:
-
先按 EXIF 信息校正方向,尺寸与裁剪坐标都以校正后的可见图片为准。
-
静态处理只取首帧,多页 TIFF 只取第一页。
-
输出 PNG、WebP 时保留透明信息;输出 JPEG 时使用
background铺底。 -
输出不会覆盖输入文件。
完整示例:裁剪后描述局部
示例中的 /shared 是集群所有 Worker 节点均可读写的共享挂载目录,需预先放置输入素材。视觉模型默认读取 MMOPS_VISION_MODEL、MMOPS_VISION_BASE_URL(未配置时回退 MMOPS_MODEL_BASE_URL)和 MMOPS_MODEL_API_KEY 环境变量,密钥请配置在执行节点环境中。环境变量说明,请参见离线算子概述。
import ray
from mmops.ray import enable_accessor
ray.init()
enable_accessor()
ds = ray.data.from_items([{
"asset_id": "demo-001", "image_uri": "/shared/input/sample.png",
"bbox": [0.1, 0.1, 0.8, 0.9],
}])
crops = ds.mmops.crop_image(
image_column="image_uri", bbox_column="bbox", coordinate_system="normalized",
output_dir="/shared/output/image_crops", output_format="png",
keep_columns=["asset_id"],
)
result = crops.mmops.caption_image(
image_column="image_uri", prompt="描述裁剪区域内可见的物品、颜色和文字。",
keep_columns=["asset_id", "image_uri"],
)
result.select_columns(["asset_id", "image_uri", "text"]).write_parquet(
"/shared/metadata/crop_captions"
)
output_dir 保存图片二进制产物,write_parquet() 保存元数据与描述结果。
图片向量默认使用 DashScope 多模态协议,模型变量为 MMOPS_IMAGE_EMBEDDING_MODEL 和 MMOPS_IMAGE_EMBEDDING_BASE_URL,可以在 model_config 中按任务覆盖模型、地址和协议。读取、渲染、解码或模型失败时算子会报错;OCR 遇到空白页时正常返回空文本,请勿将二者混淆。
示例返回结果
以下为与上述调用对应的返回结构示例,媒体内容、模型结果和生成的文件名以实际输入及配置为准。算子返回 Dataset,take() 仅取少量行到本地查看;多行结果不保证跨分区的顺序。
import json
rows = result.take(1)
print(json.dumps(rows, ensure_ascii=False, indent=2))
[
{
"text": "裁剪区域内是一只白色杯子。",
"asset_id": "demo-001",
"image_uri": "/shared/output/image_crops/crop_image-demo/image.png"
}
]