记录三模型话轮检测实验、44点评估及延迟对比
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import argparse
|
||||
import librosa
|
||||
import sys
|
||||
import numpy as np
|
||||
|
||||
from inference import predict_endpoint
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Smart Turn v3.2 CPU inference")
|
||||
parser.add_argument("audio", help="Audio file to analyze")
|
||||
parser.add_argument("--start-ms", type=int, default=0, help="Current user turn start")
|
||||
parser.add_argument("--end-ms", type=int, help="Decision time (exclusive audio cutoff)")
|
||||
args = parser.parse_args()
|
||||
if args.start_ms < 0 or (args.end_ms is not None and args.end_ms <= args.start_ms):
|
||||
parser.error("Require 0 <= start-ms < end-ms")
|
||||
file_path = args.audio
|
||||
|
||||
try:
|
||||
print(f"Loading audio file: {file_path}")
|
||||
# Load the audio file with original sample rate
|
||||
audio, sr = librosa.load(file_path, sr=None, mono=True)
|
||||
|
||||
# Slice before resampling so no audio after the decision is included.
|
||||
start_sample = args.start_ms * sr // 1000
|
||||
end_sample = len(audio) if args.end_ms is None else args.end_ms * sr // 1000
|
||||
if start_sample >= len(audio) or end_sample > len(audio):
|
||||
raise ValueError("Requested time range lies outside the audio")
|
||||
audio = audio[start_sample:end_sample]
|
||||
|
||||
print(f"Loaded audio with sample rate: {sr} Hz, duration: {len(audio) / sr:.2f} seconds")
|
||||
|
||||
# If needed, resample to 16kHz (the model's expected sample rate)
|
||||
if sr != 16000:
|
||||
print(f"Resampling from {sr}Hz to 16000Hz")
|
||||
audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)
|
||||
|
||||
# Convert audio to float32 if not already
|
||||
if audio.dtype != np.float32:
|
||||
audio = audio.astype(np.float32)
|
||||
|
||||
# Make sure the audio is in the expected range [-1, 1]
|
||||
if np.max(np.abs(audio)) > 1.0:
|
||||
audio = audio / np.max(np.abs(audio))
|
||||
|
||||
# Call the prediction function with both audio and sample rate
|
||||
print("Running endpoint prediction...")
|
||||
result = predict_endpoint(audio)
|
||||
|
||||
# Display results
|
||||
print("\nResults:")
|
||||
print(f"Prediction: {'Complete' if result['prediction'] == 1 else 'Incomplete'}")
|
||||
print(f"Probability of complete: {result['probability']:.4f}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error processing audio file: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user