综合 EasyOCR光学字符识别库,基于深度学习,支持80多种语言,能够快速准确地识别图片中的文字

2024-11-19 06:41:57 +0800 CST views 584

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 的集成,开发者可以灵活地将其应用到不同的项目中,实现高效的文字识别功能。

复制全文 生成海报 OCR 深度学习 图像处理 编程 开发工具

推荐文章

JS中 `sleep` 方法的实现
2024-11-19 08:10:32 +0800 CST
Nginx 反向代理 Redis 服务
2024-11-19 09:41:21 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
Python设计模式之工厂模式详解
2024-11-19 09:36:23 +0800 CST
开发外贸客户的推荐网站
2024-11-17 04:44:05 +0800 CST
【SQL注入】关于GORM的SQL注入问题
2024-11-19 06:54:57 +0800 CST
使用 Nginx 获取客户端真实 IP
2024-11-18 14:51:58 +0800 CST
Golang 中你应该知道的 Range 知识
2024-11-19 04:01:21 +0800 CST
Vue3中如何实现响应式数据?
2024-11-18 10:15:48 +0800 CST
LangChain快速上手
2025-03-09 22:30:10 +0800 CST
HTML + CSS 实现微信钱包界面
2024-11-18 14:59:25 +0800 CST
Vue3 组件间通信的多种方式
2024-11-19 02:57:47 +0800 CST
前端代码规范 - 图片相关
2024-11-19 08:34:48 +0800 CST
Python实现Zip文件的暴力破解
2024-11-19 03:48:35 +0800 CST
程序员茄子在线接单