文章目录
- 根据你的操作系统选择对应的安装方式,务必记住安装路径(后续配置需要用到):
- 下载安装包:访问 Tesseract 官方 GitHub Releases,下载最新的 Windows 安装包(如 tesseract-ocr-w64-setup-v5.3.3.20231005.exe)。 运行安装: 点击“Next”直到“Choose Components”页面,勾选“Additional language data (download)”(默认只安装英文,勾选后会下载中文等其他语言包)。 记住安装路径(如 C:Program FilesTesseract-OCR),后续需要配置环境变量或在代码中指定路径。 配置环境变量(可选但推荐): 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”。 在“系统变量”的“Path”中添加 Tesseract 安装路径(如 C:Program FilesTesseract-OCR)。 验证:打开 cmd,输入 tesseract –version,若显示版本信息则安装成功。
- 通过 Homebrew 安装(需先安装 Homebrew): # 安装 Tesseract 引擎(默认包含英文) brew install tesseract # 安装中文语言包(如需识别中文) brew install tesseract-lang
- # 安装 Tesseract 引擎 sudo apt-get install tesseract-ocr # 安装中文语言包 sudo apt-get install tesseract-ocr-chi-sim # 简体中文 sudo apt-get install tesseract-ocr-chi-tra # 繁体中文
- 打开终端/命令行,执行以下命令安装所需的 Python 库: pip install pytesseract opencv-python pillow argparse pytesseract:Python 操作 Tesseract 引擎的接口。 opencv-python:图片预处理核心库。 pillow:辅助读取和处理图片。 argparse:解析命令行参数(内置库,安装其他库时会自动兼容)。
- 创建一个名为 simple_ocr_tool.py 的文件,复制以下代码: # 导入所需库 import pytesseract import cv2 from PIL import Image import argparse import os def image_preprocessing(image_path): “”” 图片预处理函数:灰度化 → 二值化 → 降噪 :param image_path: 输入图片路径(相对/绝对路径) :return: 预处理后的图片对象(OpenCV 格式,便于后续识别) “”” # 1. 读取图片(使用 OpenCV,默认读取为 BGR 格式) img = cv2.imread(image_path) if img is None: raise FileNotFoundError(f”错误:未找到图片文件 {image_path},请检查路径是否正确。”) # 2. 灰度化:将 BGR 格式转为灰度图(单通道) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) print(“✅ 图片灰度化完成”) # 3. 二值化:使用 Otsu 阈值法(自动计算最佳阈值,适合对比度明显的图片) # cv2.THRESH_BINARY_INV:黑白反转(文字为白,背景为黑,提升识别率) # cv2.THRESH_OTSU:自动阈值,无需手动调整 _, binary_img = cv2.threshold( gray_img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU ) print(“✅ 图片二值化完成”) # 4. 降噪:使用高斯模糊去除小噪音(核大小 (3,3) 为经验值,可根据图片调整) denoised_img = cv2.GaussianBlur(binary_img, (3, 3), 0) print(“✅ 图片降噪完成”) return denoised_img def ocr_recognize(preprocessed_img, lang=’eng’, tesseract_cmd=None): “”” OCR 识别函数:将预处理后的图片转为文字 :param preprocessed_img: 预处理后的图片(OpenCV 格式) :param lang: 识别语言(默认 ‘eng’ 英文,中文用 ‘chi_sim’,中英文混合用 ‘chi_sim+eng’) :param tesseract_cmd: Tesseract 引擎路径(Windows 若未配置环境变量需指定) :return: 识别出的文字字符串 “”” # 1. 配置 Tesseract 引擎路径(仅 Windows 非环境变量配置时需要) if tesseract_cmd: pytesseract.pytesseract.tesseract_cmd = tesseract_cmd # 2. 将 OpenCV 格式图片(numpy array)转为 PIL 格式(pytesseract 更兼容) pil_img = Image.fromarray(preprocessed_img) # 3. 调用 Tesseract 进行识别 # config 参数:–psm 6 表示将图片视为单一文本块(适合大部分场景) custom_config = r’–oem 3 –psm 6′ # oem 3 表示使用默认 OCR 引擎 text = pytesseract.image_to_string(pil_img, lang=lang, config=custom_config) # 4. 清理识别结果(去除空行、多余空格) cleaned_text = ‘n’.join([line.strip() for line in text.split(‘n’) if line.strip()]) print(f”✅ OCR 识别完成(语言:{lang})”) return cleaned_text def save_result(text, output_path=’ocr_result.txt’): “”” 结果保存函数:将识别出的文字保存到本地文件 :param text: 识别出的文字 :param output_path: 输出文件路径(默认当前目录 ocr_result.txt) “”” with open(output_path, ‘w’, encoding=’utf-8′) as f: f.write(text) print(f”✅ 识别结果已保存到:{os.path.abspath(output_path)}”) def main(): “”” 主函数:解析命令行参数 → 调用预处理 → 调用 OCR 识别 → 保存结果 “”” # 1. 解析命令行参数(让用户通过命令行传入参数,更灵活) parser = argparse.ArgumentParser(description=”Python 简易 OCR 识别工具(基于 pytesseract)”) # 必选参数:图片路径 parser.add_argument( ‘–image’, ‘-i’, required=True, help=’输入图片路径(如:./test.png 或 C:\images\doc.jpg)’ ) # 可选参数:识别语言(默认英文,中文用 chi_sim,中英文混合用 chi_sim+eng) parser.add_argument( ‘–lang’, ‘-l’, default=’eng’, help=’识别语言(默认 eng 英文,中文 chi_sim,中英文混合 chi_sim+eng)’ ) # 可选参数:Tesseract 引擎路径(Windows 未配置环境变量时需指定) parser.add_argument( ‘–tesseract-cmd’, ‘-t’, default=None, help=’Tesseract 引擎路径(如 Windows:C:\Program Files\Tesseract-OCR\tesseract.exe)’ ) # 可选参数:输出文件路径(默认当前目录 ocr_result.txt) parser.add_argument( ‘–output’, ‘-o’, default=’ocr_result.txt’, help=’识别结果输出文件路径(默认 ocr_result.txt)’ ) # 解析参数 args = parser.parse_args() try: # 2. 图片预处理 print(f”📥 正在读取图片:{args.image}”) preprocessed_img = image_preprocessing(args.image) # 3. OCR 识别 print(“🔍 正在进行 OCR 识别…”) recognized_text = ocr_recognize( preprocessed_img=preprocessed_img, lang=args.lang, tesseract_cmd=args.tesseract_cmd ) # 4. 打印识别结果 print(“n” + “=”*50) print(“📄 OCR 识别结果:”) print(“=”*50) print(recognized_text) print(“=”*50 + “n”) # 5. 保存结果 save_result(recognized_text, args.output) except Exception as e: # 异常处理(如文件不存在、语言包缺失等) print(f”❌ 程序运行出错:{str(e)}”) # 程序入口(只有直接运行脚本时才执行 main 函数) if __name__ == “__main__”: main()
- 原图: 解析后:
-
- 该函数是提升识别准确率的核心,步骤拆解: 读取图片:用 cv2.imread() 读取图片,返回 OpenCV 格式(numpy 数组,BGR 颜色通道);若图片路径错误,抛出 FileNotFoundError 并提示用户。 灰度化:用 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 将彩色 图转为灰度图(单通道),减少颜色干扰。 二值化:用 cv2.threshold() 实现自动阈值二值化: THRESH_BINARY_INV:黑白反转(文字变白、背景变黑),因为 Tesseract 对白色文字更敏感。 THRESH_OTSU:自动计算最佳阈值(无需手动调整,适合不同亮度的图片)。 降噪:用 cv2.GaussianBlur() 进行高斯模糊,核大小 (3,3) 是经验值(可根据图片噪音程度调整为 (5,5))。
- 该函数负责调用 Tesseract 引擎提取文字: 配置引擎路径:Windows 若未配置环境变量,需通过 tesseract_cmd 参数指定 Tesseract 可执行文件路径(如 C:Program FilesTesseract-OCRtesseract.exe)。 格式转换:pytesseract 对 PIL 格式图片兼容性更好,因此用 Image.fromarray() 将 OpenCV 格式(numpy 数组)转为 PIL 格式。 核心识别:pytesseract.image_to_string() 是核心接口,参数说明: lang:识别语言(eng 英文、chi_sim 简体中文、chi_sim+eng 中英文混合)。 config:额外配置,–psm 6 表示将图片视为“单一文本块”(适合大部分场景,如截图、文档扫描件);–oem 3 表示使用默认 OCR 引擎。 结果清理:用列表推导式去除识别结果中的空行和多余空格,让输出更整洁。
- 用 open() 函数以 UTF-8 编码(避免中文乱码)将识别结果写入文件,并用 os.path.abspath() 输出文件绝对路径,方便用户查找。
- 参数解析:用 argparse 定义 4 个参数(图片路径、语言、引擎路径、输出路径),其中 –image 是必选参数,其他为可选参数,降低用户使用门槛。 流程控制:按“读取图片 → 预处理 → 识别 → 打印结果 → 保存结果”的流程执行,并通过 try-except 捕获异常(如文件不存在、语言包缺失),提升程序稳定性。
- 首先准备 2 张测试图片(建议放在与 simple_ocr_tool.py 同一目录下): english_test.png:英文截图(如一段英文文档)。 chinese_test.png:中文截图(如一段中文新闻)。
- 打开终端/命令行,切换到脚本所在目录,执行以下命令: # 识别英文图片,默认输出到 ocr_result.txt python simple_ocr_tool.py -i english_test.png -l eng
- 若需识别中文,需确保已安装中文语言包(安装 Tesseract 时勾选了语言包),执行命令: # 识别中文图片,输出到 chinese_result.txt python simple_ocr_tool.py -i chinese_test.png -l chi_sim -o chinese_result.txt
- 若未配置 Tesseract 环境变量,程序无法自动找到引擎路径,需通过 –tesseract-cmd(或简写 -t)参数手动指定 Tesseract 可执行文件的完整路径,避免出现“tesseract is not installed or it’s not in your PATH”错误。 以识别中英文混合图片 mix_test.png 为例,完整命令如下(需替换为你的实际安装路径): # Windows 系统命令(路径含空格需用英文引号包裹) python simple_ocr_tool.py -i mix_test.png -l chi_sim+eng -t “C:Program FilesTesseract-OCRtesseract.exe” -o mix_result.txt 参数说明: -t "C:Program FilesTesseract-OCRtesseract.exe":明确指定 Tesseract 引擎的 tesseract.exe 文件路径,路径中的英文引号用于处理“Program Files”中的空格(若路径无空格可省略引号,如 D:Tesseract-OCRtesseract.exe)。 -l chi_sim+eng:语言参数设为“简体中文+英文”,支持同时识别图片中的中英文内容(语言包需同时安装 chi_sim.traineddata 和 eng.traineddata)。 -o mix_result.txt:将识别结果保存到 mix_result.txt,避免覆盖默认的 ocr_result.txt。 执行命令后,程序会按“图片读取→预处理→OCR识别→结果保存”流程运行,终端会打印各步骤进度(如“✅ 图片降噪完成”“✅ OCR 识别完成(语言:chi_sim+eng)”),最终在指定路径生成结果文件。
- 若识别结果存在较多错字、漏字,可从以下角度优化: 增强图片预处理: 若图片倾斜,添加“倾斜矫正”步骤(使用 cv2.minAreaRect() 计算倾斜角度,cv2.warpAffine() 实现旋转)。 若文字较细或有断裂,使用“形态学膨胀”(cv2.dilate())增强文字轮廓。 调整 Tesseract 配置参数: 修改 custom_config 中的 –psm 参数(页面分割模式),例如: –psm 11:适合文字分布不规则的图片(如截图中的散字)。 –psm 3:默认模式,适合多列文本的文档(如PDF扫描件)。 添加降噪参数:–oem 3 –psm 6 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ中文,限定识别字符范围(减少无关字符干扰)。 提升图片质量: 确保图片分辨率不低于 300 DPI(扫描件优先选择“高清模式”)。 避免图片有模糊、阴影或反光(拍摄时尽量平整、光线均匀)。
- 若需要批量处理多个图片,可在代码中添加“遍历文件夹”功能,修改 main 函数中的图片读取逻辑: # 批量识别指定文件夹下的所有图片(示例:支持 png/jpg/jpeg 格式) def batch_ocr(folder_path, lang=’chi_sim’, output_dir=’ocr_batch_results’): # 创建输出文件夹 os.makedirs(output_dir, exist_ok=True) # 遍历文件夹中的图片 for filename in os.listdir(folder_path): if filename.lower().endswith((‘.png’, ‘.jpg’, ‘.jpeg’)): image_path = os.path.join(folder_path, filename) print(f”n📥 正在处理图片:{filename}”) try: # 预处理 + 识别 preprocessed_img = image_preprocessing(image_path) recognized_text = ocr_recognize(preprocessed_img, lang=lang) # 保存结果(以图片名命名结果文件) output_path = os.path.join(output_dir, f”{os.path.splitext(filename)[0]}.txt”) save_result(recognized_text, output_path) except Exception as e: print(f”❌ 处理 {filename} 失败:{str(e)}”) 使用时只需在 main 函数中调用 batch_ocr(r'C:your_image_folder'),即可批量处理文件夹下所有图片并生成对应结果文件。
- 若需将工具分享给不懂Python的用户,可使用 pyinstaller 打包为 .exe 文件(Windows): 安装打包工具:pip install pyinstaller。 执行打包命令(在脚本所在目录): pyinstaller -F -i ocr_icon.ico simple_ocr_tool.py -F:打包为单个可执行文件(方便携带)。 -i ocr_icon.ico:可选参数,为.exe文件添加图标(需提前准备.ico格式图标文件)。 打包完成后,可执行文件会生成在 dist 文件夹中,用户双击运行后,通过命令行参数即可使用(操作同之前的命令)。
目录
- 前言
- 一、工具核心技术栈
- 二、环境搭建(关键步骤)
- 2.1 安装 Tesseract OCR 引擎
- (1)Windows 系统
- (2)macOS 系统
- (3)Linux 系统(以 Ubuntu 为例)
- 2.2 安装 Python 依赖库
- 三、核心原理:为什么需要图片预处理?
- 四、完整代码实现与详细解释
- 4.1 完整代码
- 4.2 运行效果
- 4.3 代码逐模块详解
- (1)图片预处理模块 image_preprocessing
- (2)OCR 识别模块 ocr_recognize
- (3)结果保存模块 save_result
- (4)主函数 main 与命令行参数
- 五、工具使用教程(实战演示)
- 5.1 准备测试图片
- 5.2 场景 1:识别英文图片
- 执行流程与输出:
- 5.3 场景 2:识别中文图片
- 注意:
- 5.4 场景 3:Windows 未配置环境变量时使用(补充完整)
- 六、常见问题与优化方向
- 6.1 识别准确率低?试试这些优化
- 6.2 扩展功能:支持批量识别图片
- 6.3 打包为可执行文件(方便非编程用户使用)
- 七、总结
本文详细介绍了如何用Python的pytesseract库开发简易OCR识别工具,适用于提取图片文字。首先明确核心技术栈,包括依赖底层的Tesseract OCR引擎,以及pytesseract、OpenCV-Python、Pillow、argparse等库及其作用。接着分步骤指导环境搭建,重点说明不同系统下Tesseract OCR引擎的安装与配置,以及Python依赖库的安装。还解释了图片预处理的必要性及具体步骤,以提升识别准确率。随后提供完整代码,按图片预处理、OCR识别、结果保存、命令行交互模块逐段详解,并给出多场景使用教程。同时,针对常见报错(如找不到图片、Tesseract路径问题、中文语言包缺失)提供了具体排查和解决方法,帮助用户顺利实现中英文图片的文字识别与结果保存。
在日常工作和学习中,我们经常会遇到需要将图片中的文字提取出来的场景(如扫描件、截图文字提取),手动输入不仅效率低还容易出错。OCR(Optical Character Recognition,光学字符识别)技术可以帮我们快速解决这个问题。本文将带大家从零开始,使用 Python 的 pytesseract 库开发一个简易但实用的 OCR 识别工具,支持图片文字提取、多语言识别(中英文),并提供基础的图片预处理功能以提升识别准确率。
在开始前,我们先明确实现这个 OCR 工具需要用到的技术和库,确保大家理解每个组件的作用:
| 库/工具 | 作用说明 |
|---|---|
| pytesseract | Python 封装的 Tesseract OCR 引擎接口,是实现文字识别的核心库 |
| Tesseract OCR Engine | Google 开源的 OCR 引擎(pytesseract 依赖此引擎才能运行) |
| OpenCV-Python | 用于图片预处理(如灰度化、二值化、降噪),提升 OCR 识别准确率 |
| Pillow (PIL) | 轻量级图片处理库,用于读取图片文件、转换图片格式(与 OpenCV 互补使用) |
| argparse | Python 内置库,用于解析命令行参数(支持通过命令行传入图片路径、语言等) |
pytesseract 不是纯 Python 库,它需要依赖底层的 Tesseract OCR 引擎,因此环境搭建分为 “引擎安装” 和 “Python 库安装” 两步,缺一不可。
根据你的操作系统选择对应的安装方式,务必记住安装路径(后续配置需要用到):
下载安装包:访问 Tesseract 官方 GitHub Releases,下载最新的 Windows 安装包(如 tesseract-ocr-w64-setup-v5.3.3.20231005.exe)。

运行安装:
- 点击“Next”直到“Choose Components”页面,勾选“Additional language data (download)”(默认只安装英文,勾选后会下载中文等其他语言包)。
- 记住安装路径(如
C:Program FilesTesseract-OCR),后续需要配置环境变量或在代码中指定路径。
配置环境变量(可选但推荐):
- 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”。
- 在“系统变量”的“Path”中添加 Tesseract 安装路径(如
C:Program FilesTesseract-OCR)。
验证:打开 cmd,输入 tesseract --version,若显示版本信息则安装成功。

通过 Homebrew 安装(需先安装 Homebrew):
# 安装 Tesseract 引擎(默认包含英文) brew install tesseract # 安装中文语言包(如需识别中文) brew install tesseract-lang
# 安装 Tesseract 引擎
sudo apt-get install tesseract-ocr
# 安装中文语言包
sudo apt-get install tesseract-ocr-chi-sim # 简体中文
sudo apt-get install tesseract-ocr-chi-tra # 繁体中文
打开终端/命令行,执行以下命令安装所需的 Python 库:
pip install pytesseract opencv-python pillow argparse
pytesseract:Python 操作 Tesseract 引擎的接口。opencv-python:图片预处理核心库。pillow:辅助读取和处理图片。argparse:解析命令行参数(内置库,安装其他库时会自动兼容)。
Tesseract OCR 引擎对 清晰、无噪音、高对比度 的图片识别准确率最高。如果直接识别带有背景噪音、倾斜或彩色的图片,很容易出现识别错误。因此,我们需要在识别前对图片进行预处理,常见步骤包括:
- 灰度化:将彩色 图片转为黑白灰度图,减少颜色通道干扰(OCR 对灰度图更敏感)。
- 二值化:将灰度图转为纯黑白图(只有 0 和 255 两个像素值),进一步提升文字与背景的对比度。
- 降噪:去除图片中的斑点、杂色等噪音(如扫描件的黑点、截图的阴影)。
- 倾斜矫正:若图片倾斜(如拍摄的文档),通过旋转矫正为水平方向(本文简化版暂不实现,后续可扩展)。
通过预处理,能显著提升 OCR 识别的准确率,这是从“能用”到“好用”的关键步骤。
我们将工具分为 3 个核心模块:图片预处理模块、OCR 识别模块、命令行交互模块,代码结构清晰,便于后续扩展。
创建一个名为 simple_ocr_tool.py 的文件,复制以下代码:
# 导入所需库
import pytesseract
import cv2
from PIL import Image
import argparse
import os
def image_preprocessing(image_path):
"""
图片预处理函数:灰度化 → 二值化 → 降噪
:param image_path: 输入图片路径(相对/绝对路径)
:return: 预处理后的图片对象(OpenCV 格式,便于后续识别)
"""
# 1. 读取图片(使用 OpenCV,默认读取为 BGR 格式)
img = cv2.imread(image_path)
if img is None:
raise FileNotFoundError(f"错误:未找到图片文件 {image_path},请检查路径是否正确。")
# 2. 灰度化:将 BGR 格式转为灰度图(单通道)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print("✅ 图片灰度化完成")
# 3. 二值化:使用 Otsu 阈值法(自动计算最佳阈值,适合对比度明显的图片)
# cv2.THRESH_BINARY_INV:黑白反转(文字为白,背景为黑,提升识别率)
# cv2.THRESH_OTSU:自动阈值,无需手动调整
_, binary_img = cv2.threshold(
gray_img,
0,
255,
cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU
)
print("✅ 图片二值化完成")
# 4. 降噪:使用高斯模糊去除小噪音(核大小 (3,3) 为经验值,可根据图片调整)
denoised_img = cv2.GaussianBlur(binary_img, (3, 3), 0)
print("✅ 图片降噪完成")
return denoised_img
def ocr_recognize(preprocessed_img, lang='eng', tesseract_cmd=None):
"""
OCR 识别函数:将预处理后的图片转为文字
:param preprocessed_img: 预处理后的图片(OpenCV 格式)
:param lang: 识别语言(默认 'eng' 英文,中文用 'chi_sim',中英文混合用 'chi_sim+eng')
:param tesseract_cmd: Tesseract 引擎路径(Windows 若未配置环境变量需指定)
:return: 识别出的文字字符串
"""
# 1. 配置 Tesseract 引擎路径(仅 Windows 非环境变量配置时需要)
if tesseract_cmd:
pytesseract.pytesseract.tesseract_cmd = tesseract_cmd
# 2. 将 OpenCV 格式图片(numpy array)转为 PIL 格式(pytesseract 更兼容)
pil_img = Image.fromarray(preprocessed_img)
# 3. 调用 Tesseract 进行识别
# config 参数:--psm 6 表示将图片视为单一文本块(适合大部分场景)
custom_config = r'--oem 3 --psm 6' # oem 3 表示使用默认 OCR 引擎
text = pytesseract.image_to_string(pil_img, lang=lang, config=custom_config)
# 4. 清理识别结果(去除空行、多余空格)
cleaned_text = 'n'.join([line.strip() for line in text.split('n') if line.strip()])
print(f"✅ OCR 识别完成(语言:{lang})")
return cleaned_text
def save_result(text, output_path='ocr_result.txt'):
"""
结果保存函数:将识别出的文字保存到本地文件
:param text: 识别出的文字
:param output_path: 输出文件路径(默认当前目录 ocr_result.txt)
"""
with open(output_path, 'w', encoding='utf-8') as f:
f.write(text)
print(f"✅ 识别结果已保存到:{os.path.abspath(output_path)}")
def main():
"""
主函数:解析命令行参数 → 调用预处理 → 调用 OCR 识别 → 保存结果
"""
# 1. 解析命令行参数(让用户通过命令行传入参数,更灵活)
parser = argparse.ArgumentParser(description="Python 简易 OCR 识别工具(基于 pytesseract)")
# 必选参数:图片路径
parser.add_argument(
'--image', '-i',
required=True,
help='输入图片路径(如:./test.png 或 C:\images\doc.jpg)'
)
# 可选参数:识别语言(默认英文,中文用 chi_sim,中英文混合用 chi_sim+eng)
parser.add_argument(
'--lang', '-l',
default='eng',
help='识别语言(默认 eng 英文,中文 chi_sim,中英文混合 chi_sim+eng)'
)
# 可选参数:Tesseract 引擎路径(Windows 未配置环境变量时需指定)
parser.add_argument(
'--tesseract-cmd', '-t',
default=None,
help='Tesseract 引擎路径(如 Windows:C:\Program Files\Tesseract-OCR\tesseract.exe)'
)
# 可选参数:输出文件路径(默认当前目录 ocr_result.txt)
parser.add_argument(
'--output', '-o',
default='ocr_result.txt',
help='识别结果输出文件路径(默认 ocr_result.txt)'
)
# 解析参数
args = parser.parse_args()
try:
# 2. 图片预处理
print(f"📥 正在读取图片:{args.image}")
preprocessed_img = image_preprocessing(args.image)
# 3. OCR 识别
print("🔍 正在进行 OCR 识别...")
recognized_text = ocr_recognize(
preprocessed_img=preprocessed_img,
lang=args.lang,
tesseract_cmd=args.tesseract_cmd
)
# 4. 打印识别结果
print("n" + "="*50)
print("📄 OCR 识别结果:")
print("="*50)
print(recognized_text)
print("="*50 + "n")
# 5. 保存结果
save_result(recognized_text, args.output)
except Exception as e:
# 异常处理(如文件不存在、语言包缺失等)
print(f"❌ 程序运行出错:{str(e)}")
# 程序入口(只有直接运行脚本时才执行 main 函数)
if __name__ == "__main__":
main()
原图:

解析后:

该函数是提升识别准确率的核心,步骤拆解:
- 读取图片:用
cv2.imread()读取图片,返回 OpenCV 格式(numpy 数组,BGR 颜色通道);若图片路径错误,抛出FileNotFoundError并提示用户。 - 灰度化:用
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)将彩色 图转为灰度图(单通道),减少颜色干扰。 - 二值化:用
cv2.threshold()实现自动阈值二值化:THRESH_BINARY_INV:黑白反转(文字变白、背景变黑),因为 Tesseract 对白色文字更敏感。THRESH_OTSU:自动计算最佳阈值(无需手动调整,适合不同亮度的图片)。
- 降噪:用
cv2.GaussianBlur()进行高斯模糊,核大小(3,3)是经验值(可根据图片噪音程度调整为(5,5))。
该函数负责调用 Tesseract 引擎提取文字:
- 配置引擎路径:Windows 若未配置环境变量,需通过
tesseract_cmd参数指定 Tesseract 可执行文件路径(如C:Program FilesTesseract-OCRtesseract.exe)。 - 格式转换:
pytesseract对 PIL 格式图片兼容性更好,因此用Image.fromarray()将 OpenCV 格式(numpy 数组)转为 PIL 格式。 - 核心识别:
pytesseract.image_to_string()是核心接口,参数说明:lang:识别语言(eng英文、chi_sim简体中文、chi_sim+eng中英文混合)。config:额外配置,--psm 6表示将图片视为“单一文本块”(适合大部分场景,如截图、文档扫描件);--oem 3表示使用默认 OCR 引擎。
- 结果清理:用列表推导式去除识别结果中的空行和多余空格,让输出更整洁。
用 open() 函数以 UTF-8 编码(避免中文乱码)将识别结果写入文件,并用 os.path.abspath() 输出文件绝对路径,方便用户查找。
- 参数解析:用
argparse 定义 4 个参数(图片路径、语言、引擎路径、输出路径),其中 --image 是必选参数,其他为可选参数,降低用户使用门槛。
- 流程控制:按“读取图片 → 预处理 → 识别 → 打印结果 → 保存结果”的流程执行,并通过
try-except 捕获异常(如文件不存在、语言包缺失),提升程序稳定性。
argparse 定义 4 个参数(图片路径、语言、引擎路径、输出路径),其中 --image 是必选参数,其他为可选参数,降低用户使用门槛。try-except 捕获异常(如文件不存在、语言包缺失),提升程序稳定性。
我们以 Windows 系统为例,通过 3 个场景演示工具的使用(其他系统操作类似,仅路径格式不同)。
首先准备 2 张测试图片(建议放在与 simple_ocr_tool.py 同一目录下):
english_test.png:英文截图(如一段英文文档)。chinese_test.png:中文截图(如一段中文新闻)。
打开终端/命令行,切换到脚本所在目录,执行以下命令:
# 识别英文图片,默认输出到 ocr_result.txt python simple_ocr_tool.py -i english_test.png -l eng
- 程序会依次打印“灰度化 → 二值化 → 降噪”完成提示。
- 输出识别结果(在终端显示)。
- 保存结果到当前目录的
ocr_result.txt,并显示文件绝对路径。
ocr_result.txt,并显示文件绝对路径。
若需识别中文,需确保已安装中文语言包(安装 Tesseract 时勾选了语言包),执行命令:
# 识别中文图片,输出到 chinese_result.txt python simple_ocr_tool.py -i chinese_test.png -l chi_sim -o chinese_result.txt
- 语言参数
lang 必须为 chi_sim(简体中文)或 chi_tra(繁体中文),不可写错。
- 若提示“语言包缺失”,需重新安装 Tesseract 并勾选中文语言包(Windows)或执行
brew install tesseract-lang(macOS)。
lang 必须为 chi_sim(简体中文)或 chi_tra(繁体中文),不可写错。brew install tesseract-lang(macOS)。
若未配置 Tesseract 环境变量,程序无法自动找到引擎路径,需通过 --tesseract-cmd(或简写 -t)参数手动指定 Tesseract 可执行文件的完整路径,避免出现“tesseract is not installed or it’s not in your PATH”错误。
以识别中英文混合图片 mix_test.png 为例,完整命令如下(需替换为你的实际安装路径):
# Windows 系统命令(路径含空格需用英文引号包裹) python simple_ocr_tool.py -i mix_test.png -l chi_sim+eng -t "C:Program FilesTesseract-OCRtesseract.exe" -o mix_result.txt
- 参数说明:
-t "C:Program FilesTesseract-OCRtesseract.exe":明确指定 Tesseract 引擎的tesseract.exe文件路径,路径中的英文引号用于处理“Program Files”中的空格(若路径无空格可省略引号,如D:Tesseract-OCRtesseract.exe)。-l chi_sim+eng:语言参数设为“简体中文+英文”,支持同时识别图片中的中英文内容(语言包需同时安装chi_sim.traineddata和eng.traineddata)。-o mix_result.txt:将识别结果保存到mix_result.txt,避免覆盖默认的ocr_result.txt。
执行命令后,程序会按“图片读取→预处理→OCR识别→结果保存”流程运行,终端会打印各步骤进度(如“✅ 图片降噪完成”“✅ OCR 识别完成(语言:chi_sim+eng)”),最终在指定路径生成结果文件。
若识别结果存在较多错字、漏字,可从以下角度优化:
- 增强图片预处理:
- 若图片倾斜,添加“倾斜矫正”步骤(使用
cv2.minAreaRect()计算倾斜角度,cv2.warpAffine()实现旋转)。 - 若文字较细或有断裂,使用“形态学膨胀”(
cv2.dilate())增强文字轮廓。
- 若图片倾斜,添加“倾斜矫正”步骤(使用
- 调整 Tesseract 配置参数:
- 修改
custom_config中的--psm参数(页面分割模式),例如:--psm 11:适合文字分布不规则的图片(如截图中的散字)。--psm 3:默认模式,适合多列文本的文档(如PDF扫描件)。
- 添加降噪参数:
--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ中文,限定识别字符范围(减少无关字符干扰)。
- 修改
- 提升图片质量:
- 确保图片分辨率不低于 300 DPI(扫描件优先选择“高清模式”)。
- 避免图片有模糊、阴影或反光(拍摄时尽量平整、光线均匀)。
若需要批量处理多个图片,可在代码中添加“遍历文件夹”功能,修改 main 函数中的图片读取逻辑:
# 批量识别指定文件夹下的所有图片(示例:支持 png/jpg/jpeg 格式)
def batch_ocr(folder_path, lang='chi_sim', output_dir='ocr_batch_results'):
# 创建输出文件夹
os.makedirs(output_dir, exist_ok=True)
# 遍历文件夹中的图片
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = os.path.join(folder_path, filename)
print(f"n📥 正在处理图片:{filename}")
try:
# 预处理 + 识别
preprocessed_img = image_preprocessing(image_path)
recognized_text = ocr_recognize(preprocessed_img, lang=lang)
# 保存结果(以图片名命名结果文件)
output_path = os.path.join(output_dir, f"{os.path.splitext(filename)[0]}.txt")
save_result(recognized_text, output_path)
except Exception as e:
print(f"❌ 处理 {filename} 失败:{str(e)}")
使用时只需在 main 函数中调用 batch_ocr(r'C:your_image_folder'),即可批量处理文件夹下所有图片并生成对应结果文件。
若需将工具分享给不懂Python的用户,可使用 pyinstaller 打包为 .exe 文件(Windows):
- 安装打包工具:
pip install pyinstaller。 - 执行打包命令(在脚本所在目录):
pyinstaller -F -i ocr_icon.ico simple_ocr_tool.py
-F:打包为单个可执行文件(方便携带)。-i ocr_icon.ico:可选参数,为.exe文件添加图标(需提前准备.ico格式图标文件)。
- 打包完成后,可执行文件会生成在
dist文件夹中,用户双击运行后,通过命令行参数即可使用(操作同之前的命令)。
本文从零开始构建了一个基于 pytesseract 的简易 OCR 工具,核心亮点包括:
- 实用性:支持中英文识别、结果保存,解决日常图片文字提取需求。
- 可扩展性:代码模块化设计,可轻松添加批量识别、倾斜矫正、GUI界面(如用
tkinter或PyQt)等功能。 - 问题导向:针对环境配置、路径错误、语言包缺失等常见问题提供了详细解决方案,降低使用门槛。
通过本实战,不仅能掌握 OCR 工具的开发流程,还能理解图片预处理对识别准确率的影响,为后续更复杂的计算机视觉任务(如表格识别、验证码识别)打下基础。
以上就是使用Python的pytesseract库开发简易OCR图片文字识别工具的详细内容,更多关于Python OCR图片文字识别的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- Python中图片与PDF识别文本(OCR)的全面指南
- Python中图片与pdf识别文本的方法总结(OCR)
- Python基于微信OCR引擎实现高效图片文字识别
- 使用Python实现pdf转图片再进行OCR识别