Run time error when trying to use another language with easy-ocr in img2table

54 views Asked by At

So I am using img2table for table extraction of some tamil text. I am using img2table with easyocr since it supports multiple languages recognition. However, with this particular code:

img = cv2.imread("./3.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
languages = ['en', 'ta']
kw = {"gpu": False}
easyocr = EasyOCR(lang = languages,kw=kw)

I get the following error:

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]).

If its needed, my easyocr version is 1.7.1, img2table is 1.2.8 and I'm using python 3.11.8

1

There are 1 answers

2
hanna_liavoshka On

There is a known issue with the "ta" language in easyOCR. Downgrading the library to the 1.6.2 version can fix this problem: pip install easyocr==1.6.2.

import easyocr
reader = easyocr.Reader(['en','ta'], gpu=False)
reader.readtext('img.png')

Another possible solution is posted here, but I cannot confirm it: https://github.com/JaidedAI/EasyOCR/issues/1135#issuecomment-1905912726