文章目录

  • OCR效果
  • 配置腾讯云OCR准备工作
    • 注册账号
    • 创建秘钥
    • 使用万象优图创建Bucket
    • 操作指引
  • 实现代码
    • 生成签名
    • 配置网络请求,调用OCR识别接口
  • 写在后面

使用腾讯智能文字识别 OCR 对图片进行文字识别

前段时间有个项目需要一个图片识别转换成文字的功能,后来考虑了一下选择了腾讯云的文字识别OCR。当时对接的过程中觉得有一些地方确实有些坑,所以再记录一下,
避免以后忘记。也希望能给需要的朋友提供一些帮助。

OCR效果

可以参考一下腾讯云官网的链接:文字识别OCR


配置腾讯云OCR准备工作

注册账号

我是直接通过QQ账号进行注册登录,大家也可以查看腾讯云官方教程进行注册,注册腾讯云

创建秘钥

创建新秘钥,可能会弹出窗口提示你不安全,创建子用户之类,这个看你个人需要,想要创建子用户就可以创建,不想创建的话直接点解继续使用即可。最后在左侧菜单栏选择云API秘钥->API秘钥管理,点击 新建秘钥 即可,记录下对应的APPID、SecretId、SecretKey,在项目中需要的地方替换掉。

使用万象优图创建Bucket

  • 在腾讯云菜单中选择万象优图(链接),点击 Bucket管理,之后点击页面上的 绑定Bucket

    • 会提示 该服务需要创建角色

    • 点击 授权

    • 之后继续选择 同意授权

    • 之后会提示进行身份验证,使用微信扫描即可,也可以选择使用备选验证方式等

  • 再次点击页面上的 绑定Bucket

    • 新增方式选择 新建

    • 所属项目不用改,直接用 默认项目

    • 名称自己命名即可,只要符合规则,其余没什么限制,记住这个名称,之后在项目中会需要用到

    • 其余选项可以不需要改动

  • 记住创建之后的bucket名称,之后在项目中需要的地方替换掉

操作指引

如果上面的说明有比较模糊的地方,也可以参考腾讯云官网的操作指引。


实现代码

生成签名

具体说明可以参考腾讯云官网的说明:鉴权签名,我这里使用的java语言,所以直接使用的java签名示例。
将官网给出的代码拷贝到java文件中即可,之后需要使用签名的时候直接调用文件中的appSign方法

配置网络请求,调用OCR识别接口

这一步是当时我觉得比较麻烦的,因为这个接口拼起来有点费劲。并且当前效果是识别本地文件

官方给出的文档在这儿:OCR-通用印刷体识别,如果出现了一些错误也可以在这里找对应的状态码查看原因。

  • 配置网络连接的方法
/*** 配置Connection对象* @throws Exception */
private static HttpURLConnection handlerConnection(String path, String imageName) throws Exception {URL url = new URL(URL);// 获取HttpURLConnection对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST"); // 设置 Post 请求方式connection.setDoOutput(true);            // 允许输出流connection.setDoInput(true);            // 允许输入流connection.setUseCaches(false);         // 禁用缓存// 设置请求头connection.setRequestProperty("Connection", "Keep-Alive");connection.setRequestProperty("Charset", "UTF-8");connection.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);connection.setRequestProperty("authorization", sign());connection.setRequestProperty("host", HOST);System.out.println( "请求头设置完成");// 获取HttpURLConnection的输出流DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());StringBuffer strBufparam = new StringBuffer();strBufparam.append(LINE_END);// 封装键值对数据参数String inputPartHeader1 = "--" + BOUNDARY + LINE_END + "Content-Disposition:form-data;name=\""+ "appid" +"\";" + LINE_END + LINE_END + APPID + LINE_END;String inputPartHeader2 = "--" + BOUNDARY + LINE_END + "Content-Disposition:form-data;name=\""+ "bucket" +"\";" + LINE_END + LINE_END + BUCKET + LINE_END;strBufparam.append(inputPartHeader1);strBufparam.append(inputPartHeader2);// 拼接完成后,一起写入outputStream.write(strBufparam.toString().getBytes());// 写入图片文件String imagePartHeader = "--" + BOUNDARY + LINE_END +"Content-Disposition: form-data; name=\"" + "image" + "\"; filename=\"" + imageName + "\"" + LINE_END +"Content-Type: image/jpeg" + LINE_END + LINE_END;byte[] bytes = imagePartHeader.getBytes();outputStream.write(bytes);// 获取图片的文件流String imagePath = path + File.separator + imageName;InputStream fileInputStream = getImgIns(imagePath);byte[] buffer = new byte[1024*2];int length = -1;while ((length = fileInputStream.read(buffer)) != -1){outputStream.write(buffer,0,length);}outputStream.flush();fileInputStream.close();// 写入标记结束位byte[] endData = ("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + LINE_END + BOUNDARY + "--" + LINE_END).getBytes();//写结束标记位outputStream.write(endData);outputStream.flush();return connection;
}
  • 部分用到的工具方法
/**
* 根据文件名获取文件输入流
* @throws FileNotFoundException
*/
private static InputStream getImgIns(String imagePath) throws FileNotFoundException {File file = new File(imagePath);FileInputStream is = new FileInputStream(file);return is;
}/**
* 把输入流的内容转化成字符串
* @param is
* @return
* @throws IOException
*/
public static String readInputStream(InputStream is) throws IOException{ByteArrayOutputStream baos=new ByteArrayOutputStream();int length=0;byte[] buffer=new byte[1024];while((length=is.read(buffer))!=-1){baos.write(buffer, 0, length);}is.close();baos.close();return baos.toString();
}/**
* 签名方法,调用Sign文件中的appSign方法生成签名
* @return 生成后的签名
*/
public static String sign(){long expired = 10000;try {return Sign.appSign(APPID, SECRET_ID, SECRET_KEY, BUCKET, expired);
} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();
}return null;
}
  • 进行图片识别
/***
* 上传图片进行识别
* @param urlStr    请求地址
* @param path      图片所在文件夹的路径
* @param imageName 图片名称
*/
public void uploadImage(String path, String imageName) {new Thread(){@Overridepublic void run() {try {// 配置HttpURLConnection对象HttpURLConnection connection = handlerConnection(path, imageName);// 连接HttpURLConnectionconnection.connect();// 得到响应int responseCode = connection.getResponseCode();if(responseCode == HttpURLConnection.HTTP_OK){String result = readInputStream(connection.getInputStream());//将流转换为字符串。System.out.println("请求成功:" + result);} else {String errorMsg = readInputStream(connection.getErrorStream());//将流转换为字符串。System.out.println("请求失败:" + errorMsg);}} catch (Exception e) {e.printStackTrace();System.out.println( "网络请求出现异常: " + e.getMessage());}}}.start();
}

写在后面

  • 源码地址:TencentOCRDemo(欢迎Star,谢谢!)

  • 使用Git下载:git clone https://github.com/beichensky/TencentOCRDemo.git

关于使用 Java 语言抵用腾讯云文字OCR识别的方式,大概就在这里了,如果有说的不好或者不清楚地地方,欢迎大家指正。

使用腾讯OCR进行文字识别相关推荐

  1. 通用印刷体识别 php,实战腾讯云ORC文字识别

    本帖最后由 792858525 于 2019-11-8 16:16 编辑 之前弄服务器的时候无意间看到腾讯云有文字识别类的产品,在好奇的驱动下我点了进去,让就一发不可收拾....... 废话不多说,直 ...

  2. 比天若OCR,PandaOCR更方便使用的OCR扫描文字识别软件,易用AI

    目前市面上各种各样的OCR软件从技术上大概可以分为两大类,离线版和云端在线版.离线版的代表如 Abbyy FineReader,在线版如各大头部AI平台开放的OCR接口能力.一般在线版比离线版的识别能 ...

  3. 一篇文章搞定百度OCR图片文字识别API

    一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104 转载于:https://www.cnblogs.com/chongdongxia ...

  4. 【PC工具】更新在线图片文字识别工具,OCR免费文字识别工具

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 之前分享过两个windows上的OCR文字识别工具: [PC工具]更新!windows ...

  5. 阿里云 OCR 图片文字识别接口使用案例(java)

    阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...

  6. Prizmo Pro for Mac(OCR图像文字识别工具)

    Prizmo Pro mac版可以自动扫描相机中的图片,可根据用户选择的文档类型进行特殊处理,支持常用的扫描仪.数码相机.iPhone.iPad 等,也支持自动截图桌面部分区域然后识别出文字,非常的有 ...

  7. OCR图片文字识别,人工手动图片标注软件安装过程

    OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda  下载慢的问题: 使用国内镜像地址下载: https://mirro ...

  8. TOOLFK工具-在线OCR图片文字识别工具

    本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...

  9. ocr简易文字识别v1.41绿色版

    ocr简易文字识别可以高效的将网络图片或者本地图片进行文字识别,并且效率非常高,错误率也比较低,同时支持导出TXT.WORD格式的文档,点击下载就可以下载了! 使用方法: 直接将需要的图片拖入软件即可 ...

最新文章

  1. oracle for 记录数,可视化工具dbForge Documenter for Oracle全新上线!让您轻松记录Oracle数据库...
  2. 【alibaba-cloud】nacos持久化
  3. 【技术系列】浅谈GPU虚拟化技术(第一章)
  4. Mybaits之Mapper动态代理开发
  5. 面试题系列:网络篇夺命连环12问
  6. 随想录(学习使用virtualbox软件)
  7. 充电和库仑计,charge(bq24161) and coulomb(bq27425)
  8. python将pdf转换图片
  9. u-boot-2010.09-for-tiny6410-v1.0支持sd卡SDHC卡启动
  10. 谷歌google安装vue插件,(npm安装)避坑指南
  11. 经济危机下如何建立防御性SOA战略
  12. 什么是云中台系统_什么是云中的超融合?
  13. angr符号执行用例解析——CSCI-4968-MBE
  14. PageOffice中如何调用ZoomSeal签章系统中的印章
  15. vue接收后台返回的验证码图片
  16. python实现简单购物商城_python实现简单购物商城
  17. 请求服务接口提示访问被拒绝
  18. mysql 详解YEAR() MONTH() DAYOFMONTH()日期函数
  19. node.js Next框架的三种渲染方式:客户端渲染、SSG、SSR
  20. DaVinci:色轮

热门文章

  1. 淘宝四大经典骗局及防骗技巧
  2. 海量数据下的舆情分析,该如何搭建?
  3. VPN 虚拟专用网络隧道
  4. 基于Scrapy的交互式漫画爬虫
  5. ipa上架App Store流程
  6. 【水果识别】基于形态学实现水果识别含Matlab源码
  7. 如何添加/去掉开机的启动项
  8. MES系统如何实现无纸化?(下)
  9. 从用户的角度看 java_[Java教程]开发网站要从用户的角度出发!
  10. java 2048思路_Java版2048