AI/easyOCR

3. EasyOCR 옵션.

사리생성 2025. 11. 15. 17:49

 

EasyOCR 옵션

result = reader.readtext(
    image,                # 이미지 경로 또는 numpy 배열
    paragraph=False,      # 문단 단위로 묶을지 여부
    contrast_ths=0.1,     # 텍스트 대비 임계값 (0~1), 낮을수록 민감
    adjust_contrast=0.5,  # 대비 조정 강도 (0~1)
    text_threshold=0.4,   # 텍스트 후보 영역 필터링 임계값
    low_text=0.3,         # 텍스트로 간주할 최소 신뢰도 임계값
    link_threshold=0.4,   # 텍스트 박스 연결 임계값
    canvas_size=2560,     # 입력 이미지 리사이즈 기준 크기
    mag_ratio=1.5,        # 확대 비율 (작은 글자 인식에 도움)
    slope_ths=0.1,        # 기울기 임계값 (텍스트 각도 보정)
    ycenter_ths=0.5,      # 텍스트 라인 중앙 정렬 임계값
    height_ths=0.5,       # 텍스트 높이 차이 임계값
    width_ths=0.8,        # 텍스트 너비 차이 임계값
    decoder='greedy',     # 디코더 타입 ('greedy', 'beamsearch')
    beamWidth=5,          # 빔서치 폭 (beamsearch 시)
    batch_size=1,         # 배치 크기 (속도 조절)
    workers=0             # 멀티스레드 워커 수 (0은 싱글 스레드)
)

 

 

 

mag_ratio와 canvas_size 변화를 주면서 인식 정확도를 비교해보자.

import easyocr

# 1. Reader 초기화 (한 번만)
reader = easyocr.Reader(['ko','en'], gpu=False)

# 2. 다양한 설정 조합
settings = [
    {"mag_ratio": 1, "canvas_size": 2560},
    {"mag_ratio": 2, "canvas_size": 2560},
    {"mag_ratio": 4, "canvas_size": 2560},
    {"mag_ratio": 4, "canvas_size": 4000},
]

# 3. 각 설정으로 OCR 수행
for i, setting in enumerate(settings, 1):
    print(f"\n=== 설정 {i} ===")
    print(f"mag_ratio={setting['mag_ratio']}, canvas_size={setting['canvas_size']}")

    result = reader.readtext(
        '2.jpeg',
        mag_ratio=setting['mag_ratio'],
        canvas_size=setting['canvas_size']
    )

    # 전체 결과 출력 (좌표, 텍스트, 신뢰도)
    print("전체 결과:", result)

    # 글자만 출력
    print("\n인식된 텍스트:")
    for box, text, prob in result:
        print(text)

 

=== 설정 1 ===
mag_ratio=1, canvas_size=2560
인식된 텍스트:
NAVER
네이버한글날
삼 예뿐 한글 눈 고마문 한글

=== 설정 2 ===
mag_ratio=2, canvas_size=2560
인식된 텍스트:
NAVER
네이버 한글날
삼 데뿐 한글 눈 고마문 한글

=== 설정 3 ===
mag_ratio=4, canvas_size=2560
인식된 텍스트:
NAVER
네이버 한글날
삼 예뿐 한글 눈 고마운 한글

=== 설정 4 ===
mag_ratio=4, canvas_size=4000
인식된 텍스트:
NAVER
네이버 한글날
삼 예뿐 한글 눈 고마운 한글

 

 

아무리 해도 문 -> 운 으로 바뀐거 외엔 큰 변화는 없었다.

 

 

import easyocr
import itertools
import warnings
warnings.filterwarnings("ignore", category=UserWarning)

# 1. 비교할 이미지 하나
img_path = '2.jpeg'  # 이미지 파일 경로

# 2. Reader 초기화
reader = easyocr.Reader(['ko','en'], gpu=False)

# 3. 옵션 후보값 정의
mag_ratios = [1.0, 2.0, 3.0, 4.0]
canvas_sizes = [1024, 2048, 3000, 4000]
contrast_ths_list = [0.05, 0.1, 0.2]
adjust_contrasts = [0.5, 0.7, 1.0]
text_thresholds = [0.3, 0.4]
low_texts = [0.2, 0.3]
slope_ths_list = [0.1, 0.2]
link_thresholds = [0.3, 0.4]
paragraphs = [True, False]

# 4. 옵션 조합 생성 (샘플링: 모든 옵션 조합)
option_combinations = list(itertools.product(
    mag_ratios, canvas_sizes, contrast_ths_list, adjust_contrasts,
    text_thresholds, low_texts, slope_ths_list, link_thresholds, paragraphs
))

# 5. 결과 저장용 리스트
results = []

# 6. 옵션 조합별 OCR 수행
for i, (mag_ratio, canvas_size, contrast_ths, adjust_contrast,
        text_threshold, low_text, slope_ths, link_threshold, paragraph) in enumerate(option_combinations):

    result = reader.readtext(
        img_path,
        mag_ratio=mag_ratio,
        canvas_size=canvas_size,
        contrast_ths=contrast_ths,
        adjust_contrast=adjust_contrast,
        text_threshold=text_threshold,
        low_text=low_text,
        slope_ths=slope_ths,
        link_threshold=link_threshold,
        paragraph=paragraph
    )

# 7. OCR 결과에서 text만 안전하게 추출
    texts = [item[1] if len(item) > 1 else '' for item in result]

    results.append({
        'option_index': i,
        'mag_ratio': mag_ratio,
        'canvas_size': canvas_size,
        'contrast_ths': contrast_ths,
        'adjust_contrast': adjust_contrast,
        'text_threshold': text_threshold,
        'low_text': low_text,
        'slope_ths': slope_ths,
        'link_threshold': link_threshold,
        'paragraph': paragraph,
        'texts': texts
    })

# 8. 결과 출력
for res in results:
    print(f"\n=== 옵션 조합 {res['option_index']} ===")
    print(f"mag_ratio={res['mag_ratio']}, canvas_size={res['canvas_size']}, contrast_ths={res['contrast_ths']}, adjust_contrast={res['adjust_contrast']}, text_threshold={res['text_threshold']}, low_text={res['low_text']}, slope_ths={res['slope_ths']}, link_threshold={res['link_threshold']}, paragraph={res['paragraph']}")
    print("인식된 텍스트:")
    for t in res['texts']:
        print(t)

 

Using CPU. Note: This module is much faster with a GPU.

=== 옵션 조합 0 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 1 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 2 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 3 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 4 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 5 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 6 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 7 ===
인식된 텍스트:
NAVER
네이버한글날 '참 예뿐 한글 눈 고마운 한글

=== 옵션 조합 8 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 9 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 10 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 11 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 12 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 13 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 14 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

=== 옵션 조합 15 ===
인식된 텍스트:
NAVER
네이버한글날 참 예뿐 한글 눈 고마운 한글 (( 얘

 

 

 

 

 

'AI > easyOCR' 카테고리의 다른 글

5. EasyOCR github trainer  (0) 2025.11.17
4. EasyOCR github  (1) 2025.11.15
2. EasyOCR 단점.  (0) 2025.11.15
1. EasyOCR 시작하기.  (0) 2025.11.15
colab + easyocr  (0) 2025.11.08