利用百度通用文字识别、语音识别能力和微信小程序,将图片中文字转换成文本,并能够保存文本和进行朗读!本文主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块。
1 系统框架
这里用到的主要技术有:百度通用文字识别、语音合成和微信小程序。小程序通过对上传照片进行文字识别,将文字图片转换成文本,并利用语音合成朗读出来。下面上干货!
2 调用通用文字识别API
2.1在控制台创建应用,调用通用文字识别API,“获取API Key/Secret Key”。
接口文档地址:https://ai.baidu.com/docs#/OCR-API/e1bd77f3
请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic
2.2 程序实现
ocrRequest:function (base64Img, callback) {
//拼接接口body参数
var params = {
image: base64Img
}
//发送接口请求
wx.request({
url: ocrUrl + '?access_token=' + accessToken,
data: params,
header: {
'content-type': 'application/x-www-form-urlencoded'
},
method: 'POST',
success: function (res) {
callback.success(res.data)
console.log("request okr", res);
},
fail: function (res) {
if (callback.fail)
callback.fail()
}
})
}
3 调用语音合成API
3.1 在控制台创建应用,调用语音合成API,“获取API Key/Secret Key”。
(1)接口文档地址:https://ai.baidu.com/docs#/TTS-API/top
(2)请求URL: https://tsn.baidu.com/text2audio
将文本以及其他参数写入到body里面,利用html表单的方式将参数传递到服务端。 所有的参数都在body中。body里面的数据为:
tex=***&lan=zh&cuid=***&ctp=1&aue=3&tok=***
(3)返回参数
需要根据 Content-Type的头部来确定是否服务端合成成功。
如果合成成功,返回的Content-Type以“audio”开头,例如:
aue =3 ,返回为二进制mp3文件,具体header信息 Content-Type: audio/mp3;
3.2 程序实现
// 语音合成
tts: function (e) {
console.log("[Console log]tts:" + e);
//var text = JSON.parse(e);
var tex = encodeURI(e);//转换编码url_encode UTF8编码
var tok = "24.1f32b670d54b316c2c89edfcf7e1e8e7.2592000.1565178411.282335-16737828";
var cuid = app.globalData.NLPCusid;
var ctp = 1;
var lan = "zh"; // zh表示中文
// 字符编码
var spd = 5; // 表示朗读的语速,9代表最快,1是最慢
var url = "https://tsn.baidu.com/text2audio?tex=" + tex + "&lan=" + lan + "&cuid=" + cuid + "&ctp=" + ctp + "&tok=" + tok + "&spd=" + spd
wx.downloadFile({
url: url,
success: function (res) {
console.log(res)
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
//小程序自身录音,用playVoice播放不了,要用innerAudioContext
/* wx.playVoice({
filePath: res.tempFilePath
})*/
audio_filePath = res.tempFilePath;
console.log(audio_filePath);
}
}
})
},
4.文本保存
将图片中文字提取出来,并以txt格式保存成文本,方便后续编辑,达到缩短文字录入时间。
//保存文本
savetxt: function () {
console.log(text_output);
fs.writeFileSync(`${wx.env.USER_DATA_PATH}/output.txt`, text_output,'utf8')
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 1000
});
},