카테고리 없음

4. EasyOCR github

사리생성 2025. 11. 15. 19:43

 

/ 내용
easyocr
  • 핵심 라이브러리 코드가 들어있는 디렉토리.
  • 여기서 OCR의 주요 모듈이 구현되어 있음: 텍스트 검출(Detection), 텍스트 인식(Recognition), 전처리, 유틸리티 등.
  • 예: 크래프트(CRAFT) detection 모델, CRNN 기반 recognition 모델, 디코더, 후처리 병합 로직 등이 이 디렉토리에 포함됨.
examples
  • EasyOCR 사용 예제가 모여 있는 디렉토리.(이미지)
scripts
  • 자동화용 스크립트나 유틸리티 스크립트가 포함되어 있을 가능성이 높음.
  • 예: 훈련 스크립트 보조 도구, 모델 다운로드 스크립트, 데이터 준비 보조 스크립트 등
trainer
  • **모델 학습(또는 파인튜닝)**을 위한 코드가 들어 있는 디렉토리.
  • EasyOCR은 기본적으로 사전 학습된 detection (CRAFT) 모델과 recognition 모델을 제공하지만, 필요하면 커스텀 데이터로 재학습 가능함.
  • 이 곳에는 training config 파일, 데이터 로더, 학습 루프, 손실 함수 등이 존재할 수 있음.
unit_test
  • 단위 테스트 코드가 있는 디렉토리.
  • EasyOCR의 기능이 올바르게 동작하는지 자동화된 테스트를 수행하는 스크립트가 있음.
  • 개발자나 기여자가 코드 변경 후 안정성 확인할 때 사용.
Dockerfile
  • EasyOCR을 Docker 환경에서 실행할 수 있도록 설정한 파일.
  • 컨테이너화하여 배포하거나, 서버 환경에서 OCR을 돌릴 때 유용함.
README.md
  • 프로젝트 소개, 설치 방법, 기본 사용법, 라이선스 등 핵심 정보를 담고 있음. GitHub
  • Reader 사용 예시, 모델 다운로드 방식, 지원 언어 목록 등이 적혀 있음.
  • 커스텀 모델(자신의 데이터로 파인튜닝된 모델)을 만드는 방법이 설명된 마크다운 문서.
  • recognition 모델 학습, detection 모델 학습, 사용자 정의 문자 세트(character set) 지정 등의 가이드가 포함되어 있음.
  • 예: 언어 추가, 특이한 글자체, 데이터셋 사용 방법 등.
  • EasyOCR의 릴리즈(버전)별 변경 사항이 기록된 파일.
  • 새로운 기능, 버그 수정, 성능 개선 내용 등을 확인할 때 유용.
  • EasyOCR이 동작하는 데 필요한 파이썬 패키지들의 목록이 있는 파일.
  • 예: PyTorch, numpy 등 필요한 라이브러리를 여기에 적어 두어 pip install -r requirements.txt로 환경을 세팅 가능.
setup.cfg  
setup.py
  • EasyOCR을 파이썬 패키지로 설치할 때 사용하는 설정 파일.
  • pip install . 또는 python setup.py install 등으로 EasyOCR을 설치할 수 있게 해줌.

 

 

README.md

1. 프로젝트 개요
EasyOCR은 80개 이상의 언어를 지원하는 Ready-to-use OCR 라이브러리.
중국어, 한글, 일본어, 아랍어, 힌디어, 데바나가리 등 대부분의 문자체계를 지원하며, 사용하기 쉽게 만들어진 라이브러리.

PyTorch 기반
Detection 모델 → CRAFT
Recognition 모델 → CRNN
디코딩 → CTC Greedy / CTC Beamsearch

2. Badge & 배포 상태
README 상단 배지들은 EasyOCR의 상태를 보여줌:
PyPI 버전
Apache 2.0 License
Colab 데모 링크
Huggingface Spaces(Gradio 기반) 데모

6. Installation
설치 방법 2가지:
(1) 안정 버전
pip install easyocr
(2) 개발 버전 (GitHub 최신)
pip install git+https://github.com/JaidedAI/EasyOCR.git


7. 사용법 (Usage)
import easyocr
reader = easyocr.Reader(['ch_sim','en'])
result = reader.readtext('chinese.jpg')

Reader 특징
Reader 객체는 한 번만 생성하면 됨
모델은 자동 다운로드
OpenCV/Numpy 이미지 배열(이미 로드된 이미지)도 입력 가능
URL도 입력 가능

8. Command Line 지원
easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True

9. 모델 학습 / 커스텀 모델
Recognition 모델 학습 문서:
custom_model.md

Detection 모델(CRAFT) 학습 문서:
trainer/craft/README.md

 

 

 

                                                                                                                              
✦ unit_test 디렉토리

   * `README.md`: run_unit_test.py를 사용하여 단위 테스트를 실행하는 방법에 대한 지침을 제공합니다.
   * `run_unit_test.py`: 테스트 실행을 위한 주요 스크립트입니다. 명령줄 인수(EasyOCR 모듈 경로, 테스트 데이터, 이미지 디렉토리, 상세도)를 구문
     분석하고 UnitTest 클래스를 사용하여 테스트를 수행합니다.
   * `unit_test.py`: UnitTest 클래스를 정의합니다. 이 클래스는 다음을 담당합니다:
       * EasyOCR 모듈을 동적으로 임포트합니다.                                                                                                
       * .pickle 파일에서 테스트 케이스와 예상 출력을 로드합니다.
       * 테스트를 위한 입력 이미지를 처리합니다.                                                                                              
       * 테스트 입력으로 EasyOCR 함수를 실행합니다.                                                                                           
       * 숫자 허용 오차를 고려하여 실제 출력을 예상 출력과 비교하여 유효성을 검사합니다.
       * 구성 가능한 상세도로 테스트 결과를 보고합니다.                                                                                       
   * `make_test_solution.py`: EasyOcrUnitTestPackage.pickle 파일을 생성하는 스크립트입니다. 이 스크립트는 다양한 EasyOCR 함수(예: 모델 초기화,
     get_textbox, detect, recognize, readtext)에 대한 다양한 테스트 시나리오를 정의하고, 특정 입력으로 이러한 함수를 실행하며, 입력 및 해당   
     출력("솔루션")을 pickle 파일에 저장합니다. 이는 EasyOCR 라이브러리의 예상 동작 스냅샷을 효과적으로 생성합니다.                           
   * `demo.ipynb` 및 `demo.py`: 이 파일들은 테스트 프레임워크를 사용하거나 개발하는 방법에 대한 예제 또는 대화형 데모 역할을 할 가능성이      
     높습니다.                                                                                                                                
   * `data/`: 이 디렉토리에는 생성된 EasyOcrUnitTestPackage.pickle 파일 및 기타 필요한 테스트 데이터가 포함될 것으로 예상됩니다.              
                                                                                                                                              
  요약하자면, unit_test 디렉토리는 EasyOCR 라이브러리의 기능을 정의, 실행 및 검증하기 위한 강력한 프레임워크를 제공하며, 현재 출력을 미리     
  기록된 "솔루션" 출력과 비교합니다.
  
  
  
  ✦ unit_test/data/EasyOcrUnitTestPackage.pickle 파일은 EasyOCR의 단위 테스트를 위한 모든 정보가 담겨있는 압축된 파이썬 피클(pickle) 파일입니다. 이 파일은 바이너리
  형식이라 직접 내용을 볼 수는 없지만, unit_test/make_test_solution.py 스크립트를 통해 그 구조와 내용을 유추할 수 있습니다.
                                                                                                 
  이 파일에 포함된 주요 정보는 다음과 같습니다.                                                  
                                                                                                 
   1. 입력 데이터 (Inputs):                                                                      
       * 테스트에 사용될 이미지와 그 이미지의 특정 부분을 자르기 위한 좌표 값.                   
       * EasyOCR 설정을 위한 정보.                                                               
                                                                                                 
   2. 테스트 케이스 (Tests):                                                                     
       * EasyOCR의 여러 기능(예: detect, recognize, readtext 등)에 대한 테스트 모음입니다.       
       * 각 테스트 케이스는 다음을 포함합니다:                                                   
           * 테스트할 함수: 실행할 특정 함수.                                                    
           * 입력값: 해당 함수에 전달될 입력 데이터.                                             
           * 예상 출력 (Solution): 해당 입력값으로 함수를 실행했을 때 나와야 하는 정확한 결과값. 이 값은 미리 계산되어 파일에 저장되어 있습니다. 
           * 설명 및 심각도: 테스트에 대한 설명과 실패 시의 중요도.                              
                                                                                                 
  run_unit_test.py를 실행하면, unit_test.py의 UnitTest 클래스가 이 .pickle 파일을 로드합니다. 그리고 파일에 정의된 대로 각 함수를 테스트 입력값으로 실행한 뒤, 
  그 결과를 파일에 저장된 예상 출력값과 비교하여 테스트의 성공 또는 실패를 판단합니다.
  결론적으로, 이 파일은 EasyOCR의 각 기능이 정확하게 작동하는지를 검증하기 위한 "정답지" 역할을 하는 핵심 데이터 파일입니다.
  
  
  ✦ 단위 테스트를 실행하는 방법.                                                                                                                                                                                                                                         
   1. EasyOCR 프로젝트 루트 디렉토리로 이동합니다.                                                                                             
      현재 작업 디렉토리가 /Users/chloe/edu/EasyOCR이므로, 이 디렉토리에서 다음 명령을 실행하면 됩니다.                                        
                                                                                                                                               
   2. `run_unit_test.py` 스크립트를 실행합니다.                                                                                                
      unit_test/README.md 파일에 설명된 대로, 다음 명령을 사용하여 단위 테스트를 실행할 수 있습니다:                                           
                                                                                                                                               
   1 python ./unit_test/run_unit_test.py --easyocr ./easyocr --verbose 2 --test ./unit_test/data/EasyOcrUnitTestPackage.pickle             
     --image_data_dir ./examples                                                                                          
                                                                                                                          
      명령어 인수에 대한 설명:                                                                                            
                                                                                                                          
       * --easyocr ./easyocr: 테스트할 EasyOCR 패키지의 디렉토리를 지정합니다. 이 경로는 __init__.py 파일이 있는 디렉토리를 가리켜야 합니다. 
       * --verbose 2: 테스트 결과 보고의 상세도 수준을 설정합니다.                                                        
           * 0: 최종 결과만 보고합니다.                                                                                   
           * 1: 각 테스트 모듈의 결과도 보고합니다.                                                                       
           * 2: 각 모듈의 각 테스트 결과도 보고합니다. (권장)                                                             
           * 3: 각 테스트의 계산된 출력과 예상 출력도 보고합니다.                                                         
           * 4 이상: 각 테스트의 입력도 보고합니다. (콘솔에 많은 텍스트가 출력될 수 있습니다.)                            
       * --test ./unit_test/data/EasyOcrUnitTestPackage.pickle: 사용할 테스트 패키지 파일의 경로를 지정합니다. 기본값은   
         ./unit_test/data/EasyOcrUnitTestPackage.pickle입니다.                                                            
       * --image_data_dir ./examples: EasyOCR 예제 이미지가 포함된 디렉토리의 경로를 지정합니다. 기본값은 ./examples/입니다. 
                                                                                                                          
  이 명령을 실행하면 EasyOCR의 단위 테스트가 시작되고, --verbose 인수에 따라 상세한 테스트 결과가 콘솔에 출력됩니다.
  
  
아래는 명령어를 실행시 사용한 명령어다. CUDA가 없다면 colab을 사용하시면 된다.
python ./unit_test/run_unit_test.py --easyocr ./easyocr --verbose 2 --test ./unit_test/data/EasyOcrUnitTestPackage.pickle --image_data_dir ./examples
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install Pillow
pip install numpy
pip install torch
pip install torchvision
pip install opencv-python
pip install scipy
pip install scikit-image
pip install python-bidi
pip install PyYAML

########################
colab에서 사용했다.
########################
/content/EasyOCR# python ./unit_test/run_unit_test.py --easyocr ./easyocr --verbose 2 --test ./unit_test/data/EasyOcrUnitTestPackage.pickle --image_data_dir ./examples
Unit test is set for EasyOCR at /content/EasyOCR/easyocr
Testing EasyOCR: 9 modules will be tested.

##Testing module model initialization: 4 tests will be performed.
#### test01: Counting parameters of detector module.
#### Passed. [1/4]
#### test02: Calculating total norm of parameters in detector module.
#### Passed. [2/4]
#### test03: Counting parameters of recognition module.
#### Passed. [3/4]
#### test04: Calculating total norm of parameters in recognition module.
#### Passed. [4/4]
##Module model initialization: Passed.

##Testing module get_textbox function: 3 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/3]
#### test02: Testing with custom input.
#### Passed. [2/3]
#### test03: Testing with custom input.
#### Passed. [3/3]
##Module get_textbox function: Passed.

##Testing module group_text_box function: 3 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/3]
#### test02: Testing with custom input.
#### Passed. [2/3]
#### test03: Testing with custom input.
#### Passed. [3/3]
##Module group_text_box function: Passed.

##Testing module detect method: 3 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/3]
#### test02: Testing with custom input.
#### Passed. [2/3]
#### test03: Testing with custom input.
#### Passed. [3/3]
##Module detect method: Passed.

##Testing module get_image_list function: 2 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/2]
#### test02: Testing with custom input.
#### Passed. [2/2]
##Module get_image_list function: Passed.

##Testing module get_text_test function: 3 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/3]
#### test02: Testing with custom input.
#### Passed. [2/3]
#### test03: Testing with custom input.
#### Passed. [3/3]
##Module get_text_test function: Passed.

##Testing module get_paragraph_test function: 3 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/3]
#### test02: Testing with custom input.
#### Passed. [2/3]
#### test03: Testing with custom input.
#### Passed. [3/3]
##Module get_paragraph_test function: Passed.

##Testing module recognize method: 2 tests will be performed.
#### test01: Testing with default input.
#### Passed. [1/2]
#### test02: Testing with custom input.
#### Passed. [2/2]
##Module recognize method: Passed.

##Testing module readtext method: 4 tests will be performed.
#### test01: Reading English text.
#### Passed. [1/4]
#### test02: Reading French text.
#### Passed. [2/4]
#### test03: Reading Chinese (simplified) text.
#### Passed. [3/4]
#### test04: Reading Korean text.
#### Passed. [4/4]
##Module readtext method: Passed.

##################################################
Testing completed:
 Final result: Passed.
/content/EasyOCR#