样例和指导

图片处理

以下是一个简单的参考样例,通过多模态 SDK 的 Image 读取并进行缩放、裁剪,最后转化为通用的 Numpy 数组展示上述操作的效果。

import mm  # 引入多模态SDK包
import matplotlib.pyplot as plt  # 仅做图像展示使用

dog_img = mm.Image.open("/home/test.jpg")  # 通过多模态Image类,从实际文件构造Image变量(注意文件权限不能超过640)
dog_resized_img = dog_img.resize((480, 480), mm.Interpolation.BICUBIC, mm.DeviceMode.CPU)  # 对构造的图像进行缩放操作
dog_cropped_img = dog_img.crop(100, 100, 512, 630, mm.DeviceMode.CPU)  # 对构造的图像进行裁剪操作

resized_np = dog_resized_img.numpy()  # 将缩放的图像转化为Numpy数组,方便后续对其进行展示
cropped_np = dog_cropped_img.numpy()  # 将裁剪的图像转化为Numpy数组,方便后续对其进行展示
original_dog = dog_img.numpy()  # 将构造的原图像转化为Numpy数组,方便后续对其进行展示

# 以下为展示图像代码
plt.figure(figsize=(15, 5))

plt.subplot(1, 3, 1)
plt.title("Original")
plt.imshow(original_dog)
plt.axis("off")

plt.subplot(1, 3, 2)
plt.title("Resized (480x480)")
plt.imshow(resized_np)
plt.axis("off")

plt.subplot(1, 3, 3)
plt.title("Cropped (512x630)")
plt.imshow(cropped_np)
plt.axis("off")

plt.show()

视频处理

多模态 SDK 的视频解码接口支持两种参数设置方式,用户可按需选择:

  • 如果传入了期望解码的视频帧 ID列表且其内容合法,SDK 会根据这些帧 ID 进行解码,返回的 image 对象列表长度与帧 ID 列表长度一致。
  • 如果帧 ID 列表为空,则可以通过期望解码后获取的总帧数参数进行设置,此时接口会从视频中均匀采样指定数量的帧,最终返回的 image 对象列表长度等于设定的帧数。
  1. 传入目标解码的帧 ID 集合,得到的返回值列表大小为传入的帧 ID 集合大小。

    from mm import video_decode
    import os
    
    norm_file_path = "/home/test/xxx.mp4"  # 要解码的视频文件地址
    os.chmod(norm_file_path, 0o640)  # 修改权限
    mm_images = video_decode(norm_file_path, "cpu", [0, 48, 96, 145, 193, 241, 290, 338, 386, 435, 483, 531], 10)
    print(f"mm_images.size: {len(mm_images)}")
    
    mm_images.size: 12
    
  2. 传帧 ID 列表为空,传入期望解码后获取的总帧数,得到的返回值列表大小为传入的期望解码后获取的总帧数大小。

    from mm import video_decode
    import os
    
    norm_file_path = "/home/test/xxx.mp4"  # 要解码的视频文件地址
    os.chmod(norm_file_path, 0o640)  # 修改权限
    mm_images = video_decode(norm_file_path, "cpu", [], 10)
    print(f"mm_images.size: {len(mm_images)}")
    
    mm_images.size: 10
    

音频处理

以下示例演示单音频文件加载与批量加载(请将路径替换为实际 wav 文件,并确保文件权限不高于 640):

from mm import load_audio

# 单文件加载
single_audio_path = "/path/to/speech.wav"
waveform, sr = load_audio(single_audio_path)
print(f"single audio shape: {waveform.shape}, sample rate: {sr}")

# 从文件列表批量加载
audio_file_paths = ["/path/to/audio1.wav", "/path/to/audio2.wav"]
batch_from_filelist = load_audio(audio_file_paths)
print(f"batch count: {len(batch_from_filelist)}")

# 从目录批量加载
audio_directory = "/path/to/audio_dir"
batch_from_directory = load_audio(audio_directory)
print(f"directory batch count: {len(batch_from_directory)}")

如需指定重采样率,可传入 sr 参数,例如 load_audio(single_audio_path, sr=16000)