最近在使用uniapp开发一个安卓app,用到了ocr扫描身份证功能,公司用的是华为云的账号,我这边记录一下调试遇到的问题。
一般这种使用第三方什么云什么云的,基本都是一个流程,就是你你需要使用你购买的账号当成参数什么的,去云的第三方请求拿到一个token,然后以后你去调用云上的功能的时候带上这个token就能证明你买过了。
1.按照华为云的要求,巴拉巴拉一顿操作,把需要获取token的接口用到的参数都拼上了,拿到token,此处按照华为文档操作即可。
2.由于华为云仅仅是提供一个接口,你把照片(在线url或base64)和1中的token传给他就行了,相机拍照什么的需要你自己搞定(这里啰嗦一句,有些uniapp第三方插件库是直接把调用拍照这个逻辑封装好了,你拿到token之后直接调用他们的相机就可以了,拍完照他们自动处理图片,不需要你传了),然后我就调用了uniapp的chooseImage接口,配个参数(sourceType: ['camera'])就能调相机了,调用成功后会给你返回一个以_doc开头的图片路径。
3.我们在2中拿到了图片路径,因为不是在线的url,所以此处我们要把这个图片路径转换成base64,我用的是网上找到的uniapp的插件,pathToBase64,坑就在这里,也是怪自己粗心,这个插件每次给我吐出的base64编码我拿到了就直接传给华为云了,然后华为云一直报图片格式不对,我研究了大概三个小时把,试了很多方法,我自己拍完照片传到电脑上,然后用goole浏览器转成base64之后传给华为那边就可以,所以我就猜到是pathToBase64这个插件的问题,但我看了一会他的源码,没看到有涉及到转换图片格式的代码,就是常规的转base64操作,所以我之后的想法是把这个插件换掉,再找个别的方法转(这里花费时间最多),然后也没找到,这种场景网上基本都推荐这个插件,没办法我只好硬着头皮又研究这个插件,后来我发现原因竟然是这个插件每次调用吐的base64前面都拼了一个'data:image/jpeg;base64,'
这个串是为了在浏览器回显使用的,正常的base64串是绝对没有这个东西的,相当于给华为传的串了混入了杂质。我把这个串去掉就好了,记录一下。自己坑自己了属于是
谷歌浏览器直接转图片base64:support.huaweicloud.com/ocr_faq/ocr…