概述
在处理一些文本类信息时,例如图片中的英文,我们可以使用 OCR 识别技术来快速识别,并结合语音合成技术来朗读照片中的英文。本文将介绍如何使用 腾讯云数据万象(CI) 的 OCR 技术识别图片中的文本内容,并通过语音合成技术将文本转换成语音播放。
应用场景
语言学习
将语言教材和词典中的英文转化为语音播放,可以为学习者提供标准的发音示范,帮助他们更好地学习语音。这种技术适用于语音学习软件、外语学习应用等场景。
书籍阅读
借助图文点读技术,儿童绘本、漫画、地图导览等可迅速将图片中的内容转化为语音,从而提升信息获取的趣味性和互动性,让用户更便捷地阅读和获取信息。
准备工作
创建数据万象存储桶,详情请参见 存储桶操作。
在存储桶详情 > 智能语音页面,开启智能语音功能。
上传待处理的图片 到存储桶中。
操作步骤
步骤一 初始化 COS SDK 并配置相关信息
// 密钥请在访问管理控制台获取。https://console.cloud.tencent.com/cam/capiconst 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'};
步骤二 使用 OCR 技术识别图片内容
数据万象通用文字识别功能(OCR)基于行业前沿的深度学习技术,将图片上的文字内容,智能识别为可编辑的文本。通过子账号使用时,需要授予相关的权限,详情请参见 授权粒度详情 文档。对于存储在 test-1250000000 存储桶中的图片 test.png,OCR 识别代码如下。
// 使用 OCR 功能提取图片中的文字,接口可参考 https://cloud.tencent.com/document/product/460/63227cos.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/13318cos.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/84797cos.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));}// 如果任务提交成功,记录当前的任务idconst 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)}
说明:
合成的音频效果如下:
费用相关
OCR 识别费用