MacOS下Pytesseract临时文件丢失引发FileNotFoundError问题求助
pytesseract临时文件过早消失导致FileNotFoundError的解决办法
问题场景
运行以下代码时:
import cv2 import numpy as np import pytesseract pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract' img = cv2.imread('some.png') h, w, c = img.shape boxes = pytesseract.image_to_boxes(img)
出现如下FileNotFoundError,提示临时生成的.box文件不存在:
File "/Users/thomaskilian/Documents/pytess.py", line 9, in <module> boxes = pytesseract.image_to_boxes(img) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pytesseract/pytesseract.py", line 491, in image_to_boxes }[output_type]() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pytesseract/pytesseract.py", line 490, in <lambda> Output.STRING: lambda: run_and_get_output(*args), File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pytesseract/pytesseract.py", line 290, in run_and_get_output with open(filename, 'rb') as output_file: builtins.FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/m3/26h8sdk11p7731577hpllh900000gn/T/tess_wayjir39.box'
追踪pytesseract源码发现,run_tesseract执行后临时文件仍存在,但执行open操作时文件已消失,推测是系统临时文件被过早清理导致。
解决办法
指定自定义临时目录
避开系统自动清理的临时路径,手动设置tempfile的临时目录,确保该目录不会被自动清理且当前用户有读写权限:import tempfile # 替换为你自己的自定义临时目录,比如~/my_temp tempfile.tempdir = "/Users/your_username/my_temp"升级pytesseract至最新版
旧版本可能存在临时文件管理的bug,执行升级命令修复:pip install --upgrade pytesseract手动处理图像文件与临时文件
绕开pytesseract内置的临时文件逻辑,自行保存图像并调用tesseract,完成后手动清理:import cv2 import numpy as np import pytesseract import os pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract' img = cv2.imread('some.png') # 手动保存图像到自定义临时路径 temp_img = "/tmp/custom_temp_img.png" cv2.imwrite(temp_img, img) # 调用tesseract获取结果 boxes = pytesseract.image_to_boxes(temp_img) # 清理临时文件 os.remove(temp_img)调整系统临时文件清理策略
检查macOS的临时文件清理服务(如tmutil或第三方清理工具),添加规则排除tess_*.box格式的文件,避免被误清理。
内容的提问来源于stack exchange,提问作者qwerty_so
相关产品推荐
相关产品推荐

