基于Python的OCR实现示例


Posted in Python onApril 03, 2020

摘要:

近几天在做一个东西,其中需要对图像中的文字进行识别,看了前辈们的文章,找到两个较简单的方法:使用python的pytesseract库和调用百度AI平台接口。写下这篇文章做一个比较简短的记录和学习,后期如果有新内容再行补充。

1、使用python的pytesseract库

主要是安装库,比较简单,直接使用 pip install 安装即可;另外,如果进行中文识别,需要下载语言包,并配置好相应环境,具体操作可以进行百度,教程有不少。因为这个识别方法比较简单(但效果并不是很理想),下面直接贴出测试代码:

import pytesseract
from PIL import Image
img = Image.open('./testImages/test01.jpg')
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
s = pytesseract.image_to_string(img, lang='chi_sim') #不加lang参数的话,默认进行英文识别
print(s)

2、调用百度AI平台接口(有调用次数限制,通用50000次/天,学习完全够用)

这个类似于调用接口实现词法分析等操作,首先通过注册获得APP_ID、API_KEY、SECRET_KEY,然后调用接口实现OCR。由于是在线API,如果图片体积比较大,涉及到上传数据、分析数据、返回数据等一系列操作,需要一定的时间。此外,因为返回的是 dict 类型数据,所以需要对结果进行处理(这套算法是按行识别文字的,准确率较高,基本可以直接将结果进行提取和拼接)。实现起来比较简单,下面直接贴出代码:

from aip import AipOcr
APP_ID = '00000000'
API_KEY = '00000000000000000000'
SECRET_KEY = '00000000000000000000'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
 
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()
 
def image2text(fileName):
  image = get_file_content(fileName)
  dic_result = client.basicGeneral(image)
  res = dic_result['words_result']
  result = ''
  for m in res:
    result = result + str(m['words'])
  return result
 
getresult = image2text('./test01.jpg')
print(getresult)

小结:

主要是初次接触OCR这个领域所做的一些笔记,后续再深入进行学习。

python实现的ocr接口

import pytesseract
import requests
from PIL import Image
from PIL import ImageFilter
from StringIO import StringIO
from werkzeug.utils import secure_filename
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
from flask import Flask,render_template,jsonify,request,send_from_directory
import time
import os
import base64
import random


app = Flask(__name__)
UPLOAD_FOLDER='upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['png','jpg','JPG','PNG'])

def allowed_file(filename):
  return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS

@app.route('/',methods=['GET'],strict_slashes=False)
def indexpage():
  return render_template('index.html')

@app.route('/',methods=['POST'],strict_slashes=False)
def api_upload():
  log = open("error.log","w+")
  file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
  if not os.path.exists(file_dir):
    os.makedirs(file_dir)
  print request.headers
  print >> log, request.headers
  f = request.files['file']
  postLang = request.form.get("lang", type=str) 

  log.close()

  if f and allowed_file(f.filename):
    fname = secure_filename(f.filename)
    ext = fname.rsplit('.',1)[1]
    unix_time = int(time.time())
    new_filename = str( random.randrange(0, 10001, 2))+str(unix_time)+'.'+ext
    f.save(os.path.join(file_dir,new_filename))
    if cmp(postLang, "chi_sim"):
      strboxs = pytesseract.image_to_boxes(Image.open("/var/OCRhtml/upload/" + new_filename), lang="chi_sim")
      strdata = pytesseract.image_to_string(Image.open("/var/OCRhtml/upload/" + new_filename), lang="chi_sim")
      print "Chinese"
    else:
      strboxs = pytesseract.image_to_boxes(Image.open("/var/OCRhtml/upload/"+new_filename))
      strdata = pytesseract.image_to_string(Image.open("/var/OCRhtml/upload/"+new_filename))
    return jsonify({"errno":0, "msg":"succeed ","data":strdata,"info":strboxs})
  else:
    return jsonify({"errno":1001, "errmsg":u"failed"})

if __name__ == '__main__':
  http_server = WSGIServer(('', 80), app)
  http_server.serve_forever()

到此这篇关于基于Python的OCR实现示例的文章就介绍到这了,更多相关Python OCR 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现定制交互式命令行的方法
Jul 03 Python
python处理按钮消息的实例详解
Jul 11 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
python中uuid模块实例浅析
Dec 29 Python
浅谈Python中的正则表达式
Jun 28 Python
Python %r和%s区别代码实例解析
Apr 03 #Python
解决flask接口返回的内容中文乱码的问题
Apr 03 #Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 #Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 #Python
python传到前端的数据,双引号被转义的问题
Apr 03 #Python
Django实现将一个字典传到前端显示出来
Apr 03 #Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 #Python
You might like
PHP面向对象详解(三)
2015/12/07 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
mongodb和php的用法详解
2019/03/25 PHP
PHP实现简单登录界面
2019/10/23 PHP
JS判断两个时间大小的示例代码
2014/01/28 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
python根据经纬度计算距离示例
2014/02/16 Python
多个应用共存的Django配置方法
2018/05/30 Python
Python3匿名函数用法示例
2018/07/25 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python分布式编程实现过程解析
2019/11/08 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
python中温度单位转换的实例方法
2020/12/27 Python
python中random模块详解
2021/03/01 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
债务追讨授权委托书范本
2014/10/16 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书