基于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的Django框架中创建语言文件
Jul 27 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
python 连接sqlite及简单操作
Jun 30 Python
Python实现随机漫步功能
Jul 09 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
详解python多线程之间的同步(一)
Apr 03 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
python mysql中in参数化说明
Jun 05 Python
python 下划线的不同用法
Oct 24 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 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递归调用与静态变量使用
2012/12/16 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
关于Python数据结构中字典的心得
2017/12/04 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
python matlibplot绘制3D图形
2018/07/02 Python
python编程使用协程并发的优缺点
2018/09/20 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
scrapy-splash简单使用详解
2021/02/21 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
什么是会话Bean
2015/05/14 面试题
文言文形式的学生求职信
2013/12/03 职场文书
车间班组长的职责
2013/12/13 职场文书
2014学年自我鉴定
2014/02/23 职场文书
工作求职自荐信
2014/06/13 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书