📝 CheckMate (2025.03 ~ 2025.06)
📌 프로젝트 개요
교수자의 반족적이고 비효율적인 채점 업무 및 조교들의 채점 피로로 인하여, 빠르고 일관된 채점 시스템이 필요하다고 생각하였으며 이를 바탕으로 수기로 작성된 시험 답안지를 자동으로 채점하고 집계하는 OCR 기반 자동 채점 시스템을 개발하고자 하였습니다.
❓ 문제 정의
기존 채점 방식은 대부분 수작업으로 이루어져 시간이 많이 소요되며, 채점 실수나 성적 처리 지연, 누락 등의 문제가 발생할 수 있습니다. 또한 교수자마다 다른 시험지 형식으로 인해 기존 자동 채점 솔루션을 활용하기 어려웠습니다.
⚙️ 개발 내용
- 학번 인식 파이프라인
- 학적부에서 학번 리스트 수집
- 답안지에서 학번 영역 추출 후 PaddleOCR로 인식
- 리스트와 대조하여 불일치 시 사용자 입력 요청
- 문제-답안 영역 매칭 및 채점
- YOLOv10으로 시험지에서 문제 번호와 답안 영역 탐지
- OpenCV를 활용한 절반 크롭, 수평 크롭, 텍스트 크롭 전처리 파이프라인 구축
- MNIST 기반 Single-digit Classifier로 답안 인식 후 채점
- 시스템 아키텍처
- Spring 서버가 Flask 이미지 인식 작업을 위임
- Kafka Topic 분기 처리로 TPS 24, 1명당 채점 1.2초 성능 구현
- Redis Cache로 응답 속도 최적화, 분산 Lock을 통한 동기화
👤 나의 역할
- OCR 기반 문제 번호, 답안 영역 탐지 모델 학습
- YOLOv10 + OpenCV 기반 전처리 파이프라인 설계
- MNIST 분류 모델 적용 및 인식 성능 평가
- 학번, 문제 번호, 답안 레이블링 데이터 구축
- AI Server에 Flask를 구현하여 Spring과의 통신 연결
✅ 결과 및 성과
- EasyOCR 단독 사용 시 26%였던 숫자 인식 정확도를 전처리 파이프라인과 MNIST 모델 적용으로 75%까지 향상
- Kafka, Redis 기반 아키텍처 설계로 10배 이상의 동시 요청 처리 성능 달성
- YOLO 탐지 + OCR + Classifier 결합으로 다양한 시험지 양식 대응 가능
💡 어려움과 해결