Python使用tesserocr识别文字过程中遇到的一个问题
2022/4/6 20:19:43
本文主要是介绍Python使用tesserocr识别文字过程中遇到的一个问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近在使用Python识别PNG图像中包含的文字时遇到一个问题。解决过程记录如下。
(Python使用tesserocr的安装过程不再描述。)
在使用tesserocr识别PNG图像中的文字时,如果PNG比较“干净”,背景没有噪音时,过程比较简单,代码如下:
from PIL import Image import tesserocr image = Image.open(r'../data/demo01.png') print(tesserocr.image_to_text(image))
输出结果为:
This is some text, written in Arial, that will be read by Tesseract. Here are some symbols: !@#$%"&’()
效果还算可以。
但是如果PNG图片背景有些复杂,在识别之前需要对PNG做一些处理,比如针对下面这幅PNG图片:
这里使用的是简单的阈值过滤,即小于阈值的像素值均设置为黑色(0),大于阈值的像素值设置为白色(255);然后再对处理后的图像进行处理。代码如下:
from PIL import Image import tesserocr def clear_file(file_path, new_file_path): image = Image.open(file_path) # 为图像设置一个阈值过滤器并保存 image = image.point(lambda x: 0 if x < 143 else 255) image.save(new_file_path) return image image = clear_file(r'..\data\demo02.png', r'..\data\demo02_cleaned.png') print(tesserocr.image_to_text(image))
本以为会顺利输出结果,但是执行结果却是报了一堆错误:
…… File "E:\PrivatedData\programs\python\wasp\env\lib\site-packages\PIL\Image.py", line 2212, in save save_handler(self, fp, filename) File "lib\site-packages\PIL\JpegImagePlugin.py", line 632, in _save raise OSError(f"cannot write mode {im.mode} as JPEG") from e OSError: cannot write mode RGBA as JPEG
错误非常奇怪,明明是PNG图像,怎么说要处理JPEG图像呢?
通过跟踪,发现在选择图像文件的处理方法时,有如下代码(在Image.py的save函数中):
if save_all: save_handler = SAVE_ALL[format.upper()] else: save_handler = SAVE[format.upper()]
代码的主要意图是要根据format的值来选择图片的处理函数,而此时format的值为‘JPEG’,因此Pillow就用JPEG的处理函数来处理PNG图像了,所以会出错。
很奇怪,不是根据扩展名来识别图像格式吗。我从头到尾就没有使用到JPEG图像。我不知道Pillow的Image类在什么时候、用什么方式确定format的值。
想在网上查找tesserocr的API文档,看能不能把这个format传递过去,但是没有找到。
于是尝试自己设置图像的format,看能否通过。于是有了下面的代码:
image = clear_file(r'..\data\demo02.png', r'..\data\demo02_cleaned.png') image.format = 'PNG' print(tesserocr.image_to_text(image))
输出结果为:
This Is some text, wntten In Arial, that will be " Tesseract Here are some symbols: l@#$%"&
这里只是一小段练习代码。如果在正式项目中,可以根据图片文件的扩展名来给image.format赋值。当然能不使用“硬”代码更好,但我一直没有找到相关的文档,不知道问题的根本原因是什么。先把这个记录下来,其他继续研究吧。
这篇关于Python使用tesserocr识别文字过程中遇到的一个问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程