The Input data type is inconsistent with defined schema

news/2024/11/14 4:06:30/
INFO:__main__:上传音频文件 梦阳...
INFO:__main__:加载音频文件 梦阳,采样率: 48000, 信号形状: torch.Size([2, 719872])
INFO:speechbrain.utils.parameter_transfer:Loading pretrained files for: embedding_model, mean_var_norm_emb, classifier, label_encoder
2024-11-11 15:33:09.045 Removing orphaned files...
2024-11-11 15:33:09.129 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.ENQUEUE_FORWARD_MSG
2024-11-11 15:33:09.129 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.SCRIPT_STOPPED_WITH_SUCCESS
2024-11-11 15:33:09.132 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.SHUTDOWN
INFO:__main__:生成了向量:[[ 2.87754226e+00  1.48245068e+01 -2.13020115e+01 -4.97987080e+002.76635838e+01  7.64226532e+00 ..
ERROR:pymilvus.decorators:RPC error: [batch_insert], <DataNotMatchException: (code=1, message=The Input data type is inconsistent with defined schema, {embedding} field should be a float_vector, but got a {<class 'list'>} instead.)>, <Time:{'RPC start': '2024-11-11 15:33:10.161173', 'RPC error': '2024-11-11 15:33:10.161653'}>
ERROR:__main__:插入数据失败:<DataNotMatchException: (code=1, message=The Input data type is inconsistent with defined schema, {embedding} field should be a float_vector, but got a {<class 'list'>} instead.)>
INFO:__main__:索引创建成功
INFO:__main__:索引已成功创建INFO:__main__:正在连接到 Milvus 数据库...
INFO:__main__:集合 speaker_vectors 已存在,直接使用该集合
INFO:__main__:成功加载集合 speaker_vectors
INFO:__main__:正在初始化说话人识别模型...
INFO:speechbrain.utils.fetching:Fetch hyperparams.yaml: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch custom.py: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch custom.py: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch embedding_model.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch embedding_model.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch mean_var_norm_emb.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch mean_var_norm_emb.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch classifier.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch classifier.ckpt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch label_encoder.txt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.fetching:Fetch label_encoder.txt: Fetching from HuggingFace Hub 'speechbrain/spkrec-ecapa-voxceleb' if not cached
INFO:speechbrain.utils.parameter_transfer:Loading pretrained files for: embedding_model, mean_var_norm_emb, classifier, label_encoder
INFO:speechbrain.utils.parameter_transfer:Loading pretrained files for: embedding_model, mean_var_norm_emb, classifier, label_encoder
2024-11-11 15:35:29.369 Removing orphaned files...
2024-11-11 15:35:29.369 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.ENQUEUE_FORWARD_MSG
2024-11-11 15:35:29.458 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.SCRIPT_STOPPED_WITH_SUCCESS
2024-11-11 15:35:29.460 Ignoring event from non-current ScriptRunner: ScriptRunnerEvent.SHUTDOWN
INFO:__main__:上传音频文件 韩啸...
INFO:__main__:加载音频文件 韩啸,采样率: 48000, 信号形状: torch.Size([1, 1311744])
INFO:__main__:生成了向量:[30.520031    8.26371    -0.85929084  0.40325302  4.9857345 ]...
INFO:__main__:成功将 韩啸 的数据插入到 Milvus,当前实体数: 5
INFO:__main__:索引创建成功
INFO:__main__:索引已成功创建
2024-11-11 15:35:34.335 Removing orphaned files...
2024-11-11 15:35:34.414 Script run finished successfully; removing expired entries from MessageCache (max_age=2)

这个问题的原因可能是由于FFmpeg在从mp4转为m4a文件时,音频文件的通道、采样率或格式发生了变化,导致在将数据插入Milvus向量库时出现格式不一致的错误。

以下几点可能是导致此问题的原因:

  1. 音频通道数的不同:从错误信息来看,您成功上传的音频文件是单声道 (torch.Size([1, 1311744])),而失败的文件是双声道 (torch.Size([2, 719872]))。
  2. 数据格式的差异:FFmpeg转换时可能会将音频编码成不同的格式,导致数据的维度或类型不一致,进而导致Milvus的float_vector字段数据不匹配。

解决方法

为了确保所有的音频数据格式一致,可以在加载和处理音频文件时进行以下处理:

  1. 转换为单声道:在加载音频文件时,将音频数据强制转换为单声道。
  2. 规范采样率:确保所有音频的采样率一致,使用 48000 Hz 或您应用中所需的其他固定采样率。
  3. 确保输出的嵌入向量是一维数组:多通道的音频可能会输出多维的嵌入向量,这可能会与Milvus的预期格式不符。

修改代码示例

upload_audio 函数中,添加对音频通道和采样率的规范化处理,确保所有音频文件被转换为单声道且采样率一致:

python">def upload_audio(file, name):logger.info(f"上传音频文件 {name}...")signal, fs = torchaudio.load(file, backend='ffmpeg')logger.info(f"加载音频文件 {name},采样率: {fs}, 信号形状: {signal.shape}")# 统一音频格式:转换为单声道,采样率为48000 Hzif signal.shape[0] > 1:signal = signal.mean(dim=0, keepdim=True)  # 将双声道或多声道转换为单声道if fs != 48000:signal = torchaudio.transforms.Resample(orig_freq=fs, new_freq=48000)(signal)fs = 48000embeddings = classifier.encode_batch(signal)vector = embeddings.squeeze().detach().numpy()logger.info(f"生成了向量:{vector[:5]}...")  # 打印前5个值以示例# 生成唯一的 idid = int(time.time() * 1000)  # 使用当前时间戳作为 ID,确保唯一性# 插入数据data = [[id],  # 主键 ID[name],  # name 字段[vector.tolist()]  # 向量字段]try:collection.insert(data)collection.flush()logger.info(f"成功将 {name} 的数据插入到 Milvus,当前实体数: {collection.num_entities}")except Exception as e:logger.error(f"插入数据失败:{e}")

说明

  1. 将音频转换为单声道signal.mean(dim=0, keepdim=True) 将多通道音频合并为单通道。
  2. 重新采样为固定采样率:通过 torchaudio.transforms.Resample 将所有音频重新采样为一致的采样率 (48000 Hz),以确保输入格式一致。
  3. 确保向量格式:使用 vector.tolist() 转换为列表,以满足Milvus的向量库数据要求。

检查转换后的文件

另外,可以使用FFmpeg重新转换有问题的音频文件,确保输出为单声道和所需的采样率。以下FFmpeg命令可以转换文件为单声道和48000 Hz采样率:

ffmpeg -i input.mp4 -ac 1 -ar 48000 output.m4a

这样可以进一步确保音频格式与您的应用需求一致,并减少数据不匹配的可能性。


http://www.ppmy.cn/news/1546832.html

相关文章

Ceph 中PG与PGP的概述

在Ceph分布式存储系统中&#xff0c;PG&#xff08;Placement Group&#xff09;和PGP&#xff08;Placement Group for Placement purpose&#xff09;是两个至关重要的概念&#xff0c;它们共同决定了数据在集群中的分布和复制方式。以下是关于Ceph中PG和PGP关系的详细解释&a…

从零创建vue+elementui+sass+three.js项目

初始化&#xff1a; vue init webpack projectnamecd projectnamenpm install支持sass: npm install sass --save-dev npm install sass-loader7.1.0 --save-dev npm install node-sass4.12.0 --save-devbuild/webpack.base.conf.js添加 rules: [...,{test: /\.scss$/,loade…

【独立同分布】

独立同分布&#xff08;independent and identically distributed&#xff0c;i.i.d.&#xff09;在概率统计理论中&#xff0c;指随机过程中&#xff0c;任何时刻的取值都为随机变量&#xff0c;如果这些随机变量服从同一分布&#xff0c;并且互相独立&#xff0c;那么这些随机…

论文阅读《BEVFormer》

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers 目录 摘要1 介绍2 相关工作2.1 基于Transformer的2D感知 摘要 3D视觉感知任务对于自动驾驶系统至关重要&#xff0c;包括基于多相机图像的3D检测和地图分割。…

MySQL Workbench导入数据比mysql命令行慢

1.数据量 包含2812979条数据的csv文件 2.myql命令行用LOAD DATA INFILE命令导入 耗时1分钟13秒 3.用MySQL Workbench导入 从第一天晚上22点到次日下午16点才导入了45万条数据 4.原因 MySQL Workbench导入csv数据是使用自带的python和一系列的python代码&#xff0c;而mys…

魅力标签云,奇幻词云图 —— 数据可视化新境界

目录 目的原理详解建议 标签云&#xff1a;用于汇总生成的标签&#xff0c;一般是独立词汇运行前的准备代码示例 词云&#xff1a;对本文中出现频率较高的词&#xff0c;视觉上突出显示总结 目的 掌握文本与文档可视化&#xff1a;使用特定软件或编程语言&#xff08;如Python…

Linux 进程线程间通信总结

线程 线程共享存储空间主要带来的问题是数据同步和互斥。由于线程在同一进程中运行&#xff0c;它们共享相同的内存空间&#xff0c;任何线程都可以访问共享数据。这样&#xff0c;多个线程并发执行时&#xff0c;可能会导致以下两种主要问题&#xff1a; 互斥问题&#xff0…

打响反对人工智能的第一枪

序言&#xff1a;人工智能的讨论不能只有一片叫好的声音&#xff0c;一味的追捧反而可能隐藏巨大的危机。因此&#xff0c;必须有反对的声音&#xff0c;且越强烈越能激发深入思考。本篇文章的作者就以犀利的视角&#xff0c;漂亮地打响了反对人工智能应用的第一枪。 我以前一…