Professional Documents
Culture Documents
if sys.version_info[0] == 2:
from io import open
from six.moves.urllib.request import urlretrieve
from pathlib2 import Path
else:
from urllib.request import urlretrieve
from pathlib import Path
LOGGER = getLogger(__name__)
class Reader(object):
Parameters:
lang_list (list): Language codes (ISO 639) for languages to be
recognized during analysis.
if gpu is False:
self.device = 'cpu'
LOGGER.warning('Using CPU. Note: This module is much faster with a
GPU.')
elif not torch.cuda.is_available():
self.device = 'cpu'
LOGGER.warning('CUDA not available - defaulting to CPU. Note: This
module is much faster with a GPU.')
elif gpu is True:
self.device = 'cuda'
else:
self.device = gpu
'["ru","rs_cyrillic","be","bg","uk","mn","en"]')
model = recognition_models['gen1']['cyrillic_g1']
recog_network = 'generation1'
else:
self.model_lang = 'latin'
model = recognition_models['gen2']['latin_g2']
recog_network = 'generation2'
self.character = model['characters']
model_path = os.path.join(self.model_storage_directory,
model['filename'])
# check recognition model file
if recognizer:
if os.path.isfile(model_path) == False:
if not self.download_enabled:
raise FileNotFoundError("Missing %s and downloads disabled"
% model_path)
LOGGER.warning('Downloading recognition model, please wait. '
'This may take several minutes depending upon
your network connection.')
download_and_unzip(model['url'], model['filename'],
self.model_storage_directory, verbose)
assert calculate_md5(model_path) == model['filesize'],
corrupt_msg
LOGGER.info('Download complete.')
elif calculate_md5(model_path) != model['filesize']:
if not self.download_enabled:
raise FileNotFoundError("MD5 mismatch for %s and downloads
disabled" % model_path)
LOGGER.warning(corrupt_msg)
os.remove(model_path)
LOGGER.warning('Re-downloading the recognition model, please
wait. '
'This may take several minutes depending upon
your network connection.')
download_and_unzip(model['url'], model['filename'],
self.model_storage_directory, verbose)
assert calculate_md5(model_path) == model['filesize'],
corrupt_msg
LOGGER.info('Download complete')
self.setLanguageList(lang_list, model)
dict_list = {}
for lang in lang_list:
dict_list[lang] = os.path.join(BASE_PATH, 'dict', lang + ".txt")
if detector:
self.detector = get_detector(detector_path, self.device, quantize)
if recognizer:
if recog_network == 'generation1':
network_params = {
'input_channel': 1,
'output_channel': 512,
'hidden_size': 512
}
elif recog_network == 'generation2':
network_params = {
'input_channel': 1,
'output_channel': 256,
'hidden_size': 256
}
else:
network_params = recog_config['network_params']
self.recognizer, self.converter = get_recognizer(recog_network,
network_params,\
self.character,
separator_list,\
dict_list, model_path,
device = self.device, quantize=quantize)
if reformat:
img, img_cv_grey = reformat_input(img)
if min_size:
horizontal_list = [i for i in horizontal_list if max(i[1]-i[0],i[3]-
i[2]) > min_size]
free_list = [i for i in free_list if max(diff([c[0] for c in i]),
diff([c[1] for c in i]))>min_size]
if reformat:
img, img_cv_grey = reformat_input(img_cv_grey)
if allowlist:
ignore_char = ''.join(set(self.character)-set(allowlist))
elif blocklist:
ignore_char = ''.join(set(blocklist))
else:
ignore_char = ''.join(set(self.character)-set(self.lang_char))
if self.model_lang == 'arabic':
direction_mode = 'rtl'
result = [list(item) for item in result]
for item in result:
item[1] = get_display(item[1])
else:
direction_mode = 'ltr'
if paragraph:
result = get_paragraph(result, mode = direction_mode)
if detail == 0:
return [item[1] for item in result]
else:
return result
return result