基于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开发中range()函数用法实例分析
Nov 12 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
python pygame实现五子棋小游戏
Oct 26 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
Python 静态方法和类方法实例分析
Nov 21 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
Python代码中如何读取键盘录入的值
May 27 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 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
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
jquery常用操作小结
2014/07/21 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python入门教程之运算符与控制流
2016/08/17 Python
Python爬豆瓣电影实例
2018/02/23 Python
Python中 map()函数的用法详解
2018/07/10 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
大学社团活动策划书
2014/01/26 职场文书
教学实习自我评价
2014/01/28 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
自主招生英文自荐信
2015/03/25 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL