最近一直在研究光学字符识别,即OCR。最开始在谷爹那里了解到了开源的Tesseract,可以拿来识别简单的英文和数字。但是识别中文的准确率并不高。

然后从Tesseract到Tesseract.js,经过多次尝试研究,最后发现腾讯爹的万象优图识别率是最高的。趁现在是公测免费期,赶紧尝试了一把。

下面来说一说我是怎么用python实现中文识别的。

首先百度万象优图登录吧,腾讯的。。。你们懂得。。。。进去后,创建一个bucket,然后可以选择上传图片

这些准备工作做好以后,就开始写代码吧

首先如果是识别身份证,名片,标签等图片的话,强烈建议直接使用万象优图提供python sdk,详情请见https://cloud.tencent.com/document/product/460/7991

我们这里,是做图片通用印刷体识别,所以就只有被迫用万象优图提供的API:(原本我是更喜欢用SDK的,因为简单,但是目前SDK不支持)

万象优图OCR接口采用http协议,支持指定图片URL和 上传本地图片文件两种方式。

根据用户提供的图片,返回识别出的字段信息。

接口:http://recognition.image.myqcloud.com/ocr/general

这里有三点需要注意:

(1) 每个请求的包体大小限制为6MB。

(2) 所有接口都为POST方法。

(3) 不支持 .gif这类的多帧动图。

然后我用可以使用requests模块来发http请求。

这里最麻烦的就是要定制请求头,不然腾讯云是解析不到的,笔者才疏学浅在这里研究了一下午才正确定制出了请求头。。。。

先来看看请求头的规则:

参数名 描述
Host recognition.image.myqcloud.com 服务器域名
Content-Length 包体总长度 整个请求包体内容的总长度,单位:字节(Byte)
Content-Type Application/json或者Multipart/form-data 根据不同接口选择
Authorization 鉴权签名 用于鉴权的签名,使用多次有效签名。详情

这里的难点就是这个鉴权签名,直接点击表格里面的详情去看吧,我这里不做复制粘贴。

关于请求参数:

使用image则使用 multipart/form-data格式

不使用image则使用 application/json格式

参数名 是否必须 类型 参数说明
appid 必须 string 项目ID
bucket 必须 string 空间名称
image 可选 binary 图片内容
url 可选 string 图片的url,image和url只提供一个即可,如果都提供,只使用url

好了,现在开始正式开始吧

先写一下请求头涉及到的变量

然后依次把他们拼接起来

我这里采用的是单次

然后再根据要求进行 HMAC-SHA1加密

这里强调一下,官方的说法是

根据我的研究,转换出来的不是二进制,然后我还特意去转成了二进制。。。。。。发现其实根本不用,转出来的在pycharm里面是个乱码,可以直接用的

最后,加密的数据和之前的拼接数据再拼在一起做base64转码

这样签名就完成了,后面的基本不难,主要就是签名这里有坑,下面直接上代码:

# coding=utf-8
# /usr/bin/python
# coding=utf-8
# create by 15025463191 2017/10/11 import requests
import hmac
import hashlib
import base64
import time
import random
import re appid = ""
bucket = "imgregnise"
secret_id = "AKIDZx72kFVBPRF4324234234o8C1auynPezyl" #我更改了,不要复制我的
secret_key = "h9NUN1RbZIm11mJbUt2v32432Zx" #我更改了,不要复制我的
expired = time.time() + 2592000
onceExpired = 0
current = time.time()
rdm = ''.join(random.choice("") for i in range(10))
userid = ""
fileid = "tencentyunSignTest" info = "a=" + appid + "&b=" + bucket + "&k=" + secret_id + "&e=" + str(expired) + "&t=" + str(current) + "&r=" + str(
rdm) + "&u=0&f=" signindex = hmac.new(secret_key, info, hashlib.sha1).digest() # HMAC-SHA1加密
sign = base64.b64encode(signindex + info) # base64转码 url = "http://recognition.image.myqcloud.com/ocr/general"
headers = {'Host': 'recognition.image.myqcloud.com',
"Content-Length": "",
"Content-Type": "application/json",
"Authorization": sign
} payload = {
"appid": appid,
"bucket": bucket,
"url": "http://imgregnise-1254602529.picsh.myqcloud.com/123456.png"
} r = requests.post(url, json=payload, headers=headers)
responseinfo = r.content r_index = r'itemstring":"(.*?)"' # 做一个正则匹配
result = re.findall(r_index, responseinfo)
for i in result:
print i

我这里用图片试验了一次,准备率还是很高的,就是中间少了一个“餐。”

但是这样的识别率已经是很高了

最后预祝各种识别成功!

python基于万象优图识别图片中的中文的更多相关文章

  1. 腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测)

    文章由GIT博客迁移过来 程序下载地址(源码也在):点我下载 设计说明 10月20号晚上,准备写这么一个程序. 腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测) 可以在截图之后,直接点击上传 ...

  2. ThinkPHP集成万象优图

    项目原因 不告诉你,反正需要把腾讯云的万象优图整合进来. 下载PHP版的万象优图的SDK 下载地址:https://github.com/tencentyun/image-php-sdk git cl ...

  3. Ueditor编辑器图片上传到万象优图

    最近想用typecho做一个个人博客站,typecho的文本编辑器不能上传图片,我就用Ueditor替换的了原来的文本编辑器,听说腾讯的万象优图每月有50G的免费空间和流量,我就自己改了下Uedito ...

  4. 使用Python基于OpenCV的验证码识别

    Blog:https://blog.csdn.net/qq_40962368/article/details/89312429(Verification_Code_Identification) 步骤 ...

  5. python实战===用python识别图片中的中文

    需要安装的模块 PIL pytesseract 需要下载的工具: http://download.csdn.net/download/bo_mask/10196285 因为之前百度云的链接总失效,所以 ...

  6. python基于OpenCV的人脸识别系统

    想获得所有的代码,请下载(来自我的CSDN): https://download.csdn.net/download/qq_40875849/11292912 主函数: from recognitio ...

  7. mac 使用tesseract识别图片中的中文

    安装 tesseractbrew install tesseract 加入环境变量export TESSDATA_PREFIX=/usr/local/Cellar/tesseract/4.1.0/sh ...

  8. 基于CentOS体验万象优图鉴黄服务

    系统要求:CentOS 7.2 64 位操作系统 初始化配置 使用万象优图图片鉴黄 API 接口,我们需要先完成以下步骤: 获取腾讯云账号 APP ID 配置云 API 公钥/密钥 配置优图 buck ...

  9. 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务

    推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...

随机推荐

  1. 团队作业4——第一次项目冲刺(Alpha版本)4.23

    ·本次会议为第二次Scrum Meeting会议~ ·本次会议项目经理召开时间为17:00,在教学楼教室召开,召开时长约30分钟,探讨了昨日任务的进展.查重功能.今日要做的任务以及后续所要开展的工作. ...

  2. 201521123089 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 总结: (1)类名的首字母一定要大写. (2)制类型转换:类强制转换为子类时只有当引用类型真 ...

  3. 201521123092《java程序设计》第二周学习总结

    1. 本周学习总结 (1)学习了string的类型: (2)学习了java数组的使用: (3)学习了容器的概念: (4)解决一些pta编程时遇到的困难. 2. 书面作业 (1)使用Eclipse关联j ...

  4. 《Java课程设计》

    一. 本组课题 简易文件资源管理器 需求分析 查找文件功能:可以根据指定的目录名与待查找的文件,在指定目录中进行查找,并返回结果 实现文件的拷贝与粘贴功能 实现文本类文件(.txt, .java, . ...

  5. 猴子吃桃问题(南阳ACM324)

    猴子吃桃问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此, ...

  6. Eclipse rap 富客户端开发总结(8) : 发布到tomcat后解决rap编码和字符集的问题

    1 .解决 rap 字符集乱码的问题 字符集问题,解决办法:   在plugin.xml - build.properties 中添加 javacDefaultEncoding.. = UTF-8   ...

  7. 201621123088《Java程序设计》第1周学习总结

    1.本周学习总结 以几个关键词描述本周的学习内容.并阐述关键概念之间的联系. 这周是我第一次学习Java,对于我这个上学期没有学好的人来说,Java无疑是一个新的噩梦,但是我相信我这学期一定能学好Ja ...

  8. python之并发编程之多进程

    一.共享数据 进程间通信应该尽量避免使用本节所讲的共享数据方式 from multiprocessing import Manager,Process,Lock def work(dic,mutex) ...

  9. Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...

  10. Intellij IDEA WEB结构目录说明【转载】

    https://my.oschina.net/lujianing/blog/186737?p=1#OSC_h2_1