• 苹果Audio Classifier使用问题


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 SCP0219 2024-04-15 09:20 采纳率: 33.3% 浏览 3 首页/ 移动开发 / 苹果Audio Classifier使用问题 iosswift语音识别 我计划开发一款iOS平台的声音识别分类软件,但在模型上遇到了问题目前方案是使用苹果自带CreateML,但是训练出来的Audio Classifier要求输入不是音频文件,而是MultiArray (Float32 15600)我的问题是这个模型应该如何部署到应用中?以及我该对录制生成的音频文件做什么处理才能得到这个MultiArray?特征提取? 更进一步的问题是有其他更简便高效的模型方案吗?有教程或文档链接最佳。提前感谢 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-15 09:21
      关注

      引自免费微信小程序:皆我百晓生

      为了实现声音识别分类功能,首先你需要了解如何将音频数据转换成MultiArray (Float32 15600)格式,然后部署模型到iOS应用中。这里我会一步步指导你完成这个过程,并提供一些可能的优化方案。

      步骤1:准备音频数据

      你需要将音频文件转换为Float32类型的数组。这通常涉及到读取音频文件、将其解码为PCM(脉冲编码调制)格式,然后采样率调整为模型所需的16kHz。在Python中,可以使用pydub库来处理音频文件,numpy库来创建数组。下面是一个简单的示例:

      from pydub import AudioSegment
      import numpy as np
      
      # 读取音频文件
      audio = AudioSegment.from_file("your_audio_file.mp3")
      
      # 将音频转为pcm格式
      audio_bytes = audio.raw_data
      
      # 获取音频的样本数
      sample_count = len(audio_bytes) // 2
      
      # 转换为float32数组
      audio_samples = np.frombuffer(audio_bytes, dtype=np.int16).astype(np.float32) / 32768.0
      
      # 由于你提到模型需要15600个样本,这里假设我们已经截取了足够长度的音频片段
      if len(audio_samples) < 15600:
          raise ValueError("Audio sample length is less than required by the model.")
      

      步骤2:保存为JSON格式

      接下来,你需要将audio_samples数组转换为JSON格式,以便在iOS应用中加载。你可以使用json库来实现:

      import json
      
      audio_samples_json = json.dumps(audio_samples.tolist())
      

      步骤3:在iOS应用中加载模型并预测

      在iOS应用中,你需要先加载Core ML模型,然后解析从Python脚本中获取的JSON数据。以下是Swift代码示例:

      import UIKit
      import CoreML
      
      class ViewController: UIViewController {
          
          @IBOutlet weak var resultLabel: UILabel!
          
          let model = try! AudioClassifier(configuration: MLModelConfiguration())
          
          override func viewDidLoad() {
              super.viewDidLoad()
              
              // 假设你有一个包含JSON字符串的变量 `audioSamplesJson`
              if let audioData = audioSamplesJson.data(using: .utf8),
                 let audioArray = try? JSONDecoder().decode([Double].self, from: audioData),
                 let floatArray = audioArray.map { Float($0) } {
                  
                  let input = AudioClassifierInput(audioSamples: floatArray)
                  do {
                      let prediction = try model.prediction(input: input)
                      
                      // 更新结果标签
                      DispatchQueue.main.async {
                          self.resultLabel.text = "Predicted label: \(prediction.target)"
                      }
                  } catch {
                      print("Prediction error: \(error)")
                  }
              } else {
                  print("Invalid JSON data")
              }
          }
      }
      

      优化方案:

      1. 使用预处理库:如果你发现上述过程复杂,可以考虑使用像torchaudio这样的库进行音频预处理,它提供了更高级的功能,比如多通道处理、降噪等。
      2. 模型选择:Apple的CreateML工具生成的模型可能不是最优选择。你可以尝试使用预训练的深度学习模型,如DeepSpeech(由Mozilla开发)、SpeechRecognition库(基于Google Speech API),或者Hugging Face的Wav2Vec2等。
      3. 模型微调:对于预训练模型,你可能需要根据你的特定任务对其进行微调,以提高性能。这通常涉及重新训练模型的最后一层,或者整个模型的一部分。
      4. 实时预测:如果你的应用需要实时预测,可以考虑使用AVFoundation框架中的AVAudioEngine来捕获音频流,然后按需进行预测。

      请注意,实际应用中,你可能需要处理音频文件的播放、录音、错误检查等问题。以上代码仅作为概念证明,你可能需要根据具体需求进行修改。同时,确保你已正确安装了所有必要的库,并且运行环境支持这些库。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-04-15 09:21
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      您提出的问题是如何将使用CreateML训练出的音频分类模型部署到iOS应用中,并且如何处理录音生成的音频文件以获得模型需要的MultiArray格式。
      1. 如何部署模型到应用中? 苹果官方提供了一个Core ML框架,用于将机器学习模型集成到iOS应用程序中。您可以使用Xcode的Create ML工具来训练模型,并将其导出为Core ML格式,然后将其添加到您的iOS应用程序项目中。 以下是将Core ML模型添加到Xcode项目中的步骤: 1.1 创建一个新Xcode项目。 1.2 将.CoreML模型文件从Finder拖到Xcode项目文件夹中。 1.3 在Xcode项目导航器中,选择您的项目,然后选择您要添加模型的目标。 1.4 在“Build Phases”选项卡下,单击“Add a New Build Phase”按钮,并选择“New Copy Files Phase”选项。 1.5 在“Copy Files”部分下,选择“Products Directory”作为“Destination”,然后将模型文件拖动到“Copy Files”部分中。 1.6 将模型文件的“Destination”设置为“Resources”。 1.7 在应用程序的代码中,使用Core ML框架加载模型。 以下是加载模型并使用它进行分类的示例代码:
      import CoreML
      import AVFoundation
      class AudioClassifier {
          let model: AudioClassificationModel = {
              do {
                  return try AudioClassificationModel(configuration: MLModelConfiguration())
              } catch {
                  fatalError("Could not load model: \(error)")
              }
          }()
          
          func classify(audioFile: AVAudioFile) throws -> String {
              let buffer = try MLAudioBuffer(file: audioFile)
              let prediction = try model.prediction(input: buffer)
              
              return prediction.classLabel
          }
      }
      
      1. 如何处理录音生成的音频文件以获得模型需要的MultiArray格式? 在使用CreateML训练音频分类模型时,您可以选择将音频文件转换为MFCC(梅尔频率倒谱系数)特征。这些特征将被用于训练模型,并用于分类来自应用程序的新音频文件。 您可以使用以下代码生成MFCC特征:
      import CoreML
      import AVFoundation
      let audioFile = try AVAudioFile(url: URL(fileURLWithPath: "path/to/audiofile.wav"))
      let buffer = try MLAudioBuffer(file: audioFile)
      let featureProvider = MLAudioFrameFeatureProvider(
          audioBuffer: buffer,
          configuration: MLAudioFrameFeatureExtractorConfiguration(
              windowDuration: 0.025,
              windowStride: 0.010,
              includeFrequencyMagnitude: false,
              includeAutoCorrelation: false,
              includeMFCCs: true,
              numberOfMFCCCoefficients: 40,
              numberOfMelFilters: 40
          )
      )
      let mfccs = featureProvider.mfccs!
      let multiArray = try MLMultiArray(shape: [1, mfccs.count as NSNumber], dataType: .float32)
      for (index, value) in mfccs.enumerated() {
          multiArray[index] = NSNumber(value: value)
      }
      
      1. 有其他更简便高效的模型方案吗?有教程或文档链接最佳。 除了使用CreateML和Core ML框架之外,您还可以使用其他开源的音频分类库,例如librosa和Kaldi。手动编写模型并训练它们可能需要更多的代码和专业知识,但可能也会产生更好的结果。 以下是几个可能有用的库和文档:
      2. librosa: 用于音频分析的Python库,提供了各种特征提取和信号处理工具。它可以用于生成MFCC特征,在许多音频分类任务中都表现良好。https://librosa.github.io/librosa/
      3. Kaldi: 开源语音识别工具包,提供了训练和部署深度学习模型的工具。它包括用于音频特征提取和数据处理的工具,并可以使用高级算法进行复杂的数据分析。https://kaldi-asr.org/
      4. Sound Classification using Deep Learning – Stanford University: 这是斯坦福大学的音频分类教程,介绍了使用神经网络训练生成音频分类模型的方法。https://stanford.edu/class/ee398b/handouts/lectures/07-DeepLearningForAudio.pdf 总的来说,每个音频分类任务都有不同的要求,需要根据特定的应用和数据来决定最佳的方法。

      展开全部

      评论
    • GISer Liu 2024-04-15 09:21
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,我会分步骤详细解释如何部署你的声音识别分类软件,以及处理音频文件以生成所需的 MultiArray。最后,我还会提供一些替代方案和资源链接。

      1. 模型部署到应用中

      你可以使用 Core ML 将模型部署到 iOS 应用中。Create ML 生成的模型可以直接转换为 Core ML 格式。以下是部署步骤:

      1. 使用 Create ML 训练你的音频分类模型。
      2. 将生成的 .mlmodel 文件添加到你的 Xcode 项目中。
      3. 在项目中使用 Core ML 来加载和使用模型进行预测。

        2. 处理音频文件以生成 MultiArray

        苹果的 Create ML 通常要求输入数据以 MultiArray 格式,这需要一些预处理步骤。以下是一种可能的处理方法:
      4. 加载音频文件 :使用 AVFoundation 框架加载音频文件。
      5. 音频特征提取 :使用音频处理库(如 AudioKit 或 Accelerate 框架)来提取音频特征。常用的特征包括 MFCC(梅尔频率倒谱系数)和 Mel-Spectrogram(梅尔频谱图)等。
      6. 转换为 MultiArray :将提取的特征转换为 Float32 类型的 MultiArray,并确保其大小与模型期望的输入大小匹配。

        3. 其他替代方案

        除了使用 Create ML 外,你还可以考虑以下替代方案:
      • 使用 TensorFlow Lite :使用 TensorFlow 训练声音分类模型,并将其转换为 TensorFlow Lite 格式,然后在 iOS 应用中使用 TensorFlow Lite 运行时进行推理。
      • 使用 PyTorch :使用 PyTorch 训练声音分类模型,并将其转换为 ONNX 格式,然后使用 ONNX Runtime 在 iOS 应用中运行模型。
      • 使用预训练模型 :使用已经训练好的声音分类模型,例如 OpenVINO 中提供的模型,然后在应用中进行微调以适应你的特定任务。

        4. 资源链接

      • Create ML 文档
      • Core ML 文档
      • AVFoundation 文档
      • AudioKit GitHub
      • Accelerate Framework 文档
        希望这些解决方案能够帮助你顺利完成你的声音识别分类软件!

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • 源代码大师 博客专家认证 2024-04-15 09:23
      关注

      您提出了一些很好的问题。使用 CreateML 创建 Audio Classifier 模型确实需要一些额外的处理步骤,让我们一起探讨一下。

      1. 部署 Audio Classifier 模型:

        • 在 CreateML 训练完模型后,可以导出 Core ML 格式的模型文件,并将其集成到您的 iOS 应用中。
        • 在应用中,您可以使用 Core ML 框架来加载和使用这个模型。只需将录制的音频文件输入到模型中即可进行分类预测。
      2. 处理录制的音频文件:

        • CreateML 要求的 MultiArray (Float32 15600) 输入格式代表一个 15600 维度的浮点数特征向量。
        • 要得到这个特征向量,您需要对录制的音频文件进行特征提取和处理。
        • 一种常见的做法是使用短时傅里叶变换(STFT)或 Mel-frequency cepstral coefficients (MFCC) 等方法从音频中提取特征。可以使用第三方库如 TensorFlow Lite、CoreML 或 librosa 来实现这一步。
      3. 其他模型方案:

        • 除了 CreateML 之外,您也可以考虑使用其他的深度学习框架,如 TensorFlow Lite 或 PyTorch,从头训练自己的 Audio Classifier 模型。这可能需要更多的工作,但能提供更大的灵活性。
        • 您可以参考一些开源的教程和示例代码,如 TensorFlow 的 Audio Recognition 教程,或 PyTorch 的 Audio Classification 示例。
      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 14:18
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      针对这个问题,我有以下解决方案:

      1. 将模型部署到应用中
      • 首先,确保你的模型是 Core ML 格式的模型。(应该是,因为你是用 CreateML 训练出来的)。
      • 在 Xcode 中创建一个 iOS 项目,并将模型文件拷贝到你的项目中。
      • 在 Xcode 的项目导航器中找到自动生成的 Swift 文件。
      • 在你的代码中加载模型,使用以下代码:
      let model = try! Audio_Classifier(configuration: .init())
      

      这里的 Audio_Classifier 是你模型的类名。

      1. 获取 MultiArray (Float32 15600)

      我看到你提到了你的模型需要 MultiArray (Float32 15600),这是一个二维的多维数组。

      要获取 MultiArray,你需要对录制的音频文件进行处理,提取特征。关于特征提取,你可以使用比如 MFCC、音频信号分割等方法。

      在 CreateML 中,你可以使用提供的音频特征采集器来处理音频文件,并生成可以作为训练数据的 MultiArray。

      1. 其他模型方案

      如果你需要一个更简单高效的模型,可以尝试使用一些已经预训练好的深度学习模型,比如基于卷积神经网络的模型、循环神经网络的模型等等。你可以通过一些深度学习框架,比如TensorFlow、PyTorch、Keras等在这些模型上进行原型设计、训练,然后将模型转成 Core ML 模型格式。针对你这个问题,Apple 现在有一个新的项目叫做Sound Classifier可以直接使用,这个好像比CreateML训练出来的模型accuracy要高。

      1. 学习资源链接

      如果想更深入的了解 iOS 平台上的音频识别,推荐学习一些如图像/语音识别、语音合成相关的机器学习(深度学习)的知识,在这个基础上再去学习和实践 iOS 平台上的音频识别。

      这里有一些比较不错的学习资源链接可以参考:

      • 官方文档:Core ML - Apple

      • 官方文档:Sound Classifier - Apple

      • 一本不错的书籍:iOS 自然语言处理实战 - 机械工业出版社

      • 一个不错的教程:Core ML in Swift Tutorial for iOS - Ray Wenderlich

      • 另一个不错的教程:Getting Started with Core ML using Create ML - Medium

      希望这些信息可以对你有所帮助!

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    oracle提高执行更新或新增的SQL效率
    Spring cloud 集成 SkyWalking 实现性能监控、链路追踪、日志收集
    渗透测试——找寻绝对路径的方法总结
    代码随想录Day22 | Leetcode39 组合总和、Leetcode40 数组总和II | Leetcode131 分割回文串
    【PAT甲级 - C++题解】1107 Social Clusters
    ML 模型融合讲解 (bagging, boosting, stacking, blending, 加权)+面试必考知识点
    【Springcloud微服务】MybatisPlus下篇
    NISP-SO安全运维工程师需要掌握的核心能力
    网页前端设计-作业六(CSS3)
    Linux C 多线程
  • 原文地址:https://ask.csdn.net/questions/8088633