Skip to content

jiwoonkim00/chaincount

Repository files navigation

🔧 3D 프린터 톱니바퀴 결함 탐지 시스템

YOLOv8 + OpenCV 기반 톱니바퀴 산(teeth) 개수 자동 카운팅 시스템

Python OpenCV YOLOv8


🎯 프로젝트 소개

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

🔄 3가지 방법론 비교

❌ 방법 1: 테두리 추출 기반

중심점 자동 탐색 → 도넛 ROI 마스크 → 테두리 추출 → 필터링

문제점: 배경 객체 오인식, 중앙 벗어나면 부정확, 나무결 과다 검출
정확도: ~40%


❌ 방법 2: 중심홀 검출 기반

센터홀 탐색 → 원형도 검사 → 패딩 크롭 → 톱니 카운팅

문제점: 조명 반사로 원형 인식 실패, C자 형태 검출, 그림자 오인식
정확도: ~55%


✅ 최종 방법: YOLO + Morphology

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 세그멘테이션 적용
  • 톱니 각도/간격 측정 기능 추가
  • 실시간 제조 라인 통합

📚 참고 자료

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published