想用Python实现图片文字识别?没问题,Tesseract OCR绝对能帮上忙!它是一款强大的开源OCR引擎,关键是免费!配合Python的pytesseract
库,就能轻松实现图片转文字。
1. Tesseract OCR的安装
Windows:
- 下载安装包: 从UB Mannheim下载最新的Windows安装包。注意选择与你的系统匹配的版本(32位或64位)。
- 安装: 双击安装包,按照提示完成安装。重点: 记住你的安装路径,比如
C:\Program Files\Tesseract-OCR
,后面要用到。 - 配置环境变量:
- 打开“控制面板” -> “系统与安全” -> “系统” -> “高级系统设置”。
- 点击“环境变量”。
- 在“系统变量”中,找到“Path”,点击“编辑”。
- 点击“新建”,添加Tesseract OCR的安装路径。例如:
C:\Program Files\Tesseract-OCR
- 再点击“新建”,添加
TESSDATA_PREFIX
变量,值为C:\Program Files\Tesseract-OCR\tessdata
- 一路点击“确定”保存设置。
macOS:
- 使用Homebrew安装: 如果你还没有安装Homebrew,先安装它:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装Tesseract: 在终端运行:
brew install tesseract
Linux (Ubuntu/Debian):
在终端运行:sudo apt update && sudo apt install tesseract-ocr
2. pytesseract的安装
pytesseract
是Python中调用Tesseract OCR的桥梁,用pip就能搞定:
pip install pytesseract pillow
pillow
库是用来处理图片的,也需要安装。
3. 简单上手:图片转文字
下面是一个简单的例子,把图片image.png
里的文字提取出来:
import pytesseract
from PIL import Image
# 如果Tesseract不在默认路径,需要指定路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 替换成你的实际路径
image_path = 'image.png'
try:
img = Image.open(image_path)
text = pytesseract.image_to_string(img, lang='chi_sim') # 指定语言为简体中文
print(text)
# 保存到txt文件
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(text)
except FileNotFoundError:
print(f"错误:找不到图片文件 {image_path}")
except Exception as e:
print(f"发生错误:{e}")
代码解释:
pytesseract.pytesseract.tesseract_cmd
: 非常重要! 如果你的Tesseract没有添加到环境变量,或者pytesseract
找不到Tesseract的安装路径,就需要手动指定。替换成你自己的安装路径。Image.open(image_path)
: 用Pillow库打开图片。pytesseract.image_to_string(img, lang='chi_sim')
: 这是核心函数,把图片转换成文字。lang='chi_sim'
指定识别语言为简体中文。如果你的图片是英文,可以改成lang='eng'
。with open('output.txt', 'w', encoding='utf-8') as f:
: 把提取出来的文字保存到output.txt
文件,encoding='utf-8'
是为了支持中文。try...except
: 用了异常处理,防止程序出错崩溃。
4. 提高识别准确率的小技巧
图片预处理: Tesseract对图片质量要求比较高。如果图片模糊、倾斜、对比度低,识别效果会很差。可以尝试用Pillow或其他图像处理库进行预处理,例如:
- 灰度化:
img = img.convert('L')
- 二值化: 根据灰度值设置一个阈值,将像素点设为黑或白。
- 降噪: 去除图片中的噪点。
- 倾斜校正: 校正图片中的倾斜。
- 灰度化:
指定识别区域: 如果你只关心图片中的一部分区域,可以用Pillow截取这部分区域,再进行识别。
训练Tesseract: 如果你需要识别特殊字体或特定领域的文字,可以训练Tesseract,提高识别准确率。这部分比较复杂,可以参考Tesseract的官方文档。
调整
psm
(Page Segmentation Mode) 参数:psm
参数控制Tesseract如何分析图片中的文本布局。可以尝试不同的psm
值,看看哪个效果最好。例如:text = pytesseract.image_to_string(img, lang='chi_sim', config='--psm 6')
常用的
psm
值有:0
: Orientation and script detection (OSD) only.1
: Automatic page segmentation with OSD.3
: Fully automatic page segmentation, but no OSD (or OCR).4
: Assume a single column of text of variable sizes.6
: Assume a single uniform block of text.7
: Treat the image as a single text line.8
: Treat the image as a single word.13
: Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.
使用
oem
(OCR Engine Mode) 参数:oem
参数控制Tesseract使用的OCR引擎。可以尝试不同的oem
值。例如:text = pytesseract.image_to_string(img, lang='chi_sim', config='--oem 3')
常用的
oem
值有:0
: Legacy engine only.1
: Neural nets LSTM engine only.2
: Tesseract + LSTM engines.3
: Default, based on what is available.
5. 总结
Tesseract OCR是一个非常强大的免费OCR引擎,配合Python的pytesseract
库,可以方便地实现图片文字识别。但是,识别准确率受到图片质量的影响。通过图片预处理、指定识别区域、训练Tesseract等方法,可以提高识别准确率。希望这篇文章能帮助你入门Python图像文字识别!