多模态数据
Vane 使用 FILE 家族类型表示不可变文件引用,使用 IMAGE 表示解码后的图像像素,使用 TENSOR 表示数值数组,包括音频波形。下文按文件、图像、音频、视频和张量介绍相关的 Python 与 SQL 接口。图像、音频和视频函数默认使用 python 后端;加载 native_media 扩展后,可以切换到 native 后端。
Expression 调用返回惰性的 vane.Expression,可用 .alias(...) 命名。SQL 标量函数可用于 SELECT 表达式,通过 AS 命名结果;list_files、read_video_frames 等表函数用于 FROM 子句。
函数分类
- 文件函数:构造和查看 FILE 家族值。
- 图像函数:解码、查看、变换和编码 IMAGEFILE 与 IMAGE 值。
- 音频函数:查看 AUDIOFILE 元数据并重采样波形。
- 视频函数:按行输出解码帧,并构建或解析可复用寻址索引。
- 张量函数:构造和查看 TENSOR 值。
类型
| SQL 类型 | 存储 | 含义 |
|---|---|---|
| FILE | STRUCT(url VARCHAR, content_type VARCHAR, position BIGINT, size BIGINT, checksum VARCHAR) | 通用不可变对象引用,可带字节窗口(position、size) |
| IMAGEFILE | 同上五字段,IMAGE 子类型 | 编码后的图像对象 |
| AUDIOFILE | 同上五字段,AUDIO 子类型 | 编码后的音频对象 |
| VIDEOFILE | 同上五字段,VIDEO 子类型 | 编码后的视频对象 |
| IMAGE | 动态 STRUCT(data, channel, height, width, mode);固定形状的 IMAGE(mode, H, W) 为稠密 ARRAY | 解码后的交错 HWC 像素 |
| TENSOR(dtype, shape) | 可变形状用 STRUCT(data LIST, shape INTEGER[rank]),同列的秩固定;固定形状用稠密 ARRAY | 稠密行主序数值张量 |
FILE 家族的构造器为 file、image_file、audio_file、video_file;图像为 IMAGE、IMAGE('RGB')、IMAGE('RGB', H, W);张量为 tensor(data, shape)。SQL 中 image(data, width, height, channels, mode) 从打包像素字节构建动态 IMAGE;data 必须恰好包含 width * height * channels 个该模式的像素元素。Python 中 vane.File、vane.ImageFile、vane.AudioFile、vane.VideoFile 是同五字段的不可变引用。
类型构造器与枚举
Python 的类型构造器生成 Vane 类型,vane.MediaType 选择 FILE 子类型:
| API | 返回 |
|---|---|
| vane.file_type(media_type=vane.MediaType.unknown()) | media_type 对应的 FILE 家族类型 |
| vane.image_type(mode=None, height=None, width=None) | IMAGE 类型;常量 mode 与尺寸会收窄它 |
| vane.tensor_type(type, shape) | TENSOR 类型;None 表示可变维度 |
| vane.MediaType.unknown() / image() / audio() / video() | FILE 子类型选择器 |
image_type() 返回动态 IMAGE;给出 mode 会收窄类型,要固定两个维度则必须同时给出 mode, height, width。tensor_type(type, shape) 接收 Vane 元素类型和非空形状,形状项为非负整数或表示可变维度的 None(可变形状秩为 1–32)。非法模式、维度或形状会报错。
vane.ImageProperty(height、width、channel、mode)是 image_attribute 的属性名;vane.ImageMode 与 vane.ImageFormat 枚举支持的像素模式与编码格式。
IMAGE 模式
像素 dtype 由模式决定:
| 模式 | 像素 dtype | 通道数 |
|---|---|---|
| L、LA、RGB、RGBA | UInt8 | 1、2、3、4 |
| L16、LA16、RGB16、RGBA16 | UInt16 | 1、2、3、4 |
| RGB32F、RGBA32F | Float32 | 3、4 |
泛型 IMAGE 存储为 Float32,一列可无损容纳全部模式;已知模式存储其原生像素 dtype。读取的单元格物化为形状 (height, width, channels) 的 C 连续 NumPy 数组;vane.Image 是这些 UInt8、UInt16 或 Float32 数组的 Python 类型别名。Arrow 用 vane.image 扩展承载固定形状图像。
expr.as_image(mode=None, height=None, width=None) 检查已有图像表达式是否满足指定 IMAGE 类型的约束。普通 cast 不转换颜色、不缩放像素,布局不匹配时 TRY_CAST 返回 NULL。
音频特化
音频波形使用形状 (frames, channels) 的 Float64 张量;两维都可逐行变化,通道数为正,零帧((0, channels))表示空音频。重采样契约见音频函数。
取值契约
非 NULL 图像要求所有字段和像素非 NULL,宽高为正。非 NULL 张量没有 NULL 维度或元素,任一维度的大小为 0 时表示空张量,与 NULL 张量不同。File 值的查看、子类型分类、相等与转换见文件函数。
后端
图像、音频和视频分别通过 image_backend、audio_backend、video_backend 独立选择执行后端。三项设置的默认值都是 python,仅接受 python 或 native。
native 为实验性功能:其 native_media 扩展与 provider wheel 可能随版本变化。
| 后端 | 使用的实现 | 需要安装 |
|---|---|---|
| python | 图像用 Pillow/tifffile/imagecodecs,音频用 SoundFile/SoXR,视频用 PyAV | vane-ai[image]、vane-ai[audio]、vane-ai[video] |
| native | 可选 native_media C++ 扩展(FFmpeg、libsndfile、SoXR) | vane-extension-native-media provider wheel |
import vane con = vane.connect() vane.load_installed_extension("native_media", connection=con) con.execute("SET image_backend = 'native'")
image_to_tensor 与 IMAGE 访问器属于基础引擎,无论选择哪种后端都不需要可选扩展。