test-FunAudioLLM / test /01_rpc_test.py
Chenhao
Format the code with claude 3.5
660c142
raw
history blame
1.87 kB
import asyncio
import httpx
from pathlib import Path
from typing import Optional
async def transcribe_audio(
file_path: str,
api_token: str,
model: str = "FunAudioLLM/SenseVoiceSmall",
api_url: str = "http://127.0.0.1:8000/v1/audio/transcriptions"
) -> Optional[dict]:
"""异步发送语音识别请求
Args:
file_path: 音频文件路径
api_token: API 认证令牌
model: 模型名称,默认为 FunAudioLLM/SenseVoiceSmall
api_url: API 服务地址
Returns:
dict: 包含识别结果的字典,失败时返回 None
"""
try:
# 检查文件是否存在
audio_file = Path(file_path)
if not audio_file.exists():
print(f"错误:文件 {file_path} 不存在")
return None
# 准备请求头和文件
headers = {"Authorization": f"Bearer {api_token}"}
files = {
"file": (audio_file.name, audio_file.open("rb")),
"model": (None, model)
}
# 发送异步请求
async with httpx.AsyncClient() as client:
response = await client.post(
api_url,
headers=headers,
files=files,
timeout=60,
)
print(response.text)
response.raise_for_status()
return response.json()
except httpx.HTTPError as e:
print(f"HTTP 请求错误:{str(e)}")
return None
except Exception as e:
print(f"发生错误:{str(e)}")
return None
async def main():
# 使用示例
file_path = "../examples/zh.mp3"
api_token = "your-secret-token-here"
result = await transcribe_audio(file_path, api_token)
if result:
print(f"识别结果:{result['text']}")
if __name__ == "__main__":
asyncio.run(main())