108 lines
3.8 KiB
Python
108 lines
3.8 KiB
Python
#!/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) |