功能函数参考
mm.Tensor
Tensor类将被用于承载任意模态的通用数据,实现通用数据的创建、管理以及数据复制等操作。
Tensor属性列表
| 属性名 | 类型 | 说明 | 备注 |
|---|---|---|---|
| device | str | Tensor所在设备。 | 默认为"cpu"。 |
| dtype | DataType | Tensor数据类型。 | 默认为DataType.FLOAT32。 |
| shape | list | Tensor的维度信息。 | 默认为空list。 |
| format | TensorFormat | Tensor数据排布类型。 | 默认为TensorFormat.ND。 |
| nbytes | int | Tensor数据占用字节数。 | 默认为0。 |
Tensor.set_format
功能描述
设置数据排布格式。
函数原型
set_format(tensor_format: TensorFormat)
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| tensor_format | TensorFormat | 必选 | 输入需要设置的排布格式。支持ND、NHWC和NCHW。若设置为NHWC或者NCHW,需要确保tensor的shape有四维。 |
示例
from mm import Tensor, TensorFormat
tensor = Tensor()
tensor.set_format(TensorFormat.ND)
Tensor.clone
功能描述
深拷贝Tensor实例对象为新的Tensor实例。
函数原型
clone()-> Tensor
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 新的Tensor实例。 |
示例
from mm import Tensor
tensor = Tensor()
tensor_new = tensor.clone()
Tensor.from_numpy
功能描述
将Numpy数组转化为Tensor对象。
函数原型
from_numpy(nd_array: numpy.ndarray) -> Tensor:
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| nd_array | numpy.ndarray | 必选 | 输入的dtype支持int8、uint8和float32数据类型; 输入numpy.ndarray需为行主序,内存必须连续。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 通过numpy.ndarray创建的Tensor实例。 |
说明
构造后的Tensor对象与numpy.ndarray共享数据,数据的生命周期由numpy.ndarray对象维护。
示例
from mm import Tensor
import numpy as np
arr = np.zeros((1024, 768, 3), dtype=np.uint8)
tensor = Tensor.from_numpy(arr)
Tensor.numpy
功能描述
将Tensor对象转化为Numpy数组。
函数原型
numpy()-> np.ndarray
返回值说明
| 数据类型 | 说明 |
|---|---|
| numpy.ndarray | 转换后的Numpy数组。 |
说明
- Tensor对象转换为numpy.ndarray对象,转换后的numpy.ndarray与Tensor共享数据,数据的生命周期由Tensor对象维护。
- Tensor所处的device必须为CPU。
示例
from mm import Tensor
import numpy as np
arr = np.zeros((1024, 768, 3), dtype=np.uint8)
tensor = Tensor.from_numpy(arr)
arr_new = tensor.numpy()
Tensor.from_torch
功能描述
将torch.Tensor张量转化为Tensor对象。
函数原型
from_torch(torch_tensor: torch.Tensor) -> Tensor:
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| torch_tensor | torch.Tensor | 必选 | 输入的dtype支持int8、uint8和float32数据类型;输入torch.Tensor需为行主序,内存必须连续;输入torch.Tensor的Device必须在CPU上。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 通过torch.Tensor创建的Tensor对象。 |
说明
构造后的Tensor对象与torch.Tensor共享数据,数据的生命周期由torch.Tensor对象维护。
示例
from mm import Tensor
import torch
tensor = torch.zeros((1024, 768, 3), dtype=torch.uint8)
mm_tensor = Tensor.from_torch(tensor)
Tensor.torch
功能描述
将Tensor对象转化为torch.Tensor张量。
函数原型
torch()-> torch.Tensor
返回值说明
| 数据类型 | 说明 |
|---|---|
| torch.Tensor | 转换后的torch.Tensor张量。 |
说明
- Tensor对象转换为torch.Tensor对象,转换后的torch.Tensor与Tensor共享数据,数据的生命周期由Tensor对象维护。
- Tensor所处的device必须为CPU。
示例
from mm import Tensor
import torch
tensor = torch.zeros((1024, 768, 3), dtype=torch.uint8)
mm_tensor = Tensor.from_torch(tensor)
torch_tensor = mm_tensor.torch()
Tensor.normalize
功能描述
Tensor类成员函数,使用均值和标准差对当前对象进行归一化。给定n个通道的均值:(mean[1],...,mean[n])和标准差:(std[1],..,std[n]),此变换将对当前对象的每个通道进行归一化,即output[channel] = (src[channel] - mean[channel]) / std[channel],其中src为当前Tensor对象。
函数原型
def normalize(mean: list[float], std: list[float], device_mode: DeviceMode = DeviceMode.CPU)-> Tensor
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| mean | list[float] | 必选 | 均值数组,长度必须为3,参数范围为[0, 1]。 |
| std | list[float] | 必选 | 标准差数组,长度必须为3,参数范围大于0,小于3.4028235e38。 |
| device_mode | DeviceMode | 可选 | 运行的模式,当前仅支持CPU。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 转换后的Tensor对象。 |
说明
- Tensor对象的format仅支持NCHW或NHWC,N仅支持1,C仅支持3。
- Tensor对象的数据类型仅支持Float32。
- Tensor对象所处的device必须为CPU。
示例
from mm import Tensor, TensorFormat
import torch
tensor = torch.randn(1, 3, 224, 224, dtype=torch.float32)
mm_tensor = Tensor.from_torch(tensor)
mm_tensor.set_format(TensorFormat.NCHW)
mean = [0.1, 0.1, 0.1]
std = [0.1, 0.1, 0.1]
dst_mm_tensor = mm_tensor.normalize(mean, std)
mm.Image
Image类将被用于承载图像数据,实现通用图像的创建、管理以及数据复制等操作。
Image属性列表
| 属性名 | 类型 | 说明 |
|---|---|---|
| device | str | Image所在设备。仅支持cpu。 |
| dtype | DataType | Image数据类型。仅支持DataType.UINT8。 |
| size | list | Image的大小。 |
| format | ImageFormat | Image数据图像格式。 |
| nbytes | int | Image数据占用字节数。 |
| height | int | Image的高度。 |
| width | int | Image的宽度。 |
Image.open
功能描述
通过指定路径创建Image。
函数原型
open(path:str | bytes, device:str | bytes = b'cpu')
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| path | str | bytes | 必选 | 输入的路径必须是有效的,且长度不超过4096,路径中不能包含软链接,大小不能超过1GB,且文件权限不得超过640,User/Group/Others的权限分别不得超过6、4、0。且文件后缀应为jpg或jpeg;输入的图像必须是jpg和jpeg中的一种且宽和高均应在[10,8192]区间内;目前通过Image.open构建的仅为RGB。 |
| device | str | bytes | 可选 | 设备类型,目前只支持cpu且默认为cpu。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | 通过路径创建的新Image实例。 |
示例
from mm import Image
img= Image.open("/home/test.jpg", "cpu")
Image.from_numpy
功能描述
从Numpy数组转化为Image实例。
函数原型
from_numpy(
nd_array: numpy.ndarray,
image_format: ImageFormat,
device: str | bytes = b"cpu"
) -> Image:
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| nd_array | numpy.ndarray | 必选 | 输入的Numpy数组。需满足以下条件:输入的dtype仅支持uint8数据类型,输入Numpy数组维度必须为3,不能为空;输入三维数组时RGB和BGR图像格式对应数组形状必须为[H, W, 3];BGR_PLANAR和RGB_PLANAR图像格式对应数组形状必须为[3, H, W];输入Numpy数组各元素数值范围为[0, 255],且为行主序,内存必须连续;宽和高均应在[10,8192]区间内。 |
| image_format | ImageFormat | 必选 | 图像格式,支持RGB、BGR、BGR_PLANAR和RGB_PLANAR,输入的类型需与numpy的数据维度对应。 |
| device | str | bytes | 可选 | 设备类型,目前只支持cpu且默认为cpu。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | 通过numpy.ndarray创建的Image实例。 |
说明
构造后的Image对象与numpy.ndarray共享数据,数据的生命周期由numpy.ndarray对象维护。
示例
from mm import Image, ImageFormat
import numpy as np
arr = np.zeros((1024, 768, 3), dtype=np.uint8)
img = Image.from_numpy(arr, ImageFormat.RGB, "cpu")
Image.numpy
功能描述
将Image实例对象转换为Numpy数组。
函数原型
numpy()-> numpy.ndarray
返回值说明
| 数据类型 | 说明 |
|---|---|
| numpy.ndarray | 转换后的Numpy数组。 |
说明
- 输出ndarray形状根据图像格式决定: 当Image实例对象格式为RGB和BGR时为[H, W, 3];当format为RGB_PLANAR和BGR_PLANAR时为[3, H, W]。
- Image所处的device必须为CPU。
示例
from mm import Image
import numpy as np
img = Image.open("/home/test.jpg", "cpu")
arr = img.numpy()
Image.from_torch
功能描述
将 torch.Tensor 转化为 Image 实例。
函数原型
from_torch(
torch_tensor: torch.Tensor,
image_format: ImageFormat,
device: str | bytes = b"cpu"
) -> Image:
参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| torch_tensor | torch.Tensor | 必选 | 输入的 pytorch 张量。需满足:dtype 仅支持 uint8;维度必须为 3;RGB/BGR 形状为 [H, W, 3],PLANAR 格式为 [3, H, W];数值范围 [0, 255],行主序且内存连续,设备在 cpu 上;宽高均在 [10, 8192] 区间内。 |
| image_format | ImageFormat | 必选 | 支持 RGB、BGR、BGR_PLANAR 和 RGB_PLANAR,需与 torch.Tensor 的数据维度对应。 |
| device | str | bytes | 可选 | 设备类型,目前只支持 cpu 且默认为 cpu。 |
说明
构造后的Image对象与torch.Tensor共享数据,数据的生命周期由torch.Tensor对象维护。
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | 通过torch.Tensor创建的Image实例。 |
示例
from mm import Image, ImageFormat
import torch
tensor = torch.zeros((1024, 768, 3), dtype=torch.uint8)
img = Image.from_torch(tensor, ImageFormat.RGB, "cpu")
Image.torch
功能描述
将Image实例对象转换为torch Tensor张量。
函数原型
torch()-> torch.Tensor
返回值说明
| 数据类型 | 说明 |
|---|---|
| torch.Tensor | 转换后的torch张量。 |
说明
- 输出Tensor形状根据图像格式决定: 当Image实例对象format为RGB和BGR时为[H, W, 3],当format为BGR_PLANAR和RGB_PLANAR时为[3, H, W]。
- Image所处的device必须为CPU。
示例
from mm import Image
import torch
img = Image.open("/home/test.jpg", "cpu")
tensor = img.torch()
Image.from_pillow
功能描述
将PIL图像对象转换为Image对象。
函数原型
from_pillow(pillow_image: PIL.Image.Image) -> Image
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| pillow_image | PIL.Image.Image | 必选 | 输入Pillow Image对象,且其mode属性仅支持"L"(灰度图)、"RGB"(RGB图像)和"RGBA"(包含透明度的RGB图像)。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | 构建的Image对象。 |
示例
from mm import Image
from PIL import Image as PImage
import numpy as np
img_np = np.random.randint(0, 255, size=(1, 400, 400, 3), dtype=np.uint8)
img_pil = PImage.fromarray(img_np[0])
img_mm = Image.from_pillow(img_pil)
Image.pillow
功能描述
将Image对象转换为PIL图像对象。
函数原型
pillow()-> PIL.Image.Image
返回值说明
| 数据类型 | 说明 |
|---|---|
| PIL.Image.Image | 转换后的Pillow图像实例。 |
说明
- 输出PIL.Image.Image dtype需与Image实例对象保持一致,当前仅支持uint8。
- 输出PIL的Image实例对象mode为“RGB”。
- Image所处的device必须为CPU。
示例
from mm import Image
from PIL import Image as PImage
pillow_image = PImage.open("/home/test.jpg")
img = Image.from_pillow(pillow_image)
pillow_image_new = img.pillow()
Image.clone
功能描述
深拷贝Image实例对象为新的Image实例。
函数原型
clone()-> Image
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | 通过深拷贝创建的新Image实例。 |
示例
from mm import Image
img = Image.open("/home/test.jpg", "cpu")
img_copy = img.clone()
Image.resize
功能描述
对Image实例对象进行缩放操作。
函数原型
resize(size: Tuple[int, int], interpolation: Interpolation, device_mode: DeviceMode) -> "Image"
参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| size | Tuple[int, int] | 必选 | resize之后的图像宽高。size需为两维,第1维是width,第2维是height,且宽和高均应在[10, 8192]区间内。 |
| interpolation | Interpolation | 必选 | resize插值算法,当前仅支持BICUBIC。 |
| device_mode | DeviceMode | 可选 | resize运行的模式,当前仅支持CPU。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | resize操作后获得的新Image实例。 |
说明
当前仅支持图像格式为RGB或BGR,数据格式为UINT8,各元素值范围在[0,255]。
示例
from mm import Image, DeviceMode, Interpolation
img = Image.open("/home/test.jpg", "cpu")
img_resize = img.resize((10,10), Interpolation.BICUBIC, DeviceMode.CPU)
Image.crop
功能描述
对Image实例对象进行裁剪操作。
函数原型
crop(top: int, left: int, height: int, width: int, device_mode: DeviceMode) -> "Image":
参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| top | int | 必选 | 裁剪的上起始坐标。从0取值,(top+height)不能超过原图高度。 |
| left | int | 必选 | 裁剪的左起始坐标。从0取值,(left+width)不能超过原图宽度。 |
| height | int | 必选 | 裁剪区域高度,范围为[10, 原图高度-top]。 |
| width | int | 必选 | 裁剪区域宽度,范围为[10, 原图宽度-left]。 |
| device_mode | DeviceMode | 可选 | crop运行的模式,当前仅支持CPU。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Image | crop操作后获得的新Image实例。 |
说明
当前仅支持图像格式为RGB或BGR,数据格式为UINT8,各元素值范围在[0,255]。
示例
from mm import Image, DeviceMode
img = Image.open("/home/test.jpg", "cpu")
img_crop = img.crop(10, 10, 10, 10, DeviceMode.CPU)
Image.to_tensor
功能描述
对Image实例对象进行[0,255]至[0.0, 1.0]缩放,以及格式转换能力(HWC->CHW)。
说明
当前仅支持图像格式为RGB或BGR,数据格式为UINT8,各元素值范围在[0,255]。 输出的Tensor实例数据类型默认为DataType.FLOAT32。
函数原型
def to_tensor(target_format: TensorFormat = TensorFormat.NCHW, device_mode: DeviceMode = DeviceMode.CPU) -> "Tensor":
参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| target_format | TensorFormat | 可选 | 转换后Tensor实例的格式,支持NHWC和NCHW,默认值为NCHW。 |
| device_mode | DeviceMode | 可选 | 运行的模式,当前仅支持CPU。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 操作后获得的Tensor实例。 |
示例
from mm import Image, TensorFormat, DeviceMode
img = Image.open("/home/test.jpg", "cpu")
dst_tensor = img.to_tensor(TensorFormat.NCHW, DeviceMode.CPU)
日志注册
用户注册日志级别与日志回调函数。
register_log_conf
日志注册函数。
函数原型
register_log_conf(min_level: LogLevel, callback: Callable[[LogLevel, str, str, int, str], None])
输入参数说明
| 参数名 | 类型 | 可选/必选 | 说明 |
|---|---|---|---|
| min_level | LogLevel | 必选 | 最小日志级别,只有大于等于该级别的日志才会输出。不允许传入None。 |
| callback | Callable[[LogLevel, str, str, int, str], None] | 必选 | 日志回调函数,传入None时使用内部默认的日志输出函数。 |
注意
在日志回调函数中抛异常会触发C++侧抛出异常,引起程序coredump,建议在回调中捕获异常并处理。
示例
from mm import register_log_conf, LogLevel
def custom_log_handler(level: LogLevel, file: str, func: str, line: int, msg: str) -> None:
print(f"[custom][{level}] {file}:{line} ({func}) - {msg}")
register_log_conf(LogLevel.ERROR, custom_log_handler)
mm.video_decode
功能描述
将传入的视频文件解码,并返回Image对象列表。
函数原型
def video_decode(video_path: str | bytes, device: str | bytes, frame_indices: set = None, sample_num: int = -1) -> list:
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| video_path | str | bytes | 必选 | 解码视频路径,当前仅支持mp4格式文件,分辨率支持480P-4K。 |
| device | str | bytes | 必选 | 解码设备,当前仅支持cpu。 |
| frame_indices | set | 可选 | 期望解码的视频帧ID。 |
| sample_num | int | 可选 | 期望解码后获取的总帧数。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| list[Image] | 解码后的Image对象列表。格式为RGB,数据类型为uint8。 |
说明
- 期望解码的视频帧ID取值范围为[0, 视频总帧数-1),默认为空集合,参数优先级高于期望解码后获取的总帧数。该参数意为目标解码的帧ID集合。
- 期望解码后获取的总帧数取值范围为(0, 视频总帧数],默认值为-1,最终解码ID集合为通过视频帧总数计算等间隔抽取。
- 若frame_indices和sample_num均未指定,会返回失败。
- 分辨率支持说明:目前支持的视频帧宽高为[480, 480] - [4096, 4096]。
- 输入的路径必须是有效的,且长度不超过4096,路径中不能包含软链接,且文件权限不得超过640,User/Group/Others的权限分别不得超过6、4、0。
示例
from mm import video_decode
file_path = "test.mp4"
mm_images = video_decode(file_path, "cpu", [], 32)
mm.normalize
功能描述
使用均值和标准差对Tensor对象进行归一化。给定n个通道的均值:(mean[1],...,mean[n])和标准差:(std[1],..,std[n]),此变换将对输入Tensor对象的每个通道进行归一化,即output[channel] = (src[channel] - mean[channel]) / std[channel]。
函数原型
def normalize(src: Tensor, mean: list[float], std: list[float], device_mode: DeviceMode = DeviceMode.CPU)-> Tensor
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| src | Tensor | 必选 | 输入Tensor实例。 |
| mean | list[float] | 必选 | 均值数组,长度必须为3,参数范围为[0, 1]。 |
| std | list[float] | 必选 | 方差数组,长度必须为3,参数范围为[0,3.4028235e38]。 |
| device_mode | DeviceMode | 可选 | 运行的模式,当前仅支持CPU。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Tensor | 转换后的Tensor对象。 |
说明
- 输入Tensor对象的format仅支持NCHW或NHWC,N仅支持1,C仅支持3。
- 输入Tensor对象的数据类型仅支持Float32。
- Tensor对象所处的device必须为CPU。
示例
from mm import Tensor, TensorFormat, normalize, DeviceMode
import torch
tensor = torch.randn(1, 3, 224, 224, dtype=torch.float32)
mm_tensor = Tensor.from_torch(tensor)
mm_tensor.set_format(TensorFormat.NCHW)
mean = [0.1, 0.1, 0.1]
std = [0.1, 0.1, 0.1]
dst_mm_tensor = normalize(mm_tensor, mean, std, DeviceMode.CPU)
mm.load_audio
功能描述
使用音频加载接口,对给定的音频实现加载。支持对单音频文件加载以及对批量音频的并行加载,支持开关重采样。
函数原型
def load_audio(audio_inputs: Union[str, List[str]], sr: Optional[int] = None)
-> Union[Tuple[Tensor, int], List[Tuple[Tensor, int]]]
输入参数说明
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| audio_inputs | Union[str, List[str]] | 必选 | 输入单音频路径 / 多音频所在目录 / 音频列表。 |
| sr | Optional[int] | 可选 | 若用户指定重采样率,则按该采样率进行重采样,否则不进行重采样。 |
返回值说明
| 数据类型 | 说明 |
|---|---|
| Union[Tuple[Tensor, int], List[Tuple[Tensor, int]]] | 单音频返回(音频tensor数据, 采样率),多音频返回(音频tensor数据,采样率)列表。 |
说明
- 输入音频仅支持wav文件。
- 可加载音频文件的范围为[1,128]。
- 用户输入的采样率必须为[1,64000]范围内的正整数。
- 多通道音频会自动转换为单通道音频。
示例
from mm import load_audio
single_audio_path = "/path/to/speech.wav"
audio_file_paths = ["/path/to/audio1.wav", "/path/to/audio2.wav"]
audio_directory = "/path/to/audio_dir"
waveform, sr = load_audio(single_audio_path)
batch_from_filelist = load_audio(audio_file_paths)
batch_from_directory = load_audio(audio_directory)
mm.BaseFrameSelector
基于文本-图像匹配的关键帧选择器抽象基类,封装模型初始化、特征提取、边界定位、输入校验和相似度计算等公共能力。该类不可直接实例化,需通过子类KRangFrameSelector或KFrameSelector使用。
BaseFrameSelector属性列表
| 属性名 | 类型 | 说明 |
|---|---|---|
| model_path | str | CLIP模型权重路径。 |
| device_id | int | NPU设备索引。 |
| model_type | str | 模型类型,取值为"clip"(英文)或"cn_clip"(中文)。 |
| batch_size | int | 图像特征提取批次大小,默认为64。 |
| similar_threshold | float | 文本-图像相似度衰减阈值,相似度低于(最大相似度 - 该值)的帧将被过滤。默认为0.025。 |
| similar_threshold_image | float | 图像-图像相似度梯度阈值,用于场景边界检测,相邻帧间余弦相似度梯度超过该值时判定为场景切换。默认为0.015。 |
| image_size | tuple | 输入图像缩放尺寸,需与模型训练尺寸一致。默认为(672, 672)。 |
BaseFrameSelector.__init__
初始化关键帧选择器,加载指定模型并完成参数校验。
__init__(model_path: str, device_id: int, model_type: str = "clip", similar_threshold: float = 0.025, image_similar_threshold: float = 0.015, image_size: tuple = (672, 672))
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| model_path | str | 必选 | CLIP模型权重路径,必须为非空字符串,且指向有效的目录。 |
| device_id | int | 必选 | NPU设备索引,必须为整数。 |
| model_type | str | 可选 | 模型类型,取值为"clip"(英文)或"cn_clip"(中文),默认为"clip"。 |
| similar_threshold | float | 可选 | 文本-图像相似度衰减阈值,取值范围为[0, 1],默认为0.025。 |
| image_similar_threshold | float | 可选 | 图像相似度梯度阈值,用于场景边界检测,取值范围为[0, 1],默认为0.015。 |
| image_size | tuple | 可选 | 输入图像缩放尺寸,形如(width, height),宽高取值范围为[10, 8192],默认为(672, 672)。 |
说明
- BaseFrameSelector为抽象类,不可直接实例化,需通过子类KRangFrameSelector或KFrameSelector创建实例。
- model_path所指向的目录必须存在,且目录权限必须为640,目录属主必须与当前用户一致。
BaseFrameSelector.select_keyframes
从视频帧序列中选择与查询文本相关的关键帧,为抽象方法,由子类实现具体选择策略。
select_keyframes(query: str, frames: List[np.ndarray], sample_num: int, do_resample: bool) -> Tuple[List[int], List[np.ndarray]]
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| query | str | 必选 | 描述目标视觉内容的查询文本,必须为非空字符串。 |
| frames | List[np.ndarray] | 必选 | 视频帧列表。 |
| sample_num | int | 必选 | 最大关键帧数量,必须为正整数。 |
| do_resample | bool | 必选 | 是否在区间内进行自适应重采样。 |
| 数据类型 | 说明 |
|---|---|
| Tuple[List[int], List[np.ndarray]] | 元组,包含关键帧索引列表和关键帧图像列表。 |
mm.KRangFrameSelector
基于区间合并的关键帧选择器,继承自BaseFrameSelector。定位与查询文本相关的连续场景区间,并在区间内自适应采样关键帧, 适用于需要时序上下文的任务。
KRangFrameSelector.select_keyframes
区间关键帧选择主流程:提取特征并计算相似度后,贪心选择候选帧并扩展为场景区间,合并相邻语义相似区间,最后在区间内自适应重采样。
select_keyframes(query: str, frames: List[np.ndarray], sample_num: int, do_resample: bool) -> Tuple[List[int], List[np.ndarray]]
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| query | str | 必选 | 描述目标视觉内容的查询文本,必须为非空字符串。 |
| frames | List[np.ndarray] | 必选 | 视频帧列表。 |
| sample_num | int | 必选 | 最大关键帧数量,必须为正整数。 |
| do_resample | bool | 必选 | 是否在合并区间内进行自适应重采样。为True时,在区间内按相似度top-k与均匀填充策略重采样;为False时,仅返回合并后的区间端点。 |
| 数据类型 | 说明 |
|---|---|
| Tuple[List[int], List[np.ndarray]] | 元组,包含关键帧索引列表(已去重排序)和关键帧图像列表。 |
from mm import KRangFrameSelector
import numpy as np
selector = KRangFrameSelector(model_path="/path/to/clip_model", device_id=0, model_type="clip")
frames = [np.random.randint(0, 255, (720, 1280, 3), dtype=np.uint8) for _ in range(100)]
indices, key_frames = selector.select_keyframes(query="a cat sitting on a sofa", frames=frames, sample_num=8, do_resample=True)
mm.KFrameSelector
离散关键帧选择器,继承自BaseFrameSelector。选择与查询文本相关且视觉多样的离散关键帧, 适用于需要视觉多样性的任务。
KFrameSelector.select_keyframes
离散关键帧选择主流程:提取特征并计算相似度后,贪心选择候选帧,并通过特征距离去重保证视觉多样性。
select_keyframes(query: str, frames: List[np.ndarray], sample_num: int, do_resample: bool = False) -> Tuple[List[int], List[np.ndarray]]
| 参数名 | 数据类型 | 可选/必选 | 说明 |
|---|---|---|---|
| query | str | 必选 | 描述目标视觉内容的查询文本,必须为非空字符串。 |
| frames | List[np.ndarray] | 必选 | 视频帧列表。 |
| sample_num | int | 必选 | 最大关键帧数量,必须为正整数。 |
| do_resample | bool | 可选 | 该参数在KFrameSelector中未使用,默认为False。 |
| 数据类型 | 说明 |
|---|---|
| Tuple[List[int], List[np.ndarray]] | 元组,包含关键帧索引列表(已去重排序)和关键帧图像列表。 |
from mm import KFrameSelector
import numpy as np
selector = KFrameSelector(model_path="/path/to/clip_model", device_id=0, model_type="clip")
frames = [np.random.randint(0, 255, (720, 1280, 3), dtype=np.uint8) for _ in range(100)]
indices, key_frames = selector.select_keyframes(query="a dog running in the park", frames=frames, sample_num=8)