Python机器学习不给出显示结果

问题描述 投票:0回答:1

由于这是我第一次编码,所以所有工作都是由 ChatGPT 完成的。这也是我第一次使用 StackOverflow

我正在尝试制作一个使用 ML 来检查快照的 python 脚本。 这是我的代码:

import numpy as np
import sounddevice as sd
import librosa
import tensorflow as tf

# Constants
SAMPLE_RATE = 44100
DURATION = 1  # 1 second of audio
SAMPLES_PER_SEGMENT = SAMPLE_RATE * DURATION
MAX_PAD_LEN = 536

# Load the trained model
model = tf.keras.models.load_model('snap_detector_model.h5')

# ... [rest of the imports and constants]

def extract_features(signal, max_pad_len=MAX_PAD_LEN):
    try:
        print("Starting MFCC extraction...", flush=True)
        mfccs = librosa.feature.mfcc(y=signal[:, 0], sr=SAMPLE_RATE, n_mfcc=13)
        print("MFCC extraction complete. Padding...", flush=True)
        pad_width = max_pad_len - mfccs.shape[1]
        mfccs = np.pad(mfccs, pad_width=((0, 0), (0, pad_width)), mode='constant')
        print("Padding complete.", flush=True)
        return mfccs.flatten()
    except Exception as e:
        print(f"Error during feature extraction: {e}", flush=True)

def audio_callback(indata, frames, time, status):
    volume_norm = np.linalg.norm(indata) * 10
    print(f"Volume: {volume_norm}", flush=True)
    if volume_norm > 0.1:
        print("Volume threshold exceeded. Extracting features...", flush=True)
        features = extract_features(indata)
        if features.shape[0] != 6968:
            print(f"Incorrect feature shape: {features.shape[0]}, skipping prediction.", flush=True)
            return
        print("Features extracted. Making prediction...", flush=True)
        features = np.expand_dims(features, axis=0)
        predictions = model.predict(features)
        print(f"Prediction: {predictions[0][0]}", flush=True)
        if predictions[0][0] > 0.5:
            print("SNAP!", flush=True)

with sd.InputStream(callback=audio_callback, channels=1, samplerate=SAMPLE_RATE, blocksize=SAMPLES_PER_SEGMENT):
    print("Listening for snaps...", flush=True)
    while True:
        pass

好像有很多错误。每次触发语音阈值时,它都会检测为预测为 1.0 的快照。它也没有显示“SNAP!”在我结束脚本之前。

这是聊天记录的链接。您可能应该滚动到底部以获得有用的东西。

https://chat.openai.com/share/01ab09e2-5200-40bd-b70e-bc83af497a52 https://chat.openai.com/share/d2c4f919-ac78-42a4-a65d-4d31f91192f3

让我知道我是否应该发送 .h5 文件或任何其他文件

python machine-learning cmd chatbot
1个回答
0
投票

您有一个雄心勃勃的第一个编码项目!有几件事可能会影响您的结果。

模型准确性:您需要检查的第一件事是您的模型在验证或测试数据集上的实际执行情况。测试集上的高精度模型意味着该模型可以有效地区分啪啪声和其他声音。

数据预处理:推理(实时预测)期间提取特征的方式应该与训练期间提取特征的方式完全匹配。这包括采样率、持续时间、MFCC 数量、填充等等。

音量标准化:您使用 np.linalg.norm(indata) * 10 作为音量。目前尚不清楚这是否是在这种情况下测量体积的正确方法,或者 0.1 是否是正确的阈值。

异步行为:audio_callback 函数应该是非阻塞且快速的。任何延迟或错误都可能导致错过快照。

刷新输出:打印时使用flush=True,这应该立即将字符串写入流。但由于声音处理的异步性质,控制台输出可能仍然存在延迟,这就是为什么您可能看不到“SNAP!”立即。

调试预测:您可以添加调试行来检查提取的 MFCC、它们的形状以及馈送到模型进行预测的输入。 您可以考虑以下一些更改:

检查 indata 的形状以确保它与您的期望一致。 通过在每一步打印出所有张量的形状和类型来进行调试。 尝试使用更简单的脚本版本,手动输入您知道包含快照的文件,并查看模型是否正确识别它。 如果您想分享 .h5 模型以及您用于测试的一些音频文件,这将有助于提供更详细的诊断。

© www.soinside.com 2019 - 2024. All rights reserved.