基于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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
Python for循环中的陷阱详解
Jul 13 Python
django admin后台添加导出excel功能示例代码
May 15 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
如何把外网python虚拟环境迁移到内网
May 18 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如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
vue实现点击追加选中样式效果
2019/11/01 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python regex库实例用法总结
2021/01/03 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
怎样创建、运行java程序
2014/08/01 面试题
业务部主管岗位职责
2014/01/29 职场文书
暑假安全保证书
2015/02/28 职场文书
纪检监察立案决定书
2015/06/24 职场文书
我的生日感言
2015/08/03 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers