基于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 11 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
用Python写一段用户登录的程序代码
Apr 22 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
python多线程下信号处理程序示例
May 31 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
关于Python错误重试方法总结
Jan 03 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正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP错误机制知识汇总
2016/03/24 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python中的文件和目录操作实现代码
2011/03/13 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python读取LMDB中图像的方法
2018/07/02 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
初中体育教学反思
2014/01/14 职场文书
服务质量承诺书
2014/03/27 职场文书
团代会主持词
2014/04/02 职场文书
作文评语大全
2014/04/23 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL