基于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判断操作系统类型代码分享
Nov 22 Python
Python实现批量下载图片的方法
Jul 08 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
python编程线性回归代码示例
Dec 07 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
python实现机器学习之多元线性回归
Sep 06 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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来处理多个提交任务
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
Javascript之String对象详解
2016/06/08 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
Python中删除文件的程序代码
2011/03/13 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
python实现超级马里奥
2020/03/18 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Python datetime 如何处理时区信息
2020/09/02 Python
python 元组和列表的区别
2020/12/30 Python
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
医学会议开幕词
2016/03/03 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技