어려움 · 데이터셋 구축 #1 — 패널 촬영·증강 파이프라인
결론 요약
가전 패널 UI는 기종마다 달라 공개 데이터가 사실상 전무했다.
그래서 직접 다양한 종류의 패널을 촬영하고, 자주 등장하는 텍스트를 크롭해 글레어(눈뽕)·고스트·스트릭스 등 현실적 노이즈로 증강한 뒤
무작위 분할(7:2:1) 과 라벨 후처리를 자동화해 학습 가능한 코퍼스를 만들었다.
과정에서 만난 문제는 아래와 같다.
1) 배경: 왜 직접 찍고, 왜 글레어까지 시뮬레이션했나?
- 시각장애인 터치스크린 도우미(Hover AI) 는 버튼 텍스트 OCR과 손가락 근접 탐지의 결합이 핵심이다.
- 실제 환경에서는 LED 번짐(글레어), 반사(고스트), 광량 과다, 기기별 폰트·간격 차이가 잦다.
- 인터넷 상에 공개된 “세탁기/가전 패널” OCR 데이터는 거의 없어서 패널 직접 촬영이 필요했고,
현장 노이즈를 인공적으로 재현해 일반화 성능을 높여야 했다.
2) 어려움 & 해결
A. 기종마다 UI가 달라 표준 라벨링이 불가
- 같은 의미라도 표준/쾌속/탈수 세기 등 표기·배치·폰트가 상이하다.
- 해결:
- 라벨은 “텍스트의 첫 토큰”만 취급하는 규칙으로 단순화 →
표준_0001→표준
- 라벨은 “텍스트의 첫 토큰”만 취급하는 규칙으로 단순화 →
B. 파일/폴더 체계가 자꾸 깨지고, 한글 경로로 인한 오류
- 팀별 공유·이동을 하다 보면 이름 충돌/경로 인코딩 이슈 발생.
- 해결:
- 폴더별 일괄 리네임 스크립트로
폴더명_0001.ext규칙 강제 - 증강 전 ASCII 임시폴더로 복사 후 처리 → 한글 경로 안전
- 폴더별 일괄 리네임 스크립트로
C. 글레어·고스트·스트릭스가 OCR을 크게 흔듦
- 실제 촬영 시 LED 주변 번짐과 반사가 인식률 급락의 주원인.
- 해결:
glare_augmentor.py로 Bloom/Glow/Stripes/Ghost를 확률·강도·반복 수까지 세밀 제어- 과다노출 방지를 위해
master_strength와 각*_gain을 낮추고 범위 분산 - 결과: 동일 텍스트라도 다양한 광학 조건을 학습
D. 증강 산출물이 많아져서 스플릿/경로/라벨 관리가 힘듦
- 수만 장 생성 후 train/val/test 혼합, 경로·라벨 불일치로 모델 학습 실패.
- 해결:
- 일괄 무작위 섞기 → 7:2:1 분할 → txt 생성 스크립트 작성
- txt는
images/<파일명>\t<라벨>포맷으로 단일 루트 기준 유지 - 마지막에 라벨 꼬리 숫자 제거 스크립트로 정합성 보장
3) 무엇이 개선되었나?
- 동일 문구(예: 표준, 강력, 헹굼)에 대해 광학 조건 다양성 학습 →
LED 점등/반사 상황에서도 OCR 안정성이 개선되었다. - 스플릿/라벨/경로를 스크립트로 규격화 →
팀원이 환경만 맞추면 즉시 재현 가능하다. - txt 기반 파이프라인으로 후속 모델(경량 OCR/온디바이스) 실험이 쉬워진다.