微信扫码
与创始人交个朋友
我要投稿
**点击上方蓝字 关注我**
OCR(Optical Character Recognition,光学字符识别)已经融入到我们日常生活和工作中,有可能你没感觉到,但是你一定用到过,比如常见的一些场景:
文档数据存储:例如,将纸质书籍、报纸、杂志或其他文件转换为可编辑的文本格式,便于存储和搜索;
自动数据录入:比如在报销发票、整理收据时。利用OCR技术,可以自动提取这些信息,提高处理速度;
车牌识别:智能交通中的一个最常见应用,无论是停车场的自动收费系统,还是交通违法行的车牌设别等,都是采用了OCR车牌设别技术;
身份验证:识别身份证、护照、驾照等证件上的文本信息来验证身份,比如很多银行APP添加银行卡时的号卡自动化设别,身份证自动设别验证等;
物流和电商:最常见的就是菜鸟驿站的自助取件时扫描取货码,OCR可以读取快递上的标签信息。
社交媒体:OCR可以用于识别照片中的文字标签等,比如电脑端的微信聊天发送的图标,微信自动提取文字的功能。
文档比较和对比:OCR可以提取文档中的文本内容,并与其他文档或数据库中的信息进行比较和审计,以发现差异或潜在的问题。比如在测试工作中最常见的UI页面对比技术。
所以,作为一个IT人员,我们一定要对OCR的技术实现、原理等具备一定的了解和运用。目前市场上主流的开源OCR技术框架有以下几种:Tesseract (Tesseract-OCR)、OCRopus、EasyOCR,具体优缺点对比如下:
OCR技术框架 | 简介 | 优点 | 缺点 |
Tesseract | 由Google开发的OCR引擎 |
1. 开源性:用户可以自由使用和修改,适应性强 2. 多平台支持:支持Windows、Linux、Mac等多种操作系统。 3. 多种语言支持:支持多种语言的识别,包括英语、中文等。 4. 深度学习支持:采用深度学习技术,提供较高的识别精度。 5. 丰富的API和工具:提供丰富的API接口和命令行工具,方便开发者集成和使用。 |
1. 识别准确性:虽然识别准确率较高,但在某些复杂场景下仍可能存在误识别。 2. 依赖图像质量:输入图像的质量对识别结果有很大影响,低质量的图像可能导致识别率下降。 3. 定制和优化需求:针对不同语言或特定字体,可能需要额外的定制和优化工作。 4. 学习曲线:对于不熟悉OCR技术的用户来说,可能需要一定的学习成本来掌握其使用方法。 |
OCRopus | 一款基于Python的OCR引擎 |
1. 高识别准确性:结合多种先进技术,如神经网络、深度学习等,提供高识别准确性 2. 可扩展性:支持自定义训练数据和语言模型,可根据需求进行扩展和优化。 3. 模块化设计:采用模块化设计,各模块之间相对独立,方便进行二次开发和定制。 4. 多种语言支持:支持多种语言的OCR识别,满足多语言处理需求。 5. 基于Python:对于熟悉Python的用户来说,上手容易,易于集成到Python项目中。 |
1. 依赖外部库:可能需要安装额外的Python库或依赖项,增加了部署的复杂性。 2. 学习曲线:对于不熟悉OCR技术或Python语言的用户来说,可能需要一定的学习成本。 3. 性能:在处理大量图像或复杂场景时,性能可能受到一定限制。 4. 定制和优化需求:针对不同语言或特定场景,可能需要额外的定制和优化工作。 |
EasyOCR | 款基于Python的OCR引擎 |
1. 易于使用:提供简单易用的API接口,使开发者能够轻松集成OCR功能 2. 多语言支持:支持多种语言的识别,包括中文、英文、日文、韩文等。 3. 高精度识别:使用深度学习技术进行文本识别,提供高精度识别的能力。 4. 多种输出格式:支持多种输出格式,如TXT、JSON、XML等,方便后续处理。 5. 批量处理:支持同时处理多个图像文件,提高处理效率。 |
1. 性能:在处理大量图像或复杂场景时,性能可能受到一定影响。 2. 依赖外部库:可能需要安装额外的Python库或依赖项。 3. 定制和优化需求:针对不同语言或特定字体,可能需要额外的定制和优化工作。 4. 学习曲线:对于不熟悉OCR技术的用户来说,能够快速的入门和使用 |
当然今天也不是来帮助大家选择的,还是那句话,合适自己的才是最好的。结合上述不同OCR框架的对比,为了快速入门和使用,本文选择EasyOCR进行介绍和说明。
一句话介绍EasyOCR:一款基于Python的开源OCR引擎。支持80+种语言,包括中文、日语、韩语等,并且具有高效的识别速度和准确的识别结果,支持用户自定义设别模型,还提供了灵活的API接口,方便集成到第三方应用系统中。
? 项目信息
https://github.com/JaidedAI/EasyOCR
https://www.jaided.ai/
https://www.jaided.ai/easyocr/install/
图像文本识别:EasyOCR能够将图像中的文本转换为可编辑的文本,支持多种语言,包括英文、中文、法文、德文等。它使用深度学习技术进行文本识别,具有高精度识别的能力,能够识别各种字体、字号和印刷质量的文本。
验证码识别:EasyOCR特别针对CAPTCHA验证码图片进行了优化,能够识别并清理各种验证码和票据图片,提高了识别的准确性。
票据识别:EasyOCR还针对票据等特定场景进行了优化,使其能够更准确地识别票据上的文本信息。
图像清理:EasyOCR内置了图片清理功能,可以自动清理图像中的干扰元素,如噪点、背景色等,以提高文本识别的准确率。同时,它还支持多种预定义的图片清理模式,可以根据不同的场景进行灵活选择。
本地化开发SDK集成:EasyOCR 提供了本地化的开发SDK集成,可以与C/S、B/S及Android移动端项目进行原生集成,方便开发者将OCR功能集成到自己的应用中。
备注:需要具备Python和pip环境。本文环境信息:
#python and pip version
Python 3.10.12
pip 22.0.2
一、安装EasyOCR
pip install easyocr
# 如果发现安装较慢,可以添加阿里源
pip install easyocr -i https://mirrors.aliyun.com/pypi/simple/
# 安装过程如下
none-manylinux1_x86_64.whl (731.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 540.4 kB/s eta 0:00:00
DEPRECATION: The HTML index page being used (https://mirrors.aliyun.com/pypi/simple/nvidia-cusparse-cu12/) is not a proper HTML 5 document. This is in violation of PEP 503 which requires these pages to be well-formed HTML 5 documents. Please reach out to the owners of this index page, and ask them to update this index page to a valid HTML 5 document. pip 22.2 will enforce this behaviour change. Discussion can be found at https://github.com/pypa/pip/issues/10825
Collecting nvidia-cusparse-cu12==12.1.0.106
Downloading https://mirrors.aliyun.com/pypi/packages/65/5b/cfaeebf25cd9fdec14338ccb16f6b2c4c7fa9163aefcf057d86b9cc248bb/nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 1.5 MB/s eta 0:00:00
DEPRECATION: The HTML index page being used (https://mirrors.aliyun.com/pypi/simple/nvidia-cuda-cupti-cu12/) is not a proper HTML 5 document. This is in violation of PEP 503 which requires these pages to be well-formed HTML 5 documents. Please reach out to the owners of this index page, and ask them to update this index page to a valid HTML 5 document. pip 22.2 will enforce this behaviour change. Discussion can be found at https://github.com/pypa/pip/issues/10825
Collecting nvidia-cuda-cupti-cu12==12.1.105
Downloading https://mirrors.aliyun.com/pypi/packages/7e/00/6b218edd739ecfc60524e585ba8e6b00554dd908de2c9c66c1af3e44e18d/nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 2.0 MB/s eta 0:00:00
DEPRECATION: The HTML index page being used (https://mirrors.aliyun.com/pypi/simple/nvidia-curand-cu12/) is not a proper HTML 5 document. This is in violation of PEP 503 which requires these pages to be well-formed HTML 5 documents. Please reach out to the owners of this index page, and ask them to update this index page to a valid HTML 5 document. pip 22.2 will enforce this behaviour change. Discussion can be found at https://github.com/pypa/pip/issues/10825
Collecting nvidia-curand-cu12==10.3.2.106
Downloading https://mirrors.aliyun.com/pypi/packages/44/31/4890b1c9abc496303412947fc7dcea3d14861
二、验证是否安装完成
安装完成后,本地具备 EasyOCR命令
easyocr -h
usage: easyocr [-h] -l LANG [LANG ...] [--gpu {True,False}] [--model_storage_directory MODEL_STORAGE_DIRECTORY]
[--user_network_directory USER_NETWORK_DIRECTORY] [--recog_network RECOG_NETWORK] [--download_enabled {True,False}]
[--detector {True,False}] [--recognizer {True,False}] [--verbose {True,False}] [--quantize {True,False}] -f FILE
[--decoder {greedy,beamsearch,wordbeamsearch}] [--beamWidth BEAMWIDTH] [--batch_size BATCH_SIZE] [--workers WORKERS]
[--allowlist ALLOWLIST] [--blocklist BLOCKLIST] [--detail {0,1}] [--rotation_info ROTATION_INFO] [--paragraph {True,False}]
[--min_size MIN_SIZE] [--contrast_ths CONTRAST_THS] [--adjust_contrast ADJUST_CONTRAST] [--text_threshold TEXT_THRESHOLD]
[--low_text LOW_TEXT] [--link_threshold LINK_THRESHOLD] [--canvas_size CANVAS_SIZE] [--mag_ratio MAG_RATIO] [--slope_ths SLOPE_THS]
[--ycenter_ths YCENTER_THS] [--height_ths HEIGHT_THS] [--width_ths WIDTH_THS] [--y_ths Y_THS] [--x_ths X_THS] [--add_margin ADD_MARGIN]
[--output_format {standard,dict,json}]
三、Python中使用
# 导入easyocr库
import easyocr
# 创建一个Reader实例,并指定识别的语言列表。例如,识别简体中文和英文:
reader = easyocr.Reader(['ch_sim', 'en'])
# 读取和识别图像:
result = reader.readtext('path_to_your_image.jpg')
注:reader = easyocr.Reader(['ch_sim','en'])用于将模型加载到内存中。需要联网下载模型,但只需运行一次,如果网络不好,可以按照以下说明,手动下载模型。
#模型下载地址
https://www.jaided.ai/easyocr/modelhub/
首先下载文本检测模型:
下载识别模型,识别模型对应了各种语言包,下图是简体中文和英文的识别模型:
如果有其他语言设别需要,可以安装对应的语言包代码下载和加载:
# 语言模型对应的代码
https://www.jaided.ai/easyocr/
下载的模型解压后,放入“~/.EasyOCR/model”文件夹中
ls /root/.EasyOCR/model
craft_mlt_25k.pth english_g2.pth zh_sim_g2.pth
结果输出
输出将采用列表格式,每个项目分别代表一个边界框、检测到的文本和置信度。
[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚园路', 0.3754989504814148),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
([[517, 81], [565, 81], [565, 123], [517, 123]], '东', 0.9989598989486694),
([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]
可以设置 detail=0 更简单的输出。
reader.readtext('chinese.jpg', detail = 0)
['愚园路', '西', '东', '315', '309', 'Yuyuan Rd.', 'W', 'E']
easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True
EasyOCR提供了强大的集成能力,提供API和SDK方便第三方应用快速集成和使用。
https://www.jaided.ai/easyocr/documentation/
本章节就是基于EasyOCR实现一个简单的OCR识别系统,包含以下两个能力:
提供用户上传图片的功能,无需存储图片
能够将用户上传图片采用easyocr进行设别,设别的结果直接在页面上展示
实现逻辑:用Flask作为后端服务来处理图片上传和OCR识别,并使用HTML和JavaScript在前端页面上提供上传和显示结果的功能。由于不需要存储图片,可以直接在服务器上读取上传的图片流,并使用EasyOCR进行识别。
1.首先,确保开发环境中安装了Flask和EasyOCR:
pip install Flask easyocr -i https://mirrors.aliyun.com/pypi/simple/
2.然后,编写Flask(一个使用 Python编写的轻量级Web应用程序开发框架)应用:
from flask import Flask, request, jsonify, render_template_string
import easyocr
import io
import json
from PIL import Image
app = Flask(__name__)
@app.route('/')
def index():
# 使用内联模板或重定向到HTML文件
return render_template_string('''
<html lang="en">
<head>
<meta charset="UTF-8">
<title>OCR Recognition</title>
</head>
<body>
<h1>OCR Recognition</h1>
<form method="post" action="/ocr" enctype="multipart/form-data">
<input type="file" name="file" required>
<input type="submit" value="Upload and Recognize">
</form>
<div id="result" style="margin-top: 20px;"></div>
<script>
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
var fileInput = document.querySelector('input[type=file]');
var formData = new FormData();
formData.append('file', fileInput.files[0]);
var xhr = new XMLHttpRequest();
xhr.open('POST', '/ocr', true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
document.getElementById('result').innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre>';
}
};
xhr.send(formData);
});
</script>
</body>
</html>
''')
@app.route('/ocr', methods=['POST'])
def ocr():
if 'file' not in request.files:
return jsonify({'error': 'No file part in the request'}), 400
file = request.files['file']
if not file.filename:
return jsonify({'error': 'No selected file'}), 400
# 使用io.BytesIO读取文件流
stream = io.BytesIO(file.read())
img = Image.open(stream)
# 使用EasyOCR进行OCR识别
reader = easyocr.Reader(['ch_sim', 'en']) # 根据需要添加语言
result = reader.readtext(img,detail = 0)
# 返回识别结果
return json.dumps(result)
if __name__ == '__main__':
app.run(debug=True)
在上述脚本中,前端代码已经包含在后端Flask应用中,作为一个内联模板。这个模板包含了一个文件上传表单和一个用于显示结果元素。页面监听表单提交事件,并使用XMLHttpRequest发送文件到/ocr路由进行识别。识别结果会以JSON格式返回。
3.启动ocr_app应用:
python3 ocr_app.py
# 界面返回
* Serving Flask app 'ocr_app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 761-980-277
3.本地访问 http://127.0.0.1:5000 打开界面:
4.上传图片(网络上的一个测试身份证)进行,识别:
设别的效果:
EasyOCR 支持多种编程语言和许多优点和特性。它提供了简洁的API接口,使得使用者只需几行代码就能实现复杂的OCR功能。其次,它在CPU和GPU上运行都表现优秀,即使在没有高性能硬件的情况下也能高效工作。总之,EasyOCR 是一款高效、易用、功能强大的OCR识别引擎(当然,如果需要更高精度的设别,还是需要经过特点场景的训练才行,比如上章节中图片设别就有错误),适用于各种需要文字识别和提取的场景。有兴趣的同学可以实践下,生命不息,学习不止!
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-14
2024-04-12
2024-05-10
2024-05-28
2024-07-18
2024-04-25
2024-05-22
2024-04-26