【Python 常用脚本及命令系列 9 -- 图片文字识别 EasyOCR使用】

2023-10-31 14:20

本文主要是介绍【Python 常用脚本及命令系列 9 -- 图片文字识别 EasyOCR使用】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.1 EasyOCR 介绍
      • 1.1.1 EasyOCR 安装
      • 1.1.2 EasyOCR 使用方法
        • 1.1.2.1 EasyOCR 支持的语言种类
        • 1.1.2.2 EasyOCR 支持的图像格式
    • EasyOCR 提高图片文字识别正确率
    • 1.3 问题总结

1.1 EasyOCR 介绍

Python中有一个不错的OCR库-EasyOCR,在GitHub已有9700 star。它可以在python中调用,用来识别图像中的文字,并输出为文本。EasyOCR支持超过80种语言的识别,包括英语、中文(简繁)、阿拉伯文、日文等,并且该库在不断更新中,未来会支持更多的语言。

1.1.1 EasyOCR 安装

安装过程比较简单,使用 pip 或者 conda 安装。

pip install easyocr

如果用的PyPl源,安装起来可能会耽误些时间,建议大家用清华源安装,几十秒就能安装好。

pip install easyocr -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host mirrors.aliyun.com

1.1.2 EasyOCR 使用方法

EasyOCR的用法非常简单,分为三步:

  • 创建识别对象;
  • 读取并识别图像;
  • 导出文本。
import easyocr # 创建一个Reader实例,设置语言为中文和英文 
reader = easyocr.Reader(['ch_sim','en']) # 使用Reader实例对图像进行OCR识别,输出结果为一个列表,列表中的每一项都包含了一段检测到的文字及其位置信息 
result = reader.readtext('image.jpg') # 打印结果 
for res in result: print(res)

所要识别的图片 image.jpg
请添加图片描述

执行完上面python脚本之后

sam@sam :~/temp/ocr$ python ocr.py
Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.
([[37, 1], [301, 1], [301, 39], [37, 39]], '1)  浏览器的基本概念', 0.8790523639612858)
([[6, 48], [109, 48], [109, 78], [6, 78]], '其他概念:', 0.8918609843422133)
([[6, 83], [409, 83], [409, 116], [6, 116]], '主页:  用户打开浏览器时默认打开的网页。', 0.7179599599835107)
([[5, 119], [783, 119], [783, 157], [5, 157]], '缓存:  为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进', 0.3508524500076062)
([[5, 158], [783, 158], [783, 195], [5, 195]], '行存储;当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样', 0.6076152055685993)
([[6, 200], [240, 200], [240, 232], [6, 232]], '就可以加速页面的阅览。', 0.9070523112038835)
([[5, 234], [793, 234], [793, 271], [5, 271]], 'coakies: 网站为了辨别用户身份进行跟踪而储存在用户本地终端上的简单文本类型', 0.5843855686035105)
([[8, 275], [495, 275], [495, 308], [8, 308]], '数据。由用户客户端计算机暂时或永久保存的信息。', 0.22526217768233806)
([[7, 310], [603, 310], [603, 347], [7, 347]], '历史记录:  指浏览器曾经浏览过的网站在计算机中的暂存倌息。', 0.4164423423661993)
([[616, 322], [782, 322], [782, 348], [616, 348]], 'CSDN @CodingCos', 0.9586506435731357)

识别文字的准确率还是很高的,接下来对文字部分进行抽取

for res in result:word = res[1]print(word)

在这里插入图片描述

1.1.2.1 EasyOCR 支持的语言种类

上面代码有一段参数[‘ch_sim’,‘en’],这是要识别的语言列表,因为图片有中文和英文,所以列表里添加了ch_sim(简体中文)、en(英文)。

可以一次传递多种语言,但并非所有语言都可以一起使用。英语与每种语言兼容,共享公共字符的语言通常相互兼容。

1.1.2.2 EasyOCR 支持的图像格式

上面传入了相对路径 image.jpg,还可以传递 OpenCV 图像对象(numpy数组)、图像字节文件、图像 URL

可以使用 Python 的 requests 库来下载图像。

以下是一个例子:

import easyocr 
import requests 
from PIL import Image 
from io import BytesIO # 创建一个OCR reader,语言设置为英文('en') 
reader = easyocr.Reader(['en']) # 图像的URL 
image_url = "https://example.com/image.jpg" # 使用requests获取图像 
response = requests.get(image_url) # 将图像内容转换为一个PIL Image对象 
image = Image.open(BytesIO(response.content)) # 读取并识别图像中的文本 
result = reader.readtext(image) # 输出识别结果 
for (bbox, text, prob) in result: print(f"Detected text: '{text}' with probability {prob}")

在上述代码中,requests.get(image_url)会从指定的URL下载图像,Image.open(BytesIO(response.content))会将下载的图像内容转换为一个可以被EasyOCR使用的PIL Image对象。
然后,reader.readtext(image)会识别图像中的文本。识别的文本可以包括标点符号,这取决于图像中的内容和 EasyOCR 的语言设置。

EasyOCR 提高图片文字识别正确率

有时候你可能会发现识别的结果并不准确。以下是一些可以提高EasyOCR识别正确率的方法:

  • 图片预处理:你可以尝试对图片进行一些预处理,以提高识别的准确性。例如,你可以使用图像处理库(如OpenCV)来调整图片的对比度和亮度,去除噪声,甚至使用一些更复杂的处理,如透视变换来校正图片的角度。在某些情况下,将图片转换为灰度图像或者二值图像也可能有助于提高识别的准确性。
  • 使用适当的语言设置:EasyOCR支持多种语言的识别,你应该确保你的语言设置正确。例如,如果你想识别的文字是中文,你应该在创建Reader时指定’ch_sim’或者’ch_tra’作为语言代码。
  • 调整识别参数:EasyOCR提供了一些可以调整的参数,如识别模型的选择,文本检测的精度等。你可以尝试调整这些参数,看是否可以提高识别的准确性。
  • 使用更高质量的图片:如果可能的话,尽量使用高分辨率和清晰度的图片。模糊或者低分辨率的图片可能导致识别的准确性降低。
  • 选择合适的OCR工具:EasyOCR虽然强大,但可能并不适合所有的场景。例如,对于一些特殊的字体或者复杂的背景,你可能需要使用更专业的OCR工具或服务。

1.3 问题总结

在使用脚本进行文字处理时遇到了下面问题

Anaconda中 python代码报错: AttributeError: module ‘PIL.Image’ has no attribute ‘Resampling’

解决方法
先卸载原有的pillow库

pip uninstall pillow

卸载完成装上 9.0.1 版本的 pillow:

 pip install pillow==9.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后会有下面log:
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: pillow==9.0.1 in /usr/lib/python3/dist-packages (9.0.1)

安装完之后居然还是不行!!!

最后在网上搜索到 需要使用 pillow 9.1 到 9.3 的版本,然后又果断卸载再安装:

sudo pip uninstall pillow
pip install pillow==9.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

最后问题解决了!

这篇关于【Python 常用脚本及命令系列 9 -- 图片文字识别 EasyOCR使用】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315950

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件