LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

一个免费开源可完全离线的OCR工具Umi-OCR(本文附带封装教程DEMO源码)

admin
2024年7月24日 15:39 本文热度 908

在《Easy-OCR》一文中,我们详细描述了OCR的应用场景和Easy-OCR的使用,后续有同学反馈,Easy-OCR的安装相对较为麻烦,还需要下载模型包,在使用上也以Python命令为主,对新手同事不是太友好。也有同学反馈为什么不用飞浆Paddle,本质上paddle场景主要面向视觉分析,深度学习场景,而且在安装使用上的难度也不是太低。

所以,今天给大家介绍的是一个不同于Easy-OCR和飞浆Paddle,而是一个无论在部署安装,还是使用上更加简单的OCR软件-Umi-OCR。为了说明这几个OCR区别,整理了一份对比表如下:

对比项Umi-OCREasy-OCRPaddleOCR
设备要求主要Windows操作系统,Linux(测试中)支持多种操作系统支持多种操作系统
定位OCR设别软件,底层依赖OCR识别引擎OCR识别引擎OCR识别引擎
易用性图形化界面,适合非专业用户,也提供命令行和API接口适合具有一定编程基础的开发者使用适合具有一定编程基础的开发者使用
性能性能优化好,底层可采用Paddle引擎,电脑性能足够情况下速度快效率一般,但是可利用GPU加速性能优化好,支持多种硬件加速
学习难度较低,图形化界面易于上手中等,需要编程基础,但API接口简洁中等,需要编程基础,对比其他Python库可能存在学习曲线
安装部署无需安装,下载解压即可使用通过pip安装,可能需要下载预训练模型通过pip安装PaddlePaddle,再安装PaddleOCR或使用PaddleHub集成
多语言支持支持支持
应用场景截图OCR、批量OCR、二维码识别等 文档数字化、名片信息提取、车牌识别等图像识别、自然语言处理、推荐系统等 
批量处理支持批量导入图片进行文字识别,支持多种输出格式支持批量处理,具体实现需结合API使用支持批量预测,可通过编程实现复杂批处理
离线使用是,完全离线使用是,但需预先下载模型文件是,支持离线


01 
— 
 Umi-OCR 介绍 

一个开源、免费的离线OCR软件。简单、易用,开放API。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。

🏠  项目信息

#Github地址https://github.com/hiroi-sora/Umi-OCR

🚀功能特性

  • 免费:本项目所有代码开源,完全免费。

  • 方便:解压即用,离线运行,无需网络。

  • 高效:自带高效率的离线OCR引擎,内置多种语言识别库。

  • 灵活:支持命令行、HTTP接口等外部调用方式。

  • 功能:截图OCR / 批量OCR / PDF识别 / 二维码 / 公式识别



02
 Umi-OCR 使用 

Umi-OCR提供了多种下载方式,可以安装网络环境自行选择。下载后,直接解压使用即可:

# 蓝奏云 (国内推荐,免注册/无限速)https://hiroi-sora.lanzoul.com/s/umi-ocr# Github releasehttps://github.com/hiroi-sora/Umi-OCR/releases/latest# Source Forgehttps://sourceforge.net/projects/umi-ocr
  • 截图(图片)OCR

支持屏幕截图,粘贴图片,快捷转文字,支持识别栏编辑文字,允许划选多个记录复制。

支持设别后文本后处理,整理OCR结果的排版和顺序,使文本更适合阅读和使用。

  • 批量OCR

对批量导入本地图片进行识别,支持与截图OCR一样的文本后处理功能,可一次性导入几百张图片进行任务。

OCR文本后处理支持忽略区域,适用于排除图片中的不想要的文字。

  • 文档识别

支持pdf, xps, epub, mobi, fb2, cbz 等格式文档批量识别,支持设定忽略区域,可用于排除页眉页脚的文字。

  • 二维码识别

截图/粘贴/拖入本地图片,读取其中的二维码、条形码,支持19种协议。


03
 Umi-OCR 页面封装 

Umi-OCR同时提供了本地命令行和HTTP接口。本次我们主要基于的Umi-OCR接口,将其封装为一个简单的B/S架构WEB应用。

# Umi-OCR http接口说明文档https://github.com/hiroi-sora/Umi-OCR/blob/main/docs/http/README.md

一、开放HTTP接口地址

在全局设置页中勾选高级设置,允许HTTP服务才能使用HTTP接口,将主机切换到任何可用地址。

二、WEB封装设计说明

  • 后端:采用Flask 负责处理文件上传、调用Umi-OCR设别以及对设别后的进行数据格式化。

  • 前端:页面使用 Bootstrap 进行样式设计,并通过 AJAX 实现异步数据提交和更新,允许用户上传图片并进行 OCR 识别,用户可以在页面地获取到Umi-OCR识别结果。

三、具体代码实现

  • 后端 Flask 应用 (umi-ocr.py)代码:

from flask import Flask, request, render_template, jsonifyimport requestsimport base64import osfrom werkzeug.utils import secure_filenameimport json
app = Flask(__name__)app.config['UPLOAD_FOLDER'] = 'uploads/'  # 确保这个文件夹存在
def format_result(data):    formatted_results = []    for item in data:        result = {            'text': item.get('text', ''),            'score': item.get('score', 0),            'bounding_box': item.get('box', [])        }        formatted_results.append(result)    return formatted_results
@app.route('/', methods=['GET'])def index():    return render_template('index.html')
@app.route('/upload', methods=['POST'])def upload_file():    if request.method == 'POST':        # 获取上传的图片        image_file = request.files['image']        if image_file:            filename = secure_filename(image_file.filename)            image_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))            # 读取图片内容并转换为base64编码            with open(os.path.join(app.config['UPLOAD_FOLDER'], filename), "rb") as image_file:                encoded_image = base64.b64encode(image_file.read()).decode('utf-8')            # 调用OCR接口            response = requests.post('http://xxx.xxx.xxx.xxx:1224/api/ocr', json={'base64': encoded_image})            # URL换成运行umi-ocr的服务器地址,解析响应            if response.status_code == 200:                result = response.json()                result['data'] = format_result(result['data'])  # 格式化数据                return jsonify(result)            else:                return jsonify({'error': 'Failed to connect to OCR service'})    return jsonify({'error': 'No image provided'})
if __name__ == '__main__':    app.run(debug=True, host='0.0.0.0')
  • 前端 HTML页面(index.html)应用:

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>OCR识别结果展示</title>    <!-- 引入Bootstrap CSS -->    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">    <style>        #results {            margin-top: 20px;        }        .result-text {            font-size: 16px;            color: #333;        }</style></head><body>    <div class="container mt-4">        <h2>OCR识别结果</h2>        <form id="uploadForm" method="post" enctype="multipart/form-data">            <div class="form-group">                <input type="file" class="form-control" name="image" required>            </div>            <button type="submit" class="btn btn-primary">上传图片</button>        </form>        <div id="results" class="result-text"></div>    </div>
   <!-- 引入jQuery和Bootstrap JS -->    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>    <script>        $(document).ready(function() {            $('#uploadForm').submit(function(e) {                e.preventDefault();                var formData = new FormData(this);
               $.ajax({                    url: '/upload',                    type: 'post',                    data: formData,                    contentType: false,                    processData: false,                    success: function(data) {                        if (data.error) {                            $('#results').text(data.error);                        } else if (data.code === 100) {                            // 将所有文本结果拼接并显示                            var allText = data.data.map(function(item) {                                return item.text;                            }).join('\n');                            $('#results').text(allText);                        } else {                            $('#results').text('识别失败或未检测到文本。');                        }                    },                    error: function(xhr, status, error) {                        $('#results').text('请求出错:' + error);                    }                });            });        });</script></body></html>

四、部署运行
  • 环境要求

#需要python3环境,确保环境中安装了Flaskpip install Flask easyocr -i https://mirrors.aliyun.com/pypi/simple/
  • 运行程序

# 创建运行目录mkdir -p /opt/Umi-OCR/uploadsmkdir -p /opt/Umi-OCR/templates# 将umi-ocr.py文件复制至 Umi-OCR目录mv umi-ocr.py /opt/Umi-OCR/# 将index.html文件复制至Umi-OCR/templates目录mv index.html /opt/Umi-OCR/templates# 运行程序python umi-ocr.py
 * Running on http://xxx.xxx.xxx.xxx:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 379-609-535
  • 访问 http://hostip:5000,打开页面

四、使用测试

在页面上传图片,查看识别效果


04
 最后 

当然,上述只是一个简单的教程,感兴趣的同学可以在DEMO之上扩展批量识别等功能。虽然Umi-OCR在使用上主要面向非专业用户,但是在设计上提供了详细的API接口和命令行。方便专业的开发人员可以按照需要的场景和应用自行扩展和集成。


该文章在 2024/7/24 15:49:36 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved