EasyOCR 简介及使用指南
EasyOCR 是一个强大的开源光学字符识别(OCR)库,基于深度学习模型,能够快速准确地识别图片中的文字,并将其转换为可编辑和可搜索的文本格式。与传统的 OCR 工具相比,EasyOCR 不仅识别速度快,还能处理各种复杂的文本图像,如弯曲文本、不同字体、混合多种语言的文本等。
在本文中,我们将介绍 EasyOCR 在 Python 和 PHP 中的基本使用方法和最佳实践。
特点和优势
- 多语言支持:EasyOCR 支持包括中文简体、英文在内的 80 多种语言的文本识别,广泛应用于不同语言和地区的场景。
- 易于安装和使用:EasyOCR 提供了简单易用的 API,用户可以通过简单的 Python 代码实现复杂的文字识别任务。同时,它也支持 GPU 加速,显著提高识别速度和效率。
- 灵活性强:EasyOCR 不仅支持单语言识别,还能处理多语言混合的情况,并支持对识别结果进行后处理,如去噪、二值化、旋转校正等,以提高识别精度。
- 广泛的应用场景:适用于文档数字化、名片信息提取、车牌识别、街道标识识别、产品包装信息提取、手写文字识别等多个场景。
- 面向开发者的 SDK 集成:支持本地化开发 SDK 集成,适用于 C/S、B/S 及 Android 移动端项目,实现更丰富的功能和更好的用户体验。
- 商业支持:在银行、爬虫应用、支付、大数据处理及在线游戏图形数据分析处理等领域,EasyOCR 提供了强大的 OCR 引擎支持。
环境配置
查看已有的虚拟环境
conda env list
# conda environments:
# base /home/www/anaconda3
# tinywan-modelscope /home/www/anaconda3/envs/tinywan-modelscope
激活虚拟环境
conda activate tinywan-modelscope
查看 Python 环境
python -V
# 输出:Python 3.10.13
PHP 环境测试代码
<?php
/**
* @desc phpy.php
* @author Tinywan(ShaoBo Wan)
*/
declare(strict_types=1);
// 导入 Python 模块
$os = PyCore::import("os");
echo $os->version(). PHP_EOL;
测试打印命令
/usr/local/php-8.2.14/bin/php phpy01.php
输出如下信息表示环境和扩展配置正确:
posix.uname_result(sysname='Linux', nodename='ShaoBoWan', release='4.15.0-137-generic', version='#141-Ubuntu SMP Fri Feb 19 13:46:27 UTC 2021' machine='x86_64')
安装 EasyOCR
安装命令
pip install easyocr
安装过程
以下为安装 EasyOCR 的输出日志:
Looking in indexes: https://mirrors.cloud.aliyuncs.com/pypi/simple
Collecting easyocr
Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/cb/0e/09bafec31db720e796d3f5b0814c37c5fdb59dcd35a2c6c6b1c774b09646/easyocr-1.7.1-py3-none-any.whl (2.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 10.3 MB/s eta 0:00:00
...
查看已安装的 EasyOCR 版本
(tinywan-modelscope) www@ pip list |grep easyocr
easyocr 1.7.1
使用指南
OCR 识别图片示例
使用 demo.png
作为示例图片。
Python 脚本
编写 OCR 识别脚本 resty_easyocr.py
:
import easyocr
import sys
def extract_text_from_image(image_path):
"""
从给定的图片路径中提取文本。
参数:
image_path (str): 图片文件的路径。
返回:
str: 提取的文本,每行文本之间用换行符分隔。
"""
# 初始化EasyOCR,指定需要识别的语言,这里是中文简体(ch_sim)和英文(en)
reader = easyocr.Reader(['ch_sim', 'en'])
# 使用readtext方法从图片中读取文本
results = reader.readtext(image_path)
# 初始化一个空字符串用于存储提取的文本
text = ""
# 遍历识别结果
for result in results:
# 每个result是一个元组,其中result[0]是边界框信息,result[1]是识别到的文本
# 这里我们只需要文本部分,并将其添加到text字符串中,每个文本后添加一个换行符
text += result[1] + "\n"
# 返回最终提取的文本
return text
if __name__ == "__main__":
# 检查是否提供了命令行参数(图片路径)
if len(sys.argv) != 2:
print("Usage: python script.py <image_path>")
sys.exit(1) # 非零退出码表示错误
# 从命令行参数中获取图片路径
image_path = sys.argv[1]
# 调用函数提取文本
text = extract_text_from_image(image_path)
# 打印提取的文本
print(text)
执行命令并查看结果
(tinywan-modelscope) D:\AI\python>python resty_easyocr.py .\demo.png
运行该脚本后,将会输出识别到的文本内容。
PHP 脚本
通过 py2php 转换工具 将 Python 代码转换为 PHP 代码。以下为转换后的 PHP 脚本 resty_easyocr.php
:
<?php
/**
* @desc phpy.php
* @author Tinywan(ShaoBo Wan)
*/
declare(strict_types=1);
$operator = PyCore::import("operator");
$builtins = PyCore::import("builtins");
$easyocr = PyCore::import('easyocr');
function extract_text_from_image($image_path)
{
$reader = $easyocr->Reader(new PyList(["ch_sim", "en"]));
$results = $reader->readtext($image_path);
$text = "";
$__iter = PyCore::iter($results);
while ($current = PyCore::next($__iter)) {
$result = $current;
$text += $result[1] + "\n";
}
return $text;
}
$image_path = './demo.png';
$text = extract_text_from_image($image_path);
PyCore::print($text);
执行 PHP 脚本
/usr/local/php-8.2.14/bin/php resty_easyocr.php
首次执行时,如果未安装检测模型和识别模型,脚本会自动下载所需模型文件。
结语
EasyOCR 是一个功能强大且易于使用的 OCR 库,适合需要从图像中提取文本的各种应用场景。通过 Python 和 PHP 的集成,开发者可以灵活地将其应用到不同的项目中,实现高效的文字识别功能。