图文点读

2026-01-15   访问量:0


概述

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

应用场景

语言学习

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

书籍阅读

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

准备工作

创建数据万象存储桶,详情请参见 存储桶操作

已设置对应的 跨域规则

存储桶详情 > 智能语音页面,开启智能语音功能。







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

操作步骤

步骤1: 初始化 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 签名实现

步骤2:使用 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);})

说明:

OCR 计费规则请参见 内容识别费用 - 通用文字识别

识别效果如下:









步骤3:创建语音合成任务

数据万象语音合成技术通过先进的深度学习技术,将文本转换成自然流畅的语音。支持多种音色,并提供调节语速、语调、音量等功能。

如果识别的文本内容 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 为关键信息,步骤四中查询语音合成任务结果时会用到。

步骤4:获取合成的音频

通过 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 调试

合成的音频效果如下:



费用相关

OCR 识别费用

语音合成费用

对象存储相关费用

Demo 体验

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


热门文章
更多>