本文将介绍如何使用百度AI开放平台中的文字识别服务来识别图片中的文字。 百度AI开放平台的访问网址为:百度AI开放平台。 为了使用平台提供的AI服务,您需要提前注册一个百度帐号。
首先,注册一个百度帐号并申请通用文字识别API。 上面的基础知识我就不多说了。 如果不明白的话可以参考文章。
创建百度AI文字识别应用
在百度AI开放平台中,登录百度帐号,点击“文字识别”服务中的“通用场景文字识别”,选择“创建应用”,填写应用名称,选择应用类型,填写应用描述等“通用场景文字识别”服务已经创建完成,如下图:
在应用程序列表中,您可以看到刚刚创建的文本识别服务。 请记住,这个应用程序中的AppID、API Key、Key非常重要,是你的应用程序的唯一标识。
接口说明
单击下面的链接了解更多信息
通用文字识别接口说明
格式如下:
uni.request({
url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=【你的access_token值】',
data:{
image:【图片的base64编码】,
language_type:'ENG', //识别语言类型,默认中英文结合
detect_direction:true ,//检测图像朝向
},
method:'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success :(res)=> {
console.log(res.data)
}
})
}
});
您的值需要使用您的 API Key 和 Key 来获取。 要获取该方法,请单击获取该方法的链接。
但我读到API调用方法需要编码。 详情请参见图片。
下面介绍两种图像转换的方法: 第一种方法(失败版本)
这个方法很好。 代码页方法是最容易理解的。
首先选择本地镜像的临时路径:
x.chooseImage({
success:res=>{
this.urlTobase64(res.tempFilePaths[0])
}
})
接下来,使用临时路径作为请求的URL,将数据返回格式设置为上面的代码。
urlTobase64(url){
wx.request({
url:url, // 必须是https链接
responseType: 'arraybuffer', //最关键的参数,设置返回的数据格式为arraybuffer
success:res=>{
//把arraybuffer转成base64
let base64 = wx.arrayBufferToBase64(res.data);
//不加上这串字符,在页面无法显示的哦
base64 = 'data:image/jpeg;base64,' + base64
//打印出base64字符串,可复制到网页校验一下是否是你选择的原图片呢
console.log(base64)
}
})
}
这个方法看起来天衣无缝。 其实测试一下就知道在微信开发平台上可以用,但是在手机上数据就无效了!
这是因为微信小程序开发工具需要https链接。 电脑上选择的图片符合要求,但手机上传的图片临时地址不符合要求,因此转码失败,导致识别错误。
第二种方法(成功版)
以前微信开发者工具没有选择文件的功能。 更新后增加了()函数,可以通过对文件的编码操作进行本地转码。
x.chooseImage({
success: res => {
wx.getFileSystemManager().readFile({
filePath: res.tempFilePaths[0], //选择图片返回的相对路径
encoding: 'base64', //编码格式
success: res => { //成功的回调
console.log(res.data)
}
})
}
})
注意:无需添加“data:image/jpeg;” 在前
res.data为转码成功的编码
下面贴出完整的uni-app代码:
只需修改百度API即可
{{item.words}}
<script>
export default {
data(){
return{
src:'',
content:[]
}
},
methods:{
uploadImage(){ // 选取照片,进行OCR识别
uni.chooseImage({
count:1,//默认9
sizeType:['original', 'compressed'],//可以指定是原图还是压缩图,默认二者都有
success: (res)=> {
uni.showLoading({
title: '正在识别中...'
});
this.src = res.tempFilePaths[0]; //后面还能用到 src 暂且留着
// 下面进行转码
wx.getFileSystemManager().readFile({
filePath:res.tempFilePaths[0], //选择图片返回的相对路径
encoding:'base64',//编码格式
success:(res)=>{ //成功回调页面
uni.request({
url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=【你的access_token】',
data:{
image:res.data,
language_type:'ENG', //识别语言类型,默认中英文结合
detect_direction:true ,//检测图像朝向
},
method:'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success :(res)=> {
this.content = res.data.words_result
uni.hideLoading(); //把正在加载中隐藏
console.log(res.data)
}
})
}
});
}
})
}
}
}
</script>
<style>
.vvv{
width: 99%;
border: 2px dashed #eeeeee;
height: 700upx;
margin: 30upx 0 0 0;
}
</style>
效果图如下: