news 2026/8/7 12:46:35

手语识别及翻译项目实战系列--数据转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手语识别及翻译项目实战系列--数据转换

text转为npz格式

CSL数据集中的pose-gloss中text 文件一行数据实例

-0.01646529 -0.6482327 1.502301 -0.02531151 -0.3631941 1.570885 -0.02312568 0.04488507 1.634066 -0.03375742 -0.08601215 1.62303 -0.1698013 -0.2011915 1.549954 -0.1945323 -0.3977987 1.495995 -0.1950186 -0.5810784 1.407555 -0.1900637 -0.6325662 1.390355 0.1222058 -0.2088086 1.575616 0.1466089 -0.4060238 1.525056 0.162049 -0.582612 1.441606 0.1556938 -0.6228903 1.418582 -0.07448247 -0.6340373 1.46204 -0.09610306 -1.00437 1.446867 -0.1176976 -1.363221 1.457754 -0.1110597 -1.39173 1.339637 0.04221528 -0.6352441 1.479441 0.03347063 -1.007394 1.431241 0.02595523 -1.36769 1.41056 0.03370204 -1.384942 1.28791 -0.0317168 -0.1542985 1.612552 -0.1869177 -0.6876513 1.365173 -0.1652057 -0.6285808 1.371044 0.1484023 -0.6751753 1.395068 0.1230987 -0.6076492 1.428954

原来的.txt是 CSL2018 已经提取好的姿态关键点数据,不是普通文本语料。我们把它转成.npz,主要是为了让 PyTorch 训练更方便、更快、更稳定。

原来的 TXT 是什么
以这个文件为例:

P01_01_00_0._body.txt

它表示一个手语样本的视频姿态序列。文件名大致可以这样理解:

P01 第 1 个表演者 / signer 01_00_0 这个类别下的某个样本编号 _body 身体姿态关键点

这个.txt里每一行是一帧视频的姿态数据。

每一行有75个数字:

x1 y1 z1 x2 y2 z2 ... x25 y25 z25

也就是:

25 个关键点 × 每个关键点 3 个坐标 = 75 个数

所以一个 TXT 文件本质上是一个三维数组:

[T, 25, 3]

其中:

T 这个样本的视频帧数 25 每帧有 25 个身体关键点 3 每个关键点的 x、y、z 坐标

比如一个文件有 80 行,那它就是:

[80, 25, 3]

为什么转成 NPZ
.txt是给人看或跨平台保存方便的格式,但训练模型时不太适合直接用。

转成.npz的原因主要有几个:

  1. 读取更快
    .txt每次都要一行一行读字符串,再把字符串切开、转成浮点数。训练时会反复读很多样本,这样很慢。.npz里直接保存的是 NumPy 数组,加载后马上就是数值矩阵。

  2. 数据形状更明确
    原始 TXT 只是很多数字。转成.npz后我们明确保存为:

keypoints.shape==[T,25,3]

训练代码就不用猜每一行怎么拆。

  1. 和现有 Dataset 代码匹配
    你现在项目里的CSLIsolatedDataset期望读取的是:
np.load(path)["keypoints"]

也就是说.npz里必须有一个叫keypoints的数组。为了接入现有训练代码,所以要转成.npz

  1. 避免训练时重复预处理
    如果每次训练都从.txt开始解析,会重复消耗时间。现在转换一次,以后训练、评估都直接读.npz

  2. 更适合深度学习流水线
    PyTorch 训练需要的是张量,.npz.txt更接近模型需要的输入格式。

转换前后关系
原始 TXT:

一行 = 一帧 一行 75 个数 = 25 个点 × 3 维坐标 整个文件 = 一个手语动作样本

转换后的 NPZ:

{"keypoints":array([T,25,3],dtype=float32)}

manifest 文件负责告诉训练程序:

{"keypoint_path":"keypoints/000/P01_01_00_0_body.npz","label":0,"video_id":"P01_01_00_0"}

含义是:

这个样本的数据文件在哪里 它属于第几个类别 它的视频/样本编号是什么

所以可以理解为:

TXT 是原始姿态序列文本格式 NPZ 是训练用的数值数组缓存格式 manifest 是训练样本索引表

核心不是改变数据内容,而是把同一份姿态数据整理成模型更容易读取的格式。

.npz 文件

1. 本质结论

.npz 不是 NumPy 专属格式,但它是 NumPy 标准的数组存储格式,原生设计就是配合 NumPy 使用

底层结构

.npz本质是一个zip 压缩包,里面每个文件对应一个单独的.npy文件:

  • .npy:单个数组二进制存储格式(NumPy 自定义二进制)
  • .npz:多个.npy打包压缩的 zip 包

2. 谁能读写它?

① 原生最优:NumPy

importnumpyasnp# 保存多个数组np.savez("data.npz",a=arr1,b=arr2)# 读取data=np.load("data.npz")print(data["a"],data["b"])

这是官方标准用法,读写最简单、无额外依赖。

② 其他 Python 库也能读取

只要库支持解析 zip + 解析.npy二进制,就能打开 npz:

  • PyTorch:可以先用np.load()读出 numpy 数组,再转 tensor;无直接 load npz API
  • TensorFlow:同理,依赖 numpy 中转
  • SciPy:完全兼容,底层复用 NumPy 的 savez/load
  • zipfile + numpy.lib.format:纯底层手动解析(不用np.load

示例手动拆解 npz(证明它是普通zip):

importzipfile,numpy.lib.formatasnpyfmtwithzipfile.ZipFile("data.npz")aszf:fornameinzf.namelist():withzf.open(name)asf:arr=npyfmt.read_array(f)

③ 非 Python 语言很难直接读

C++/Matlab/Java 没有原生 npz 解析器:

  • 需要自己实现.npy二进制解析 + zip 解压
  • 工业跨语言通用方案一般不用 npz,改用:hdf5、csv、二进制raw、protobuf

3. 关键区分

  1. 逻辑用途:设计初衷就是批量保存多个 NumPy 数组,科研、数值计算场景几乎只配合 numpy 使用;
  2. 文件封装:底层是通用 zip,不是私有加密格式,任何能解压 zip 的工具都能打开看到内部.npy
  3. 数组编码:内部单个文件是.npy,这是 NumPy 独有的二进制编码,别的语言/库不能直接解析裸.npy,必须实现对应解码逻辑。

4. 总结

  • 日常使用场景:可以认为它是专门给 NumPy 配套的格式,几乎只有做数值计算、操作 ndarray 时才会用到;
  • 技术底层:只是 zip 包裹 NumPy 私有数组文件,不是完全封闭专属格式,能手动拆解,但脱离 NumPy 会非常麻烦。

补充对比

格式归属适用场景
.npyNumPy单个数组
.npzNumPy多个数组打包压缩
.h5 / .hdf5通用科学存储跨语言、大数据、复杂数据集
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 12:45:31

pdf-lib:跨平台JavaScript PDF处理库的技术架构与应用实践

pdf-lib:跨平台JavaScript PDF处理库的技术架构与应用实践 【免费下载链接】pdf-lib Create and modify PDF documents in any JavaScript environment 项目地址: https://gitcode.com/gh_mirrors/pd/pdf-lib pdf-lib是一个基于TypeScript实现的纯JavaScript…

作者头像 李华
网站建设 2026/8/7 12:44:59

硬件工程师必备:从电源测试到通信调试的电路板系统化调试指南

1. 项目概述:从“能亮”到“好用”的必经之路 刚入行那会儿,总觉得电路板调试是件挺玄学的事儿。明明原理图、PCB都画得明明白白,元器件也焊得整整齐齐,可一上电,要么纹丝不动,要么冒烟放炮,要么…

作者头像 李华
网站建设 2026/8/7 12:44:43

Jupyter Lab安装配置全攻略:从零搭建一体化数据科学工作台

1. 项目概述:为什么Jupyter Lab是数据工作者的新宠? 如果你还在用传统的Jupyter Notebook,那今天这个内容可能会彻底改变你的工作流。我最初接触Jupyter Notebook时,觉得它简直是数据分析的神器,但用久了就发现&#x…

作者头像 李华
网站建设 2026/8/7 12:41:55

天猫防关联系统:底层架构降维碾压,把店群做成工业流水线

天猫防关联系统:底层架构降维碾压,把店群做成工业流水线 做店群的老板都知道,天猫的多店防关联管理,是店群运营中最耗人力也最容易出错的环节。 做店群的老板都知道,最怕的就是底层IP和硬件指纹穿帮。一旦平台判定你…

作者头像 李华
网站建设 2026/8/7 12:41:48

gRPC核心架构与四种通信模式详解:从原理到生产实践

1. 项目概述:为什么gRPC正在重塑服务间通信 如果你正在构建微服务、移动应用后端,或者任何需要高效、跨语言通信的系统,那么你大概率已经听过gRPC这个名字。它不再是谷歌实验室里的一个实验品,而是成为了现代分布式系统架构中&…

作者头像 李华