| |
| |
| |
| |
|
|
|
|
| import copy |
| import numpy |
| import subprocess |
| import xml.etree.ElementTree as ET |
|
|
| from .base_proc import BaseInferenceProcess |
|
|
|
|
| class LineOcrProcess(BaseInferenceProcess): |
| """ |
| 行文字認識推論を実行するプロセスのクラス。 |
| BaseInferenceProcessを継承しています。 |
| """ |
| def __init__(self, cfg, pid): |
| """ |
| Parameters |
| ---------- |
| cfg : dict |
| 本推論処理における設定情報です。 |
| pid : int |
| 実行される順序を表す数値。 |
| """ |
| super().__init__(cfg, pid, '_line_ocr') |
| process1 = subprocess.Popen(['cat', self.cfg['line_ocr']['char_list']], stdout=subprocess.PIPE) |
| process2 = subprocess.Popen(['tr', '-d', '\\n'], stdin=process1.stdout, stdout=subprocess.PIPE) |
| self.character = '〓' + process2.stdout.read().decode() |
|
|
| from src.text_recognition.text_recognition import InferencerWithCLI |
| self._inferencer = InferencerWithCLI(self.cfg['line_ocr'], self.character) |
| self._run_src_inference = self._inferencer.inference_wich_cli |
|
|
| def _is_valid_input(self, input_data): |
| """ |
| 本クラスの推論処理における入力データのバリデーション。 |
| |
| Parameters |
| ---------- |
| input_data : dict |
| 推論処理を実行する対象の入力データ。 |
| |
| Returns |
| ------- |
| [変数なし] : bool |
| 入力データが正しければTrue, そうでなければFalseを返します。 |
| """ |
| if type(input_data['img']) is not numpy.ndarray: |
| print('LineOcrProcess: input img is not numpy.ndarray') |
| return False |
| if type(input_data['xml']) is not ET.ElementTree: |
| print('LineOcrProcess: input xml is not ElementTree') |
| return False |
| return True |
|
|
| def _run_process(self, input_data): |
| """ |
| 推論処理の本体部分。 |
| |
| Parameters |
| ---------- |
| input_data : dict |
| 推論処理を実行する対象の入力データ。 |
| |
| Returns |
| ------- |
| result : dict |
| 推論処理の結果を保持する辞書型データ。 |
| 基本的にinput_dataと同じ構造です。 |
| """ |
| result = [] |
| print('### Line OCR Process ###') |
| result_xml = self._run_src_inference(input_data['img'], input_data['xml'], |
| accept_empty=self.cfg['line_ocr']['accept_empty'], |
| yield_block_page_num=self.cfg['line_ocr']['yield_block_page_num'], |
| yield_block_pillar=self.cfg['line_ocr']['yield_block_pillar']) |
|
|
| output_data = copy.deepcopy(input_data) |
| output_data['xml'] = result_xml |
| result.append(output_data) |
|
|
| return result |
|
|