Ai_GirlFriend/test_current_asr.py

97 lines
3.2 KiB
Python
Raw Permalink Normal View History

2026-03-03 19:06:01 +08:00
#!/usr/bin/env python3
"""
测试当前的 ASR 功能
使用真实的语音文件
"""
import os
import requests
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
def test_current_asr():
"""测试当前的 ASR 端点"""
try:
# 创建一个简单的测试音频文件(实际应该是真实录音)
import wave
import struct
import math
# 创建包含语音的测试音频
sample_rate = 16000
duration = 2.0 # 2秒
# 生成一个更复杂的音频信号(模拟语音)
samples = []
for i in range(int(sample_rate * duration)):
t = i / sample_rate
# 混合多个频率,模拟语音
sample = int(16000 * (
0.3 * math.sin(2 * math.pi * 200 * t) + # 基频
0.2 * math.sin(2 * math.pi * 400 * t) + # 谐波
0.1 * math.sin(2 * math.pi * 800 * t) + # 高频
0.05 * (2 * (t * 1000 % 1) - 1) # 噪音
))
samples.append(max(-32767, min(32767, sample)))
# 创建 WAV 文件
wav_filename = "test_speech.wav"
with wave.open(wav_filename, 'w') as wav_file:
wav_file.setnchannels(1) # 单声道
wav_file.setsampwidth(2) # 16-bit
wav_file.setframerate(sample_rate) # 16kHz
# 写入音频数据
for sample in samples:
wav_file.writeframes(struct.pack('<h', sample))
print(f"✅ 创建测试音频: {wav_filename}")
print(f"📊 文件大小: {os.path.getsize(wav_filename)} 字节")
# 发送到 ASR 端点
url = "http://192.168.1.141:30101/voice/call/asr"
with open(wav_filename, 'rb') as f:
files = {'audio': ('test_speech.wav', f, 'audio/wav')}
headers = {'Authorization': 'Bearer test-token'}
print(f"📤 发送到 ASR 端点: {url}")
response = requests.post(url, files=files, headers=headers, timeout=30)
print(f"📊 响应状态码: {response.status_code}")
print(f"📋 响应内容: {response.text}")
if response.status_code == 200:
try:
data = response.json()
if data.get('code') == 1 and 'data' in data and 'text' in data['data']:
result_text = data['data']['text']
print(f"🎯 识别结果: {result_text}")
return True
else:
print(f"⚠️ 响应格式异常: {data}")
except Exception as e:
print(f"❌ 解析响应失败: {e}")
else:
print(f"❌ 请求失败: {response.status_code}")
# 清理文件
os.remove(wav_filename)
return False
except Exception as e:
print(f"❌ 测试失败: {e}")
return False
def main():
print("🚀 测试当前 ASR 功能...")
if test_current_asr():
print("🎉 ASR 功能测试成功!")
else:
print("💥 ASR 功能测试失败!")
if __name__ == "__main__":
main()