200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 使用腾讯云OCR文字识别

使用腾讯云OCR文字识别

时间:2023-09-24 06:07:01

相关推荐

使用腾讯云OCR文字识别

就目前来讲,腾讯云的图片识别功能相对来讲还是比较稳定,识别率还算可以(本人尝试,并没有官方说的90%那么高,70~80%我觉的是比较真实)。

之前,我们需要开发一个协助用户输入身份信息(驾驶证、行驶证等),所以只需要将行驶证驾驶上传进行识别,来减少用户的输入量。

因为之前,没有用过腾讯云的识别功能,所以还是遇到了一些问题。下面我来详细的说一下,关键的几步问题。

生成sign

这一步是十分重要的,也是必须的。开发过android的应该都知道,使用第三方的SDK,正常情况下,都需要去创建对应的签名,这个是唯一的。参考官网,一共有两种方式来生成(一种是后台的,用php方式来生成;一种是客户端自己的,用android来生成)。我是用了android方式的生成方式,直接将这几个方法copy到一个activity里面,直接运行,打logo显示出来。

import android.util.Base64;import java.util.Random;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;public class Sign {/*** 生成Authorization签名字段** @param appId* @param secretId* @param secretKey* @param bucketName* @param expired* @return* @throws Exception*/public static String appSign(long appId, String secretId, String secretKey, String bucketName,long expired) throws Exception {long now = System.currentTimeMillis() / 1000;int rdm = Math.abs(new Random().nextInt());String plainText = String.format("a=%d&b=%s&k=%s&t=%d&e=%d&r=%d&f=img", appId, bucketName,secretId, now, now + expired, rdm);byte[] hmacDigest = HmacSha1(plainText, secretKey);byte[] signContent = new byte[hmacDigest.length + plainText.getBytes().length];System.arraycopy(hmacDigest, 0, signContent, 0, hmacDigest.length);System.arraycopy(plainText.getBytes(), 0, signContent, hmacDigest.length,plainText.getBytes().length);return Base64Encode(signContent);}/*** 生成base64编码** @param binaryData* @return*/public static String Base64Encode(byte[] binaryData) {// String encodedstr = Base64.getEncoder().encodeToString(binaryData);// String encodedstr = Base64.encode().encodeToString(binaryData);String encodedstr=Base64.encodeToString(binaryData,Base64.DEFAULT);return encodedstr;}/*** 生成hmacsha1签名** @param binaryData* @param key* @return* @throws Exception*/public static byte[] HmacSha1(byte[] binaryData, String key) throws Exception {Mac mac = Mac.getInstance("HmacSHA1");SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");mac.init(secretKey);byte[] HmacSha1Digest = mac.doFinal(binaryData);return HmacSha1Digest;}/*** 生成hmacsha1签名** @param plainText* @param key* @return* @throws Exception*/public static byte[] HmacSha1(String plainText, String key) throws Exception {return HmacSha1(plainText.getBytes(), key);}}

上传图片

腾讯云是根据用户上传的图片来进行识别的,所以我们必须要将自己的图片上传。appid这个是必须的,我们自己在百度云里面创建的,如果不知道怎么创建,直接在百度中搜索(如何创建百度云appId);bucket开始我没有创建,直接随便传了一个字符串,依然可以使用,我也比较懵逼(不过最好还是使用自己创建的,如果不知道最好还是自己创建一个)。上传方式,就是大家都知道的那种方式,’Content-Type’: ’ multipart/form-data’。

//图片识别(驾驶证行驶证,type: 0---行驶证,1---驾驶证)static async recognizeImg(img, type) {let params = {appid: '1256184939', bucket: 'cloudhome-1256184939', type: type || 0};try {let formData = new FormData();for (let key in params) {formData.append(key, params[key]);}let file = {uri: img, type: 'multipart/form-data', name: 'test.jpg'};formData.append('image', file);let response = await fetch('http://recognition./ocr/drivinglicence', {method: 'POST',headers: {'Host': 'recognition.','Content-Type': ' multipart/form-data','Content-Length': 350,'Authorization': sign},body: formData,});let responseJson = await response.json();let result = JSON.parse(JSON.stringify(responseJson));return {result: result, json: responseJson, resp: response,};} catch (error) {toastShort('网络不给力');}}

注意

出问题基本上都是自己的sign不对,如果自己是在没办法判断问题在哪儿,可以提工单给百度云工作人员,我就经常骚然他们,感觉还是挺耐心帮咱们解决的。要是感觉我还挺靠谱的,欢迎加QQ:357076659。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。