图文点读

最近更新时间:2023-06-13 15:25:30

我的收藏

概述

在处理一些文本类信息时,例如图片中的英文,我们可以使用OCR识别技术来快速识别,并结合语音合成技术来朗读照片中的英文。本文将介绍如何使用 腾讯云数据万象(CI) 的OCR技术识别图片中的文本内容,并通过语音合成技术将文本转换成语音播放。

应用场景

语言学习

将语言教材和词典中的英文转化为语音播放,可以为学习者提供标准的发音示范,帮助他们更好地学习语音。这种技术适用于语音学习软件、外语学习应用等场景。

书籍阅读

借助图文点读技术,儿童绘本、漫画、地图导览等可迅速将图片中的内容转化为语音,从而提升信息获取的趣味性和互动性,让用户更便捷地阅读和获取信息。

准备工作

创建数据万象存储桶,详情请参见 存储桶操作
在存储桶详情 - 智能语音页面,开启智能语音功能。



上传待处理的图片 到存储桶中。

操作步骤

步骤一 初始化 COS SDK 并配置相关信息

// 密钥请在访问管理控制台获取。https://console.cloud.tencent.com/cam/capi
const cos = new COS({
SecretId: 'AKID*******',
SecretKey: '**********',
});

// 存储桶配置请在cos控制台获取。https://console.cloud.tencent.com/cos/bucket
// 格式参考:Bucket: 'abc-1250000000', Region: 'ap-guangzhou'
const bucketConf = {
Bucket: 'test-1250000000',
Region: 'ap-guangzhou'
};
说明
注意:该初始化方式仅供联调测试使用,为了安全起见,请勿在生产环境直接暴露密钥。
生产环境请参考各语言 SDK 签名实现,详情请参见 SDK 签名实现

步骤二 使用 OCR 技术识别图片内容

数据万象通用文字识别功能(OCR)基于行业前沿的深度学习技术,将图片上的文字内容,智能识别为可编辑的文本。通过子账号使用时,需要授予相关的权限,详情请参见 授权粒度详情 文档。对于存储在 test-1250000000 存储桶中的图片 test.png,OCR 识别如下:
// 使用 OCR 功能提取图片中的文字,接口可参考 https://cloud.tencent.com/document/product/460/63227
cos.request({
...bucketConf,
Key: 'test.png', // 待识别的图片
Query: {
'ci-process': 'OCR',
}
}, (ocrErr, ocrData) => {
if (ocrErr) {
console.log(JSON.stringify(ocrErr));
return alert('识别图片失败');
}
const list = ocrData?.Response?.TextDetections?.map(text => text.DetectedText || "");
const ocrResult = list?.join('\\n') || "";
console.log(ocrResult);
})
说明
识别效果如下:





步骤三 创建语音合成任务

数据万象语音合成技术通过先进的深度学习技术,将文本转换成自然流畅的语音。支持多种音色,并提供调节语速、语调、音量等功能。
如果识别的文本内容 ocrResult 长度不超过300字符,可以直接创建语音合成任务,同步获取合成的音频。
如果识别的文本内容 ocrResult 长度超过300字符,需要先将识别的内容上传到COS中,再创建语音合成任务。
通过子账号使用时,需要授予相关的权限,详情请参见 授权粒度详情 文档。 创建语音合成任务,参数详情参见 提交任务接口

// 上传ocrResult到cos存储桶,参考接口: https://cloud.tencent.com/document/product/436/7749
// 注意:为了避免上传出现跨域错误,需要设置跨域访问规则,简单调试可将来源Origin设置为*,参考 https://cloud.tencent.com/document/product/436/13318
cos.putObject({
...bucketConf,
Key: key, // 目标文件名
Body: file,
}, (err, data) => {
if (err) {
return console.log(JSON.stringify(OcrUploadErr));
}
const txtUrl = `https://${bucketConf.Bucket}.cos.${bucketConf.Region}.myqcloud.com/content.txt`;

// 创建语音合成任务,参考接口:https://cloud.tencent.com/document/product/460/84797
cos.request({
...bucketConf,
Method: 'POST',
Url: `https://${bucketConf.Bucket}.ci.${bucketConf.Region}.myqcloud.com/jobs`,
Key: '/jobs', /** 固定值,必须 */
ContentType: 'application/xml', /** 固定值,必须 */
Body: COS.util.json2xml({
Request: {
Tag: 'Tts', // 语音合成任务
Operation: {
TtsConfig: {
InputType: 'Url', // 支持输入文本文件 Url 或 utf8-字符,utf8-字符长度不超过300,Url文件大小不超过10000个字符
Input: txtUrl // 将步骤2中识别到的文本作为输入
},
TtsTpl: {
Mode: "Asyc", // 支持同步和异步模式,如果文本内容长,建议选择异步模式
Codec: "mp3", // 生成mp3音频,支持wav、mp3和pcm格式
VoiceType: "ruxue" // 支持多种音色选择
},
Output: {
Bucket: bucketConf.Bucket,
Region: bucketConf.Region,
Object: 'result.mp3' // 输出音频的地址
}
}
}
})
}, (err, data) => {
if (err || !data?.Response?.JobsDetail?.JobId) {
return console.log(JSON.stringify(err));
}

// 如果任务提交成功,记录当前的任务id
const jobId = data?.Response?.JobsDetail?.JobId || "";
})

})
说明
语音合成计费规则参见 智能语音费用 - 语音合成
接口返回参数参考响应参数,JobsDetail 节点下为任务接口响应信息。其中 JobId 为关键信息,步骤四中查询语音合成任务结果时会用到。

步骤四 获取合成的音频

通过 JobId 查询任务执行结果,详情请参见 查询任务接口 。 可定时查询任务的状态,当返回的 State 为 Success 时代表音频合成了,音频地址为:https://${Operation.Output.Bucket}.cos.${Operation.Output.Region}.myqcloud.com/${Operation.Output.Object}
let TaskInterval = null;

/**
* 轮询查询任务的执行情况,参考接口: https://cloud.tencent.com/document/product/460/84765
* 也可以通过回调的方式获取任务执行结果:https://cloud.tencent.com/document/product/460/84958
**/
function queryTask(jobId, callback) {
TaskInterval && clearInterval(TaskInterval);
TaskInterval = setInterval(() => {
cos.request({
...bucketConf,
Method: 'GET',
Url: `https://${bucketConf.Bucket}.ci.${bucketConf.Region}.myqcloud.com/jobs/${jobId}`,
Key: `/jobs/${jobId}`
}, (err, data) => {
if(err) {
console.log(JSON.stringify(err));
return callback && callback(err);
}
if (data?.Response?.JobsDetail?.State === 'Success') {
clearInterval(TaskInterval);
callback && callback(data);
}
})
}, 3000)
}
说明
推荐使用 API Explorer调试
合成的音频效果如下:


费用相关

Demo体验

具体代码可参考 cos-demo,您也可使用腾讯云对象存储控制台,在 智能工具箱 栏目中体验语音合成实际效果。