lhotse

GitHub
1.1k 270 非常简单 1 次阅读 今天Apache-2.0数据工具音频图像Agent开发框架
AI 解读 由 AI 自动生成,仅供参考

Lhotse 是一款专为机器学习项目设计的 Python 库,旨在让音频、文本、图像和视频等多模态数据的准备工作变得更加灵活高效。作为下一代 Kaldi 语音处理生态的重要组成部分,它主要解决了研究人员在处理大规模多模态数据集时面临的流程繁琐、格式不统一以及分布式训练数据加载困难等痛点。

这款工具非常适合从事语音识别、多模态学习的研究人员以及需要构建复杂数据管道的 AI 开发者使用。Lhotse 的核心亮点在于其独特的“切片(Cuts)”概念,允许用户像操作代码对象一样灵活地裁剪、组合和变换音视频数据片段。它还提供了先进的数据加载算法,支持数据集混合、高效的动态分桶(bucketing)以及针对分布式训练的数据随机化处理。此外,Lhotse 内置了多种常用语料库的标准预处理方案,并推出了专为顺序 I/O 优化的"Lhotse Shar"存储格式,显著提升了数据读取速度。通过纯 Python 的设计理念,Lhotse 降低了多模态数据处理的门槛,帮助用户更专注于模型创新而非数据清洗细节。

使用场景

某语音识别初创团队正在构建一个支持多语种、多场景的端到端训练管线,需要整合 Librispeech、Common Voice 及内部采集的数十万小时异构音频数据。

没有 lhotse 时

  • 数据加载代码冗余:针对不同数据集格式(如 Kaldi archive、JSON manifest、原始 WAV)需编写大量重复的解析脚本,维护成本极高。
  • 动态增强难以实现:无法在训练时实时进行音频切片拼接(Mixing)或变速变调,只能预先离线处理所有增强数据,导致存储空间爆炸式增长。
  • 多模态对齐困难:处理音视频同步或音频 - 文本对齐时,缺乏统一的时间轴管理对象,常出现切片错位或元数据丢失。
  • 分布式训练效率低:在多节点训练中,数据随机化策略简陋,容易导致部分 GPU 负载不均或某些样本被重复/遗漏训练。

使用 lhotse 后

  • 统一数据抽象层:利用 lhotse 的 Cut 对象统一封装音频、文本及时间戳,通过标准 Recipe 一键加载各类开源_corpus_,代码量减少 70%。
  • 链式动态增强:借助 CutSet 的链式 API,在数据加载流中实时执行混音、裁剪和声学增强,无需占用额外磁盘空间即可生成无限多样的训练样本。
  • 精准多模态调度:内置的时间轴机制自动确保音频切片与对应文本、视频帧严格对齐,彻底消除因手动计算时间偏移导致的对齐错误。
  • 智能数据桶化:内置的高效 Bucketing 算法自动按语音时长分组并均衡分配至各训练节点,显著提升了 GPU 利用率并加速模型收敛。

lhotse 将繁琐的多模态数据准备转化为灵活的 Python 流水线,让团队能专注于模型架构创新而非数据清洗细节。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notesLhotse 是一个用于多模态数据准备的 Python 库,核心功能不强制依赖 GPU。torchaudio 现为可选依赖,若未安装需设置环境变量 LHOTSE_REQUIRE_TORCHAUDIO 为 false 以使用 soundfile 作为后端。支持通过 pip 直接安装或从源码进行开发模式安装。可选安装 lilcom 以获得更高的特征存储压缩率,或安装 torchcodec (需 PyTorch >= 2.9) 作为优先的音频解码后端。
python3.7+
torch
torchaudio (可选)
soundfile
lilcom (可选)
torchcodec (可选,>=0.9)
lhotse hero image

快速开始

PyPI Status Python Versions PyPI Status Build Status Documentation Status codecov Code style: black Open In Colab arXiv

Lhotse

Lhotse 是一个 Python 库,旨在使多模态(语音、音频、视频、图像、文本)数据的准备更加灵活,并让更广泛的社区能够轻松使用。它与 k2 一起,构成了下一代 Kaldi 语音处理库的一部分。

教程演示和资料

关于

主要目标(更新至 2025 年)

  • 扩展到包括音频、文本、图像和视频模态在内的多模态数据流水线。
  • 提供最先进的数据加载算法,如数据集混合和高效的按需分桶。
  • 处理分布式多节点训练中的数据随机化(或去重)问题。
  • 以 Python 为中心的设计 吸引更广泛的社区参与多模态处理任务。
  • 为常用语料库提供 标准的数据准备配方
  • 通过 音频/视频片段 的概念,实现灵活的模型训练数据准备。
  • 支持高效的顺序 I/O 数据格式,例如 Lhotse Shar(类似于 webdataset)。

教程

我们在 examples 目录中提供了以下教程:

  • 基本完整的 Lhotse 工作流程 Colab
  • 使用 Cuts 转换数据 Colab
  • WebDataset 集成 Colab
  • 如何合并多个数据集 Colab
  • Lhotse Shar:针对顺序 I/O 和模块化的存储格式优化 Colab
  • Lhotse 中的图像和视频支持 Colab

使用示例

请查看以下链接,了解 Lhotse 的实际应用:

  • Icefall 配方:k2 和 Lhotse 的结合点。
  • 最小化 ESPnet+Lhotse 示例:Colab

核心理念

与 Kaldi 类似,Lhotse 提供标准的数据准备配方,但通过特定任务的 Dataset 类实现了与 PyTorch 的无缝集成。数据和元数据以人类可读的文本清单形式呈现,并通过便捷的 Python 类暴露给用户。

image

Lhotse 引入了音频片段的概念,旨在简化训练数据的构建,通过诸如混合、截断和填充等操作,在运行时完成,从而最大限度地减少所需的存储空间。数据增强和特征提取既支持预计算模式——将特征矩阵存储在磁盘上(可选使用 lilcom 压缩后端以提高存储效率),也支持按需计算变换的实时模式。此外,Lhotse 还引入了特征空间片段混合,以兼顾两者的优点。

image

安装

Lhotse 支持 Python 3.7 及更高版本。

Pip

Lhotse 已在 PyPI 上发布:

pip install lhotse

若要安装最新的未发布版本,请执行:

pip install git+https://github.com/lhotse-speech/lhotse

开发环境安装

对于开发环境的安装,您可以 fork 或 clone GitHub 仓库,然后使用 pip 安装:

git clone https://github.com/lhotse-speech/lhotse
cd lhotse
pip install -e '.[dev]'
pre-commit install  # 安装带有代码风格检查的 pre-commit 钩子

# 运行单元测试
pytest test

# 运行 linter 检查
pre-commit run

这是一种可编辑的安装方式(-e 选项),这意味着您对源代码所做的更改会在导入 lhotse 时自动生效(无需重新安装)。[dev] 部分表示您正在安装用于运行测试、构建文档或启动 Jupyter 笔记本的额外依赖项。

环境变量

Lhotse 使用多个环境变量来定制其行为。这些变量如下:

  • LHOTSE_REQUIRE_TORCHAUDIO - 当该变量被设置且其值不是 1Truetrueyes 时,Lhotse 将不会检查是否已安装 torchaudio,并将其从依赖项中移除。这会禁用 Lhotse 的许多功能,但基本功能(包括使用 soundfile 读取音频)仍将保留。

  • LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE - 当从文件加载音频时,如果实际采样数与 Recording.num_samples 中声明的采样数不一致,此变量将发挥作用。有时这是必要的,因为不同的编解码器(甚至同一编解码器的不同版本)在解码压缩音频时可能会采用不同的填充方式。通常,0.1 秒或甚至 0.3 秒的差异仍属合理范围;超过此范围则表明存在严重问题。

  • LHOTSE_AUDIO_BACKEND - 可设置为 CLI 命令 lhotse list-audio-backends 返回的任意值,以覆盖默认的尝试机制,强制使用特定的音频后端。

  • LHOTSE_IO_BACKEND - 可设置为 CLI 命令 lhotse list-io-backends 返回的任意值,以覆盖 Lhotse 使用 open_best() 打开路径、URL 和 URI 的方式(例如在读取清单文件或基于 URL 的 AudioSource 时)。同样,Python 中也可通过 lhotse.available_io_backends() 获取该列表。

  • LHOTSE_RESAMPLING_BACKEND - 可设置为 CLI 命令 lhotse list-resampling-backends 返回的任意值,以覆盖默认行为。

  • LHOTSE_FEATURES_STORAGE_BACKEND - 可设置为任何有效的特征存储后端名称(如 numpy_fileslilcom_chunky),以覆盖默认的特征存储后端(即 numpy_files)。可使用 lhotse.available_storage_backends() 检查当前可用的选项,或使用 lhotse.storage_backend_statuses() 和 CLI 命令 lhotse list-storage-backends 查看完整列表,其中还标注了不可用的后端及其安装提示。如果您已安装 lilcom 并希望获得更小的特征归档文件,建议选择 lilcom_chunky

  • LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE - 当设置为 1 时,若所有可用的音频后端均无法加载指定文件,Lhotse 将输出完整的异常堆栈跟踪(可能非常庞大)。

  • LHOTSE_DILL_ENABLED - 当设置为 1Truetrueyes 时,将在进程间启用基于 dillCutSetSampler 序列化(即使已安装 dill,默认也为禁用状态)。

  • LHOTSE_LEGACY_OPUS_LOADING - (设为 1)将回退到旧版 OPUS 加载机制,该机制会为每个 OPUS 文件启动一个新的 ffmpeg 子进程。

  • LHOTSE_PREPARING_RELEASE - 开发者在发布 Lhotse 新版本时内部使用。

  • TORCHAUDIO_USE_BACKEND_DISPATCHER - 当设置为 1 且 torchaudio 版本低于 2.1 时,将启用 torchaudio 的实验性 ffmpeg 后端。

  • AIS_ENDPOINT 由 AIStore 客户端读取,用于确定 AIStore 端点 URL。这是进行 AIStore 数据加载所必需的。

  • AIS_CONNECT_TIMEOUT - 由 AIStore SDK 用于设置 AIStore 客户端请求的连接超时时间(单位:秒)。设置为 0 表示禁用超时(无超时)。若未设置,则使用 SDK 默认值(3 秒)。

  • AIS_READ_TIMEOUT - 由 AIStore SDK 用于设置 AIStore 客户端请求的读取超时时间(单位:秒)。设置为 0 表示禁用超时(无超时)。若未设置,则使用 SDK 默认值(20 秒)。

  • RANKWORLD_SIZEWORKERNUM_WORKERS 在内部用于向 Lhotse Shar 数据加载子进程中传递信息。

  • READTHEDOCS 在内部用于文档构建。

  • LHOTSE_MSC_OVERRIDE_PROTOCOLS - 当设置时,会在输入数据传递给 MSCIOBackend 之前覆盖协议部分。这在您不想更改现有 URL 格式但仍希望使用 MSCIOBackend 时非常有用。例如,如果您有 s3://s3-bucket/path/to/my/objectgs://gs-bucket/path/to/my/object,可以设置 LHOTSE_MSC_OVERRIDE_PROTOCOLS=s3,gs,将 URL 覆盖为 msc://s3-bucket/path/to/my/objectmsc://gs-bucket/path/to/my/object

  • LHOTSE_MSC_PROFILE - 当设置时,会在输入数据传递给 MSCIOBackend 之前覆盖存储桶名称。这在您的 MSC 配置文件名称与存储桶名称不一致时很有用。例如,如果您有 s3://s3-bucket/path/to/my/object,可以同时设置 LHOTSE_MSC_OVERRIDE_PROTOCOLS=s3LHOTSE_MSC_PROFILE=msc-s3-profile,将 URL 赋值为 msc://msc-s3-profile/path/to/my/object

  • LHOTSE_MSC_BACKEND_FORCED - 当设置为 True 时,将强制 Lhotse 对所有 URL 使用 MSCIOBackend。请谨慎使用,因为如果 MSC 不支持提供的 URL 格式,可能会导致功能失效。

可选依赖项

其他 pip 包。 您可以通过安装相关支持包来利用 Lhotse 的可选功能:

  • pip install lhotse[lilcom] 以启用 lilcom 压缩特性和数组存储后端。如果存储效率很重要,在安装此依赖项后,lilcom_chunky 是首选的特性存储后端。
  • torchcodec(>= 0.9,需要 torch >= 2.9)在检测到时被支持为音频后端。它是基于 FFmpeg 构建的 PyTorch 原生音频解码器。可通过 pip install torchcodec 安装。安装后,它会在默认后端链中优先于 torchaudio。
  • torchaudio 曾经是 Lhotse 的核心依赖项,但现在已成为可选项。请参阅 PyTorch 官方安装文档
  • pip install lhotse[kaldi] 以获得与 Kaldi 兼容的最大化功能集。它包括诸如 kaldi_native_iokaldi_io 的更高效变体)和 kaldifeat 等库,这些库将部分 Kaldi 功能移植到 Python 中。
  • pip install lhotse[orjson] 以实现高达 50% 的 JSONL 清单读取速度提升。
  • pip install lhotse[webdataset]。我们支持将您的数据“编译”成 WebDataset tarball 格式,以提高 I/O 效率。您仍然可以像操作普通的惰性 CutSet 一样与数据交互。要了解更多信息,请查看以下教程:Colab
  • 如果您希望提取语音特征并将其存储为 HDF5 数组,请安装 pip install h5py
  • pip install dill。当安装了 dill 时,我们将使用它来序列化在 .map.filter 等调用中使用 lambda 函数的 CutSet。这在 PyTorch DataLoader 中且 num_jobs>0 时非常有帮助。如果没有 dill,根据您的环境,您可能会看到异常或脚本挂起。
  • pip install aistore 以使用 AIStore 支持的 URL 从 AIStore 读取清单、tar 文件及其他数据(设置 AIS_ENDPOINT 环境变量以激活)。更多详情请参阅 AIStore 文档
  • pip install smart_open 以在 smart_open 支持的任何位置(例如云、http)读取和写入清单及数据。
  • pip install opensmile 以使用 OpenSmile 工具包的 Python 封装进行特征提取。
  • pip install multi-storage-client 以在不同的存储后端中读取和写入清单及数据。更多详情请参阅 multi-storage-client

sph2pipe。 对于读取较旧的 LDC SPHERE (.sph) 音频文件,这些文件使用 ffmpeg 和 sox 不支持的编解码器压缩,请运行:

# CLI
lhotse install-sph2pipe

# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()

它会将其下载到 ~/.lhotse/tools,编译并自动注册到 PATH 中。该程序应能被 Lhotse 自动检测并使用。

示例

我们提供了一些示例脚本,展示如何准备数据并在 Python 中将其加载为 PyTorch Dataset。 这些示例位于 examples 目录中。

以下是一个简短片段,展示 Lhotse 如何使音频数据准备变得快速而简单:

from torch.utils.data import DataLoader
from lhotse import CutSet, Fbank
from lhotse.dataset import VadDataset、SimpleCutSampler
from lhotse.recipes import prepare_switchboard

# 从原始语料分布中准备数据清单。
# RecordingSet 描述了音频录音的元数据;采样率、声道数、时长等。
# SupervisionSet 描述了监督片段的元数据:转录文本、说话人、语言等。
swbd = prepare_switchboard('/export/corpora3/LDC/LDC97S62')

# CutSet 是 Lhotse 的主力工具,允许灵活的数据操作。
# 我们通过以 5 秒为窗口遍历 SWBD 录音来创建 5 秒的切片。
# 在此时,实际并未将音频数据加载到内存或存储到磁盘。
cuts = CutSet.from_manifests(
    recordings=swbd['recordings'],
    supervisions=swbd['supervisions']
).cut_into_windows(duration=5)

# 我们计算 log-Mel 滤波能量并将其存储到磁盘;
# 然后,我们将切片填充至 5 秒,以确保所有切片长度一致,
# 因为每个录音中的最后一个窗口可能持续时间较短。
# 填充将在特征加载到内存后执行。
cuts = cuts.compute_and_store_features(
    extractor=Fbank(),
    storage_path='feats',
    num_jobs=8
).pad(duration=5.0)

# 构建用于语音活动检测任务的 Pytorch Dataset 类:
dataset = VadDataset()
sampler = SimpleCutSampler(cuts, max_duration=300)
dataloader = DataLoader(dataset, sampler=sampler, batch_size=None)
batch = next(iter(dataloader))

VadDataset 将产生包含特征和监督张量对的批次,如下所示——语音大约从第一秒(100 帧)开始:

image

致谢

本项目的部分贡献得到了美国国家科学基金会 CCRI 资助项目 2120435 的支持。

版本历史

v1.32.22026/01/14
v1.32.12025/11/24
v1.32.02025/11/21
1.31.02025/09/18
v1.30.32025/05/15
v1.30.22025/04/28
v1.30.12025/04/21
v1.30.02025/03/19
v1.29.02024/12/13
v1.28.02024/11/19
v1.27.02024/08/22
v1.26.02024/07/26
v1.25.02024/07/18
v1.24.22024/06/25
v1.24.12024/06/10
v1.242024/06/05
v1.232024/04/30
v1.222024/03/07
v1.212024/02/13
v1.202024/01/31

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

160k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|2天前
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|今天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像