调用EasyOCR的readtext触发非法指令异常,如何获取文本输出?
解决EasyOCR非法指令异常(0xC000001D)问题
问题背景
使用EasyOCR处理图片时触发非法指令异常(退出码0xC000001D),代码无法进入循环获取识别结果。环境配置:
- Python 3.12.7
- easyocr 1.7.2
- torch 2.5.1、torchvision 0.20.1、torchaudio 2.5.1
- opencv-python 4.10.0.84
- CPU支持AVX
执行代码:
import easyocr reader = easyocr.Reader(['en']) result = reader.readtext('images/phonenum.png') for (bbox, text, prob) in result: print(text)
终端输出:
C:\Users\charl\PYTHON\stackoverflow_questions_2\.venv\Scripts\python.exe C:\Users\charl\PYTHON\stackoverflow_questions_2\read_text_ocr.py Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU. Process finished with exit code -1073741795 (0xC000001D)
解决方案
1. 降级PyTorch版本
PyTorch 2.5.x可能引入了你的CPU不支持的高级指令集(如AVX2/AVX512),即使CPU支持基础AVX也会触发异常。降级到兼容的旧版本:
pip uninstall torch torchvision torchaudio pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cpu
2. 禁用高级指令集优化并强制CPU模式
通过环境变量限制PyTorch的指令集使用,同时明确指定EasyOCR用CPU运行:
import os # 禁用多线程和高级指令集优化 os.environ['TORCH_CPU_THREADS'] = '1' os.environ['OMP_NUM_THREADS'] = '1' os.environ['MKL_NUM_THREADS'] = '1' import easyocr reader = easyocr.Reader(['en'], gpu=False) result = reader.readtext('images/phonenum.png') for (bbox, text, prob) in result: print(text)
3. 更新CPU微码或BIOS
部分CPU需要更新微码或BIOS才能支持特定指令集,前往主板厂商官网下载对应型号的BIOS更新包,或通过Windows更新安装最新的CPU微码补丁。
4. 替换为Tesseract OCR
如果上述方法无效,可改用Tesseract OCR替代:
pip install pytesseract pillow
代码示例:
from PIL import Image import pytesseract # 若Tesseract未加入系统环境变量,需指定路径 # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' img = Image.open('images/phonenum.png') text = pytesseract.image_to_string(img, lang='eng') print(text.strip())
内容的提问来源于stack exchange,提问作者Charles Knell
相关产品推荐
相关产品推荐

