基于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封装对象实现时间效果
Apr 23 Python
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
python 执行shell命令并将结果保存的实例
May 11 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
使用python3构建文件传输的方法
Feb 13 Python
Python中Numpy mat的使用详解
May 24 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
pytorch实现ResNet结构的实例代码
May 17 Python
python区块链实现简版工作量证明
May 25 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生成静态HTML速度快类库
2007/03/18 PHP
PHP令牌 Token改进版
2008/07/18 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
详解python之协程gevent模块
2018/06/14 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
Python 变量的创建过程详解
2019/09/02 Python
python 绘制正态曲线的示例
2020/09/24 Python
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
岗位职责范本
2013/11/23 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
优秀家长事迹材料
2014/05/17 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
实习生矿工检讨书
2014/10/13 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
详解Django的MVT设计模式
2021/04/29 Python