图/文:迷神
微信小程序提供基于小程序的通用印刷体 OCR 识别,简单来说就是小程序可以拍照或者是选择图片,然后小程序调用接口进行识别并返回识别内容。
分享这个,主要的小程序官方ocr.printedText的demo,比较随意,很多细节一笔带过,导致部分朋友可能不是很了解。这里主要是分享微信小程序云开发,通用OCR识别图片识别为文字的2种模式用法。这也是同事开发遇到问题,我就罗列下分享出来demo
小程序提供好几种OCR识别,比如身份证OCR识别,银行卡OCR识别,驾照OCR识别,以及 通用OCR识别图片识别,大家有这个通用识别举一反三啦,
Demo预览图:
就是上传图片,这个上传图片,手机端是支持拍照和从相册进行选择的。
小程序上传界面
WXML按钮,选择图片。
<!--pages/upload/upload.wxml-->
<button type="primary" plain="true" bindtap= "printText">上传图片</button>
<view class="result" wx:if="{{printText}}">
<view wx:for="{{printText}}" wx:key="index"> {{item.text}}</view>
</view>
JS部分
// pages/upload/upload.js
Page({
/**
* 页面的初始数据
*/
data: {
},
printText(){
wx.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success (res) {
// tempFilePath可以作为img标签的src属性显示图片
const tempFilePaths = res.tempFilePaths
var filepath=encodeURI(tempFilePaths[0])
//把文件转换成文件流的形式
let buffer = wx.getFileSystemManager().readFileSync(filepath)
console.log(filepath)
wx.cloud.callFunction({
//调用云函数 upload
name:'upload',
data:{
//第一种上传到服务器方式
//imgUrl: encodeURI("https://www.toutiao.com/123.jpg")
//第二种:文件流的方式
file:buffer
},
complete:console.log
})
}
})
},
//更多内容不列举了
})
小程序的图片识别ocr.printedText,有两种模式,1种是就是url模式,这个比较简单。还有一种就是上传文件的本地模式。需要传输文件流,然后文件流转换为base64
小程序云函数部分
对应upload云函数部分。
// 云函数入口函数
exports.main = async (event, context) => {
try {
//第一种模式,获取服务器地址
if (event.imgUrl) {
var result = await cloud.openapi.ocr.printedText({
type: 'photo',
imgUrl: event.imgUrl
})
//第二种模式,选择文件模式
} else {
var result = await cloud.openapi.ocr.printedText({
type: 'photo',
img: {
contentType: 'image/png',
value: new Buffer(event.file, 'base64')
}
})
}
return result
} catch (err) {
return err
}
}
完整结构如下:
我们识别的图片为:
最终识别出来的文本内容为:
当然其他的小程序识别,身份证OCR识别,银行卡OCR识别,驾照OCR识别,大家可以自行修改下,就可以了,比较简单。有问题欢迎给我留言,觉得不错,记得关注迷神哦,后续将会分享更多精彩内容。