基于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的Bottle框架的一些使用技巧介绍
Apr 08 Python
python获取当前日期和时间的方法
Apr 30 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
Python学习小技巧之列表项的拼接
May 20 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python pandas如何向excel添加数据
May 22 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
Python Socket多线程并发原理及实现
Dec 11 Python
python获取天气接口给指定微信好友发天气预报
Dec 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php 删除记录实现代码
2009/03/12 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
node.js基础知识小结
2018/02/26 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python绘制简单折线图代码示例
2017/12/19 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
高效使用Python字典的清单
2018/04/04 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
工作自荐信
2013/12/11 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
开会通知短信大全
2015/04/20 职场文书
道歉的话语大全
2015/05/12 职场文书
家电创业计划书
2019/08/05 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android