基于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的面向对象思想分析
Jan 14 Python
python分析apache访问日志脚本分享
Feb 26 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
Python中extend和append的区别讲解
Jan 24 Python
Python3中函数参数传递方式实例详解
May 05 Python
python添加菜单图文讲解
Jun 04 Python
python可视化爬虫界面之天气查询
Jul 03 Python
Python Web版语音合成实例详解
Jul 16 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
python 写一个水果忍者游戏
Jan 13 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处理二进制数据的实现方法
2016/06/13 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JS重要知识点小结
2011/11/06 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python线性回归实战分析
2018/02/01 Python
Mac安装python3的方法步骤
2019/08/09 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
数据库笔试题
2013/05/09 面试题
给医院的感谢信
2015/01/21 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android