Files
msh-system/models-integration/docs/TENCENT_ASR_README.md

364 lines
8.8 KiB
Markdown
Raw Normal View History

# 腾讯云语音识别API对接文档
## 功能概述
本项目已成功集成腾讯云语音识别ASR服务提供了以下功能
1. **录音文件识别**:适用于较长的音频文件,采用异步方式识别
2. **一句话识别**适用于60秒以内的短音频采用同步方式识别
3. **任务状态查询**:查询异步识别任务的状态和结果
## API文档参考
- 官方文档https://cloud.tencent.com/document/product/1093/35637
- API概览https://cloud.tencent.com/document/api/1093/35640
## 配置说明
### 1. 配置文件 (application.yml)
```yaml
# 腾讯云语音识别配置
tencent-asr:
# API密钥ID
secret-id: AKIDf9OM3TdWBZqqZ1C7k6B0Ypqb6KIzQaT5
# API密钥Key需要在实际使用时提供
secret-key: ${TENCENT_SECRET_KEY:}
# API地区
region: ap-shanghai
# 连接超时时间(毫秒)
connect-timeout: 30000
# 读取超时时间(毫秒)
read-timeout: 60000
# 默认引擎模型类型16k_zh中文普通话、16k_en英文
default-engine-model: 16k_zh
# 默认结果文本格式0识别结果文本包含标点符号1不带标点的识别结果
default-res-text-format: 0
# 默认音频声道数1单声道2双声道
default-channel-num: 1
# 是否启用
enabled: true
```
### 2. 环境变量配置
为了安全起见,建议通过环境变量设置 SecretKey
```bash
export TENCENT_SECRET_KEY=your_secret_key_here
```
或在启动命令中指定:
```bash
java -jar models-integration-0.0.1.jar --tencent-asr.secret-key=your_secret_key_here
```
## API接口说明
### 基础URL
```
http://localhost:5081/api/tencent/asr
```
### 1. 创建录音文件识别任务
**接口地址**`POST /api/tencent/asr/create-task`
**适用场景**适用于较长的音频文件支持多种格式wav、pcm、mp3、silk、speex、amr、m4a等
**请求示例**
```json
{
"url": "https://example.com/audio.wav",
"engineModelType": "16k_zh",
"channelNum": 1,
"resTextFormat": 0,
"sourceType": 0,
"callbackUrl": "https://your-callback-url.com/callback",
"filterDirty": false,
"filterModal": false,
"convertNumMode": true
}
```
**请求参数说明**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| url | String | 是 | 音频文件URL地址 |
| engineModelType | String | 否 | 引擎模型类型默认16k_zh |
| channelNum | Integer | 否 | 音频声道数1单声道2双声道默认1 |
| resTextFormat | Integer | 否 | 识别结果文本格式0带标点1不带标点默认0 |
| sourceType | Integer | 否 | 音频来源0音频URL1音频数据base64默认0 |
| callbackUrl | String | 否 | 回调URL任务完成后将结果POST到该地址 |
| hotwordId | String | 否 | 热词表ID用于提高专有名词识别准确率 |
| filterDirty | Boolean | 否 | 是否过滤脏词默认false |
| filterModal | Boolean | 否 | 是否过滤语气词默认false |
| convertNumMode | Boolean | 否 | 是否进行阿拉伯数字智能转换默认false |
**响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"taskId": "1234567890",
"status": 0,
"statusStr": "等待处理",
"requestId": "req_abc123def456",
"errorCode": 0,
"errorMsg": "成功"
}
}
```
**引擎模型类型说明**
- `16k_zh`16k 中文普通话通用
- `16k_zh_video`16k 音视频领域
- `16k_en`16k 英语
- `16k_ca`16k 粤语
- `8k_zh`8k 中文普通话通用
### 2. 查询识别任务状态
**接口地址**`GET /api/tencent/asr/query-status/{taskId}`
**适用场景**:查询异步识别任务的状态和结果
**请求示例**
```
GET /api/tencent/asr/query-status/1234567890
```
**响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"taskId": "1234567890",
"status": 2,
"statusStr": "识别成功",
"result": "你好,这是一段语音识别测试内容。",
"audioDuration": 5.5,
"errorCode": 0,
"errorMsg": "",
"resultDetail": "{\"Result\":[{\"Text\":\"你好,这是一段语音识别测试内容。\"}]}"
}
}
```
**任务状态说明**
- `0`:等待处理
- `1`:执行中
- `2`:识别成功
- `3`:识别失败
### 3. 一句话识别
**接口地址**`POST /api/tencent/asr/sentence-recognition`
**适用场景**适用于60秒以内的短音频同步返回识别结果
**请求示例**
```json
{
"url": "https://example.com/short-audio.wav",
"engineModelType": "16k_zh",
"sourceType": 0,
"filterDirty": false,
"filterModal": false,
"convertNumMode": true
}
```
**请求参数说明**:参数与创建任务接口相同,但不需要 callbackUrl
**响应示例**
```json
{
"code": 200,
"message": "success",
"data": {
"status": 2,
"statusStr": "识别成功",
"result": "你好世界",
"audioDuration": 1.5,
"requestId": "req_xyz789",
"errorCode": 0,
"errorMsg": "成功"
}
}
```
### 4. 健康检查
**接口地址**`GET /api/tencent/asr/health`
**适用场景**:检查服务是否正常运行
**响应示例**
```json
{
"code": 200,
"message": "success",
"data": "腾讯云语音识别服务运行正常"
}
```
## 使用流程
### 场景1长音频识别异步
1. 调用 **创建录音文件识别任务** 接口,获取 taskId
2. 使用 taskId 调用 **查询识别任务状态** 接口
3. 当 status 为 2 时,表示识别成功,可从 result 字段获取识别结果
### 场景2短音频识别同步
1. 直接调用 **一句话识别** 接口
2. 同步返回识别结果
## 测试示例
### 使用 curl 测试
#### 1. 创建识别任务
```bash
curl -X POST http://localhost:5081/api/tencent/asr/create-task \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/audio.wav",
"engineModelType": "16k_zh",
"channelNum": 1,
"resTextFormat": 0,
"convertNumMode": true
}'
```
#### 2. 查询任务状态
```bash
curl http://localhost:5081/api/tencent/asr/query-status/1234567890
```
#### 3. 一句话识别
```bash
curl -X POST http://localhost:5081/api/tencent/asr/sentence-recognition \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/short-audio.wav",
"engineModelType": "16k_zh",
"convertNumMode": true
}'
```
### 使用 Swagger UI 测试
启动应用后访问http://localhost:5081/swagger-ui.html
在 Swagger UI 中找到 "腾讯云语音识别接口" 分组,即可进行可视化测试。
## 音频格式要求
### 支持的音频格式
- wav
- pcm
- mp3
- silk
- speex
- amr
- m4a
### 音频参数建议
- **采样率**16k 或 8k根据选择的引擎模型
- **位深度**16bit
- **声道数**1单声道或 2双声道
- **编码**PCM
## 注意事项
1. **API密钥安全**
- 不要将 SecretKey 直接写入配置文件
- 建议使用环境变量或密钥管理服务
2. **音频时长限制**
- 一句话识别:≤ 60秒
- 录音文件识别:≤ 5小时
3. **音频大小限制**
- 单个音频文件 ≤ 500MB
4. **回调地址**
- 如果设置了 callbackUrl任务完成后会自动回调
- 回调地址必须是公网可访问的 HTTP/HTTPS 地址
5. **费用说明**
- 腾讯云语音识别服务按使用量计费
- 请在腾讯云控制台查看具体计费标准
## 错误处理
常见错误码:
| 错误码 | 说明 | 解决方案 |
|--------|------|----------|
| InvalidParameter | 参数错误 | 检查请求参数是否正确 |
| AuthFailure.SignatureFailure | 签名错误 | 检查 SecretId 和 SecretKey 是否正确 |
| ResourceUnavailable.NotFound | 资源不存在 | 检查 taskId 是否正确 |
| LimitExceeded | 超过配额限制 | 联系腾讯云增加配额 |
## 项目结构
```
src/main/java/com/integration/api/
├── config/
│ └── TencentAsrConfig.java # 腾讯云ASR配置类
├── controller/
│ └── TencentAsrController.java # ASR控制器
├── dto/
│ ├── TencentAsrRequest.java # ASR请求DTO
│ ├── TencentAsrResponse.java # ASR响应DTO
│ └── TencentAsrTaskStatus.java # ASR任务状态DTO
└── service/
├── TencentAsrService.java # ASR服务接口
└── impl/
└── TencentAsrServiceImpl.java # ASR服务实现类
```
## 依赖说明
项目使用了腾讯云官方 Java SDK
```xml
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.909</version>
</dependency>
```
## 联系方式
如有问题,请联系项目维护者或查看腾讯云官方文档。
## 更新日志
- **2025-11-05**:初始版本,实现录音文件识别、一句话识别和任务查询功能