Python3.6下OpenCV+OCR图像文本识别遇FileNotFoundError求助
解决Python3.6中pytesseract触发FileNotFoundError的问题
看起来你遇到的问题不是Python2.7到3.6的版本兼容锅,而是pytesseract找不到底层的Tesseract OCR引擎导致的。我来给你拆解下原因和解决办法:
问题根源
pytesseract只是Python的一个封装库,它本身不做文字识别,真正干活的是Tesseract OCR引擎。你的报错FileNotFoundError: [WinError 2] 系统找不到指定文件,本质是subprocess启动tesseract.exe失败——要么你没装Tesseract,要么装了但Python找不到它的路径。
分步解决办法
1. 先确认Tesseract OCR是否安装
如果你的Python2.7环境之前能跑,大概率当时系统里装了Tesseract,但新的Python3.6环境没配置。
- 下载Windows版本的Tesseract安装包,安装时一定要勾选**"Add to PATH"**选项,这样系统全局能找到
tesseract.exe。 - 如果已经安装但没加PATH,记好你的安装路径(比如默认是
C:\Program Files\Tesseract-OCR\),后面要用到。
2. 让pytesseract找到Tesseract路径
有两种方式:
- 方式一:修改系统PATH:把Tesseract的安装目录(比如
C:\Program Files\Tesseract-OCR\)添加到系统环境变量PATH里,然后重启PyCharm生效。 - 方式二:代码里直接指定:不想改系统变量的话,在代码开头加上这一行(替换成你实际的安装路径):
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
3. 优化代码(可选但推荐)
你的代码里先保存处理后的图片再用PIL打开,其实可以直接把cv2的图像转成PIL格式,省掉文件IO,还能避免路径问题:
import cv2 import numpy as np import pytesseract from PIL import Image # 新增:指定Tesseract路径(如果没加系统PATH的话) pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' src_path = "C:/Users/crist/Desktop/borrar/lectura/" def get_string(img_path): # 读取图片,先检查是否读取成功 img = cv2.imread(img_path) if img is None: raise ValueError(f"无法读取图片:{img_path}") # 转灰度图 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 降噪:膨胀+腐蚀 kernel = np.ones((1, 1), np.uint8) img = cv2.dilate(img, kernel, iterations=1) img = cv2.erode(img, kernel, iterations=1) # 直接把cv2图像转成PIL格式,不用保存再读取 pil_img = Image.fromarray(img) # 识别文字 result = pytesseract.image_to_string(pil_img) return result print ('--- Start recognize text from image ---') print (get_string(src_path + "2.png")) print ("------ Done -------")
关于Python2.7到3.6的兼容说明
你的原代码其实大部分在3.6都能跑:
- print语句你已经加了括号,符合3.x语法;
- cv2、numpy、PIL(现在叫Pillow,不过导入时还是
from PIL import Image)在3.6都有兼容版本; - 真正的坑就是Tesseract的路径配置,和版本迁移无关。
内容的提问来源于stack exchange,提问作者CCANTO
相关产品推荐
相关产品推荐

