使用pytesseract读取内存图片报错:Windows文件未找到
我之前也碰到过一模一样的问题,这里有个容易被忽略的关键细节:pytesseract只是Tesseract OCR引擎的Python封装层,而Tesseract本身只能读取磁盘上的文件路径,没办法直接处理内存中的Image对象。所以哪怕你已经把图片加载到内存里,pytesseract还是会在后台悄悄把这个Image对象临时写入系统临时文件夹,再调用Tesseract去读取这个临时文件——你看到的“文件未找到”错误,大概率是这个临时文件的读写环节出了问题,或者Tesseract的路径配置没真正生效。
下面是我亲测有效的解决步骤:
1. 强制指定Tesseract的绝对路径
有时候环境变量的修改不会立刻同步到当前运行的IDE/终端(比如你改完环境变量没重启VS Code),直接在代码里硬编码路径最稳妥:
import pytesseract from PIL import Image # 替换成你实际的Tesseract安装路径,比如默认路径是下面这样 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' im = Image.open('你的图片路径.png') text = pytesseract.image_to_string(im)
2. 检查系统临时目录的权限
pytesseract默认把临时图片存在C:\Users\<你的用户名>\AppData\Local\Temp,如果这个文件夹的读写权限受限(比如被安全软件拦截),就会导致临时文件创建失败或无法读取。你可以:
- 手动打开这个临时目录,试试能不能新建/删除文件,确认权限正常
- 或者指定一个你有权限的自定义临时目录:
import pytesseract from PIL import Image import tempfile # 替换成你自己的可读写目录 custom_temp_dir = r'C:\MyTemp\OCR' with tempfile.TemporaryDirectory(dir=custom_temp_dir) as tmpdir: text = pytesseract.image_to_string(im)
3. 验证Tesseract本身是否能正常运行
打开命令提示符(CMD),输入tesseract --version:
- 如果能返回版本信息,说明环境变量是生效的
- 如果提示“不是内部或外部命令”,要么是环境变量没配置对,要么是需要重启电脑让环境变量生效
4. 预处理图片格式
有些带Alpha通道的PNG或者特殊格式的图片,虽然能被Image.open加载,但会导致Tesseract识别失败,先转成RGB格式再试试:
im = Image.open('你的图片路径.png').convert('RGB') text = pytesseract.image_to_string(im)
内容的提问来源于stack exchange,提问作者Srinivasa Rao
相关产品推荐
相关产品推荐

