Ai_GirlFriend/test_dashscope_asr_simple.py

108 lines
3.8 KiB
Python
Raw Permalink Normal View History

2026-03-04 12:04:21 +08:00
#!/usr/bin/env python3
"""
简单测试 DashScope ASR 功能
"""
import sys
import os
sys.path.append('.')
import dashscope
from dashscope.audio.asr import Transcription
from lover.config import settings
from lover.oss_utils import upload_audio_file, delete_audio_file
import logging
# 设置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def test_dashscope_asr():
"""测试 DashScope ASR 功能"""
# 设置 API Key
dashscope.api_key = settings.DASHSCOPE_API_KEY
logger.info(f"DashScope API Key: {settings.DASHSCOPE_API_KEY[:10]}***")
# 创建测试音频数据(模拟 MP3 文件头)
# 这是一个最小的 MP3 文件头,虽然不是真正的音频,但可以测试 API 调用
mp3_header = bytes([
0xFF, 0xFB, 0x90, 0x00, # MP3 同步字和头信息
0x00, 0x00, 0x00, 0x00, # 填充数据
]) + b"fake mp3 audio data" * 100
logger.info(f"创建测试 MP3 数据,大小: {len(mp3_header)} 字节")
try:
# 上传到 OSS
logger.info("上传测试音频到 OSS...")
file_url = upload_audio_file(mp3_header, "mp3")
logger.info(f"上传成功: {file_url}")
# 验证 URL 格式
if not file_url.startswith('https://'):
logger.error(f"URL 格式错误: {file_url}")
return False
# 调用 DashScope ASR
logger.info("调用 DashScope ASR...")
logger.info(f"文件 URL: {file_url}")
task_response = Transcription.async_call(
model='paraformer-v2',
file_urls=[file_url],
parameters={
'format': 'mp3',
'sample_rate': 16000,
'enable_words': False
}
)
logger.info(f"ASR 任务响应: status_code={task_response.status_code}")
logger.info(f"ASR 任务响应: {task_response}")
if task_response.status_code == 200:
task_id = task_response.output.task_id
logger.info(f"任务创建成功: {task_id}")
# 等待结果(简单等待,不处理结果)
logger.info("等待 ASR 结果...")
try:
result = Transcription.wait(task=task_id)
logger.info(f"ASR 结果: status_code={result.status_code}")
logger.info(f"ASR 结果: {result}")
if result.status_code == 200:
logger.info(f"任务状态: {result.output.task_status}")
if result.output.task_status == "FAILED":
logger.info(f"失败原因: {getattr(result.output, 'code', 'Unknown')}")
logger.info(f"失败消息: {getattr(result.output, 'message', 'Unknown')}")
else:
logger.error(f"获取结果失败: {result.status_code}")
except Exception as wait_error:
logger.error(f"等待结果失败: {wait_error}")
else:
logger.error(f"任务创建失败: {task_response.status_code}")
if hasattr(task_response, 'message'):
logger.error(f"错误消息: {task_response.message}")
# 清理文件
logger.info("清理 OSS 文件...")
delete_audio_file(file_url)
return True
except Exception as e:
logger.error(f"测试失败: {e}")
logger.error(f"错误类型: {type(e)}")
import traceback
logger.error(f"错误堆栈: {traceback.format_exc()}")
return False
if __name__ == "__main__":
success = test_dashscope_asr()
if success:
logger.info("🎉 DashScope ASR 测试完成")
else:
logger.error("💥 DashScope ASR 测试失败")
sys.exit(1)