YOLOv8 + OpenCV 기반 톱니바퀴 산(teeth) 개수 자동 카운팅 시스템
3D 프린터로 제작된 톱니바퀴의 산(teeth) 개수를 자동으로 추출하여 제조 품질을 검증하는 시스템입니다.
- 배경 노이즈 (나무결, 그림자, 반사광) 제거
- 톱니바퀴 내부 노이즈 (중앙홀, 각인) 제거
- 다양한 조명 환경 대응
- 높은 정확도의 자동 카운팅
- YOLOv8 기반 객체 탐지: 톱니바퀴 자동 인식 및 중점 추출
- 도넛 마스크 전처리: 내부/외부 노이즈 완전 제거
- 동적 임계값 이진화: 조명 환경 자동 적응
- 다중 필터링 카운팅: 면적, 거리, 형태 기반 정밀 검증
- Deep Learning: YOLOv8n, Roboflow
- Computer Vision: OpenCV, CLAHE, Morphology Operations
- Development: Python 3.8+, NumPy, Pandas, Matplotlib
pip install opencv-python numpy pandas ultralytics roboflow# 1. YOLO 모델 학습
python ppt파일_최종방법/src/10_train_yolov8n_sizeup_boundingbox.py
# 2. 톱니바퀴 이미지 처리
python ppt파일_최종방법/src/20_final_morphology_filter.py
# 3. 결과 확인
# 결과: ppt파일_최종방법/20_final_morphology_filter/4_final_result/
# 리포트: accuracy_report.csv중심점 자동 탐색 → 도넛 ROI 마스크 → 테두리 추출 → 필터링
문제점: 배경 객체 오인식, 중앙 벗어나면 부정확, 나무결 과다 검출
정확도: ~40%
센터홀 탐색 → 원형도 검사 → 패딩 크롭 → 톱니 카운팅
문제점: 조명 반사로 원형 인식 실패, C자 형태 검출, 그림자 오인식
정확도: ~55%
YOLOv8 객체 탐지 → 중점 추출 → 크롭 → 도넛 마스크 → 동적 임계값 → 카운팅
1단계: YOLOv8 학습
- 76장 라벨링 → 3배 증강 (120장)
- mAP50-95: 0.995, val/box_loss: 0.27
2단계: 바운딩 박스 중점 추출 & 1500px 크롭
3단계: 도넛 마스크 생성
INNER_RATIO = 0.85 # 내부 마스크
OUTER_RATIO = 1.0 # 외부 마스크4단계: 동적 임계값 이진화
min_val = np.min(gray[donut_mask > 0])
threshold = min_val + DARKNESS_TOLERANCE (60)5단계: 모폴로지 연산 및 필터링
MIN_TOOTH_AREA = 55 # 면적 필터링
EDGE_MARGIN_RATIO = 0.15 # 가장자리 제외
# 거리 기반 유효성 검증성공 요인:
- ✅ YOLO로 강건한 중점 추출 (방법1 문제 해결)
- ✅ 딥러닝 기반 조명 의존성 제거 (방법2 문제 해결)
- ✅ 동적 임계값으로 환경 변화 자동 대응
- ✅ 다중 필터링으로 노이즈 완벽 제거
| 톱니바퀴 규격 | 테스트 수 | 정답 수 | 정확도 |
|---|---|---|---|
| 27치 | 20장 | 17장 | 85% ⭐ |
| 28치 | 10장 | 2장 | 20% |
| 31치 | 10장 | 1장 | 10% |
| 항목 | 방법 1 | 방법 2 | 최종 방법 |
|---|---|---|---|
| 중점 탐지 | 60% | 50% | 99% |
| 노이즈 제거 | 부분적 | 부분적 | 완전 |
| 조명 강건성 | 약함 | 매우 약함 | 강함 |
| 톱니 카운팅 | 40% | 55% | 85% |
- 그림자와 톱니 중첩 (60%)
- 톱니 손상 및 마모 (20%)
- 반사광 과다 (20%)
ppt_파일_정리본/
├── data/ # 테스트 이미지 (27_30, 27_45, 28, 31)
├── ppt파일_3d_프린터_톱니바퀴/ # 초기 프로토타입
├── ppt파일_방법1/ # ❌ 방법 1: 테두리 추출
├── ppt파일_방법2/ # ❌ 방법 2: 중심홀 검출
└── ppt파일_최종방법/ # ✅ 최종: YOLO + Morphology
├── 10_yolo_crop_sizeup/ # YOLO 검출 & 크롭
├── 20_final_morphology_filter/ # 최종 결과
│ ├── 0_crop/ # 크롭 이미지
│ ├── 1_clahe/ # CLAHE 전처리
│ ├── 2_binary/ # 이진화
│ ├── 3_morphology/ # 모폴로지
│ ├── 4_final_result/ # 최종 카운팅 ⭐
│ ├── accuracy_report.csv # 상세 리포트
│ └── accuracy_summary.csv # 요약 리포트
└── src/
├── 10_train_yolov8n_sizeup_boundingbox.py # YOLO 학습
├── 10_sizeup_boundingbox_yolo_crop.py # 크롭
└── 20_final_morphology_filter.py # 최종 파이프라인
- ✅ 27치 톱니바퀴 85% 정확도 달성
- ✅ YOLO 기반 강건한 중점 추출
- ✅ 3가지 방법론 실험으로 최적 솔루션 도출
- ✅ 실시간 처리 가능 (이미지당 2~3초)
- 28치/31치 데이터 증강 (100장 이상)
- U-Net 세그멘테이션 적용
- 톱니 각도/간격 측정 기능 추가
- 실시간 제조 라인 통합