Plugin 작성하기

작성자 이호영 수정일 2022-10-24 14:04

#TwinReader, #plugin, #log

아티클 관련 제품: TwinReader

들어가며

  • Twinreader 분석 후 처리를 위해 사용하는 plugin 작성 방법에 대해 알아봅니다.
  • 분석 완료 후 별도의 처리가 필요하지 않은 경우 plugin 생략 가능합니다.
  • 한 개의 template와 한 개의 plugin으로 매핑됩니다.
  • plugin은 JavaScript로 구성되어야 합니다.



Plugin이란?

  • template rule을 적용 한 후 처리 작업으로 라벨과 좌표 데이터만 출력하는 결과 등으로 포맷을 변경합니다.
  • plugin 적용을 위한 사전 작업으로 인식 단어 변환(keywordInfo), 키워드로 데이터 추출(SearchByKeyword)이 선행 되어야 합니다.

 

Plugin 경로

  • twinreader 저장 경로 내 plugin 디렉터리 안에 위치합니다.
    /agilesoda/twinreader/template/plugin/sampleFormat.js

Plugin 작성하기

  • plugin 기본 형식으로 해당 code를 작성하고 반드시 return 값이 존재 하도록 합니다.
    "use strict";
    exports.plugin = function (templateResultData, refineOCRData) {
    //////////////////plugin code space start//////////////////
    
      return templateResultData;
    
    //////////////////plugin code space end//////////////////
    };


  • Plugin 작성 예시
    - 예약 진료비를 포함하고 있는 진료비 영수증에서 확인 할 사항은 아래 2가지 입니다. 
    ①  진료 기간이 미래 날짜로 되어 있는 영수증인가?
    ② 예약 진료비가 존재하는 영수증인가?
    let deposit = 0; 
     
    if ( val.label.length > 0 ) {   // 유효한 값이 있을 경우
      let passCheck = true;
      
      if ( val.relativeLabelsInfo?.length > 0 ) {
    	if (val.startsWith("예약진찰료") === true) {
    		deposit = val.label;
    	}
      }
     
    	let chkOK = (deposit === 0);  
    	if (!chkOK && date) {
    		let today = new Date();
    		let dateStar = new Date(date.substring(0,10));
    
    		chkOK = today >= dateStar;       
    		if (chkOK && date.length > 10) {
    			let dateEnd   = new Date(date.substring(11,21));
    			chkOK = today >= dateEnd;
    		}
    	}
    
    	const checkItem = {
    		detectValue: (chkOK === true) ? "Y":"N",
    		docRecgntKey: "예약진료영수증"
    	};
    	
    	passCheck = passCheck && chkOK;
    
    	templateResultData.checkData = {
    		JinRyuBi: checkItem,
    		JinRyuBiCheck: passCheck ? "Y":"N"
    	};
    }
    
    


  • Plugin Debug하기
    - plugin에서 작성한 코드가 잘 출력 되는지 확인 할 수 있습니다.
    - plugin에서 logging을 선언한 뒤 Twinreader-mgr pod의 log로 출력 하도록 코딩 한 뒤 출력되는 log를 확인합니다.
    - Twinreader-mgr pod log 조회 방법

    a. plugin에 log 선언하기
    vi /[DataHome]/twinreader/template/plugin/sampleFormat.js
    const { Logger } = require(path.join(process.env.INIT_CWD, 'dist', 'common', 'logger'));


    b. Twinreader-mgr-pod 이름 확인하기

    kubectl get pod
    NAME                                                      READY   STATUS    RESTARTS   AGE
    core-client-7d9ccd8d74-7lf4r                              1/1     Running      0        16d
    ingress-nginx-controller-7586f485b7-9mtwx                 1/1     Running      2       156d
    mgr-deployment-7b54cb98fb-rklkw                           1/1     Running      1        29d
    mysql-59f96bbcb8-t9qw7                                    1/1     Running      2       156d


    c. Twinreader-mgr-pod log 확인

    kubectl logs -f mgr-deployment-7b54cb98fb-rklkw
    [Twinreader-mgr] [info] 2022-10-20 10:40:17.311:        [Plugin debug] sampleFormat.js start - uXMleRqc8BbJCo+ggGQo9y3EE0ZC5LnnhOyHsCrFG5U=_tif
    [Twinreader-mgr] [debug] 2022-10-20 13:38:14.852:        sampleImg_tif: values = 진료기간: = [2022.09.24]
    [Twinreader-mgr] [debug] 2022-10-20 13:38:14.867:       sampleImg_tif: values = 예약진료비 : = [46,900]
    [Twinreader-mgr] [info] 2022-10-20 13:38:14.869:       [Plugin debug] sampleFormat.js end - uXMleRqc8BbJCo+ggGQo9y3EE0ZC5LnnhOyHsCrFG5U=_tif

마무리

  • Plugin 에서 분석 완료 후 나온 이미지 파일을 별도의 경로에 저장하거나 분석 결과를 원하는 형태로 구성 가능합니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300