使用img2table+EasyOCR识别泰米尔语文本时触发RuntimeError
解决img2table结合EasyOCR识别泰米尔语表格时的RuntimeError
问题场景
我正在用img2table提取含泰米尔语的表格文本,因EasyOCR支持多语言识别,故将二者结合使用,但运行以下代码时出现错误:
img = cv2.imread("./3.jpg") img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) languages = ['en', 'ta'] kw = {"gpu": False} easyocr = EasyOCR(lang = languages,kw=kw)
错误信息
RuntimeError Traceback (most recent call last) Cell In[52], line 1 ----> 1 easyocr = EasyOCR(lang = languages,kw=kw) File c:\Users\XXXXX\AppData\Local\Programs\Python\Python311\Lib\site-packages\img2table\ocr\easyocr.py:38, in EasyOCR.__init__(self, lang, kw) 35 kw["lang_list"] = self.lang 36 kw["verbose"] = kw.get("verbose") or False ---> 38 self.reader = Reader(**kw) File c:\Users\XXXXX\AppData\Local\Programs\Python\Python311\Lib\site-packages\easyocr\easyocr.py:231, in Reader.__init__(self, lang_list, gpu, model_storage_directory, user_network_directory, detect_network, recog_network, download_enabled, detector, recognizer, verbose, quantize, cudnn_benchmark) 229 else: 230 network_params = recog_config['network_params'] ---> 231 self.recognizer, self.converter = get_recognizer(recog_network, network_params,\ 232 self.character, separator_list,\ 233 dict_list, model_path, device = self.device, quantize=quantize) File c:\Users\XXXXX\AppData\Local\Programs\Python\Python311\Lib\site-packages\easyocr\recognition.py:174, in get_recognizer(recog_network, network_params, character, separator_list, dict_list, model_path, device, quantize) 172 new_key = key[7:] 173 new_state_dict[new_key] = value ---> 174 model.load_state_dict(new_state_dict) 175 if quantize: 176 try: File c:\Users\XXXXX\AppData\Local\Programs\Python\Python311\Lib\site-packages\torch\nn\modules\module.py:2152, in Module.load_state_dict(self, state_dict, strict, assign) 2147 error_msgs.insert( 2148 0, 'Missing key(s) in state_dict: {}. '.format( 2149 ', '.join(f'"{k}"' for k in missing_keys))) 2151 if len(error_msgs) > 0: -> 2152 raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format( 2153 self.__class__.__name__, "\n\t".join(error_msgs))) 2154 return _IncompatibleKeys(missing_keys, unexpected_keys) RuntimeError: Error(s) in loading state_dict for Model: size mismatch for Prediction.weight: copying a param with shape torch.Size([143, 512]) from checkpoint, the shape in current model is torch.Size([127, 512]). size mismatch for Prediction.bias: copying a param with shape torch.Size([143]) from checkpoint, the shape in current model is torch.Size([127]).
环境版本
- Python 3.11.8
- easyocr 1.7.1
- img2table 1.2.8
解决方案
这个错误源于EasyOCR预训练模型与当前字符集维度不匹配,泰米尔语模型的字符数和加载的模型参数维度不一致,以下是几种可行的解决方法:
1. 清理缓存并重新下载模型
EasyOCR会将预训练模型缓存到本地,缓存的旧版本模型可能与当前easyocr版本不兼容:
- 找到模型缓存目录:
C:\Users\你的用户名\.EasyOCR\model - 删除该目录下所有文件和文件夹
- 重新运行代码,EasyOCR会自动下载对应版本的多语言模型
2. 显式指定兼容的识别网络
初始化时指定recog_network参数,选择支持泰米尔语的网络版本:
img = cv2.imread("./3.jpg") img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) languages = ['en', 'ta'] kw = {"gpu": False, "recog_network": 'english_g2'} easyocr = EasyOCR(lang = languages, kw=kw)
也可尝试使用多语言专用网络'multi_lang'(需确认版本支持)。
3. 调整依赖版本
当前img2table 1.2.8与easyocr 1.7.1存在兼容性问题,可降低easyocr版本:
pip install easyocr==1.6.2
4. 绕过img2table封装,直接初始化EasyOCR Reader
直接创建EasyOCR的Reader实例,再传给img2table使用:
import cv2 from easyocr import Reader from img2table.ocr import EasyOCR as Img2TableEasyOCR img = cv2.imread("./3.jpg") img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 直接初始化EasyOCR Reader reader = Reader(lang_list=['en', 'ta'], gpu=False) # 传给img2table的EasyOCR封装 easyocr = Img2TableEasyOCR(reader=reader) # 后续执行img2table表格提取逻辑
内容的提问来源于stack exchange,提问作者NISHITH
相关产品推荐
相关产品推荐

