针对“python 实现识别图片上的数字”这个需求,我们可以通过以下步骤来完成:
1. 下载所需工具库
我们需要下载并安装两个工具库:
PIL
:一个 Python 图像处理库,可用于加载、调整和保存各种图像格式的文件。pytesseract
:一个 OCR(光学字符识别)引擎,能够识别并提取图像中的字符。
可以使用 pip 命令来下载这两个库:
pip install pillow pytesseract
2. 准备样本数据
我们需要准备一些待识别的数字图片作为样本数据。这些图片需要符合以下条件:
- 图片中只包含一个数字。
- 数字的颜色与背景有明显的对比,便于 OCR 引擎正确识别。
- 图片应该是垂直方向的,这样 OCR 引擎才能准确识别出数字的方向。
样本数据可以通过在线字体生成器(如 fontjoy.com)生成,或者手工制作。
3. 编写 Python 代码
下面是一个示例代码,可以从指定文件夹中读取样本图片,识别图片中的数字,并输出识别结果:
from PIL import Image
import pytesseract
import os
# 设置 pytesseract 路径
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# 待识别图片所在文件夹
image_folder = "images"
for filename in os.listdir(image_folder):
if filename.endswith(".png") or filename.endswith(".jpg"):
# 加载图片并将图片转换成灰度图像
image = Image.open(os.path.join(image_folder, filename)).convert("L")
# 调用 pytesseract 识别数字
text = pytesseract.image_to_string(image, config="--psm 10")
# 处理识别结果
text = text.strip()
if len(text) == 1 and text.isdigit():
print(f"File {filename} contains digit: {text}")
else:
print(f"File {filename} does not contain a single digit.")
在这个示例代码中,我们首先设置 pytesseract
的路径(如果你已经将其添加到环境变量中,则可以跳过此步骤)。
然后循环读取指定文件夹中的图片文件,对于每个图片,我们首先将其转化为灰度图像,然后调用 pytesseract
的 image_to_string
函数来识别数字。config
参数用于指定识别的模式,这里我们使用模式 10 (Page segmentation mode 10), 使其更适用于识别垂直文本。最后,我们处理识别结果并输出。
示例1
假设我们有以下两个图片,分别是 3.png 和 4.png,它们保存在 images 文件夹下:
3.png:
4.png:
运行示例代码后,输出结果为:
File 3.png contains digit: 3
File 4.png contains digit: 4
示例2
我们还可以扩展代码,将识别的数字保存到另一个文件中。代码如下:
for filename in os.listdir(image_folder):
if filename.endswith(".png") or filename.endswith(".jpg"):
image_path = os.path.join(image_folder, filename)
# 加载图片并将图片转换成灰度图像
image = Image.open(image_path).convert("L")
# 调用 pytesseract 识别数字
text = pytesseract.image_to_string(image, config="--psm 10")
# 处理识别结果
text = text.strip()
if len(text) == 1 and text.isdigit():
print(f"File {filename} contains digit: {text}")
with open("digits.txt", "a") as f:
f.write(f"{filename} {text}\n")
else:
print(f"File {filename} does not contain a single digit.")
现在当我们运行代码时,输出不仅会打印出识别结果,还会将识别的数字保存到 digits.txt 文件中。
针对其他细节和要求,还可以进一步完善代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 实现识别图片上的数字 - Python技术站