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

364 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 腾讯云语音识别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**:初始版本,实现录音文件识别、一句话识别和任务查询功能