基于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编写简单的小程序编译成exe跑在win10上
Jan 15 Python
Python3处理HTTP请求的实例
May 10 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
python自动识别文本编码格式代码
Dec 26 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python爬取梨视频的示例
Jan 29 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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中使用XML
2006/10/09 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php实现生成验证码实例分享
2016/04/10 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
几行js代码实现自适应
2017/02/24 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python批量生成本地ip地址的方法
2015/03/23 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
python计算无向图节点度的实例代码
2019/11/22 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
土木工程师岗位职责
2013/11/24 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
放假通知范文
2015/04/14 职场文书
浅谈Web Storage API的使用
2021/06/23 Javascript
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android