97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
#!/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() |