catoegory


 

 

0. 서론
  • 왜 두 가지 주제를 선택하였는가?

자율 주제였던 파이썬 프로젝트와 달리 이번 WPF/OpenCV 프로젝트는 객체 인식 및 불량 검출이라는 대주제로 진행되었다. 세부 주제를 정하기 위한 팀 회의 결과 현재 수강하고 있는 '스마트 팩토리 SW 개발자 양성' 강의와 연계하여 우선 금속 표면 결함 분석을 중심 주제로 잡았다. 그러나 단순한 결함 분석만으로는 부족하다고 판단해 수업에서 배운 기능과 접목하여 현장과 유사한 환경을 구현해 보고자 하였다.

  • 그렇다면 어떤 기능을 접목시켜야 할까? 

현장은 안전 장비 착용을 필수로 한다는 점에 주목해 실시간 객체 탐지 기능을 도입하기로 하였다. 객체 인식 기술로 안전모 착용 여부를 판별하고, 착용이 검증된 경우에만 금속 결함 분석을 진행하도록 흐름을 설계한다면 우리가 배운 기술을 실제 현장 시나리오와 자연스럽게 접목할 수 있으리라 판단하였다.

  • 최종적으로

우리는 안전모 착용 여부 탐지 → 착용 시 결함 분석 가능이라는 구조를 구현함으로써 단순한 기술 시연을 넘어 현장 안전성과 품질 관리를 동시에 고려 프로젝트로 발전시킬 수 있었다.

 

 

1. 프로젝트 개요
  • 1-1. 프로젝트 설명

산업 현장에서 안전 장비 미착용으로 인한 사건·사고들이 꾸준히 보고 되고 있으며 작은 부주의가 큰 인명 피해로 일어질 수 있다. 이러한 문제를 예방하기 위해 작업자의 안전 장비 착용 여부를 카메라를 통해  시간으로 확인하고, 착용 상태에 따라 작업장 접근 및 분석 가능 여부를 제어하는 시스템이 필요하다.

 

이에 우리 팀은 카메라와 머신 러닝(YOLO v8, Faster R-CNN 활용) 기반 객체 인식 기술(OpenCV, WPF 활용)을 적용해 안전 장비 착용 여부를 탐지하고, 착용이 확인된 경우에만 금속 표면 결함 분석이 가능하도록 프로그램을 설계하였다. 이를 통해 작업자의 안전 확보와 품질 관리라는 두 가지 목표를 동시에 달성할 수 있는 프로그램을 구현하고자 했다.

 

  • 1-2. 기대효과
    • 미착용 패턴 분석 : 시간, 장소, 상황별 데이터를 축적해 위험 요인 파악
    • 정책 개선 근거 확보 : 안전 규정 강화 및 작업 환경 최적화에 활용
    • 결함 분석 과정의 효율화 : 결함 판정 시간 단축으로 작업자의 판단 부담을 줄임
    • 불량품 관리 지원 : 생산 초기에 문제를 확인하여 불량품 출고 예방

 

  • 1-3. 핵심 기능
OpenCV 이미지 처리 및 전처리 수행
YOLO v8s 실시간 안전모 착용 여부 탐지
YOLO v8n / Faster R-CNN 금속 표면 결함 분류

 

 

2. 팀 구성 및 역할 분담
이름 역할 담당 업무
노현신 팀장 일정 관리, 자료 수집 및 프로그램 통합, OpenCV와 모델 연동 후 WPF 제작, PPT 제작
안소현 팀원 자료 수집, 금속 표면 결함 모델 학습을 위한 자료 수집 및 모델 학습
전동흔 팀원 안전모 탐지 / 금속 표면 결함 모델 학습을 위한 자료 수집 및 모델 학습, WPF 제작, 발표
  • 프로젝트 내 담당 역할
    • 안전모 탐지 모델과 OpenCV 카메라 비전을 연동하여 실시간 데이터 처리 및 출력 기능 구현
    • 금속 표면 결함 분류 모델 (YOLO v8n)과 WPF 연동하여 분석 결과 시각화
    • 전체 프로그램 총괄 관리 및 파일 통합
    • 프로젝트 발표 자료 (PPT) 총괄 제작 및 팀 내 프로젝트 일정 관리

 

 

3. 시스템 아키텍처 다이어그램

본 시스템은 카메라로 작업자의 이미지를 입력받아 YOLO v8s 모델을 통해 안전모 착용 여부를 판별한다

  • 안전모 미착용 시 : 경고 메세지를 출력하고 미착용자의 사진을 저장한 뒤 카메라 입력 단계로 회귀
  • 안전모 착용 시 : 금속 표면 결함 분석이 가능한 WPF 화면으로 전환되어 작업자가 분석을 수행할 수 있음

 

 

4. 프로젝트 일정
구분 기간 활동
프로젝트 기획 25.08.26 세부 주제 선정 및 데이터 수집
데이터 전처리 및 모델 학습 25.08.27 ~ 08.29 데이터셋 증강, 머신 러닝 모델 선정 및 학습
사용자 인터페이스 구현 25.09.01 ~ 09.03 금속 결함 분석 및 실시간 데이터 처리 WPF 화면 구현
모델 연동 25.09.04 ~ 09.05 머신 러닝 모델과 OpenCV 카메라 연동 
발표 자료 제작 25.09.05 ~ 09.08 프로젝트 구조도 및 발표 자료 PPT 제작
최종 발표 25.09.08 프로젝트 발표 (PM 12:00)

 

 

5. 프로젝트 진행 과정
  • 데이터 수집
    • 금속 표면 결함 분류 데이터셋 (출처 : Kaggle)
  • 데이터 전처리 및 자료 증강
    • 기존의 데이터 1800장을 train : validation 비율 8:2로 나눈 뒤 학습 데이터에 대해 기하학적 변환, 색상 변경,블러 처리를 통해 10배 증강 진행
  • 문제점 발견 및 주제 변경 배경
    • 초기 프로그래밍의 한계점
      • 노트북 카메라 화질과 GPU 성능 제한으로 현저하게 낮은 모델 정확도
      • 다양한 환경 조건을 적용하였음에도 학습 데이터 외 불필요한 객체까지 탐지
      • 실제 결함 데이터를 촬영할 수 없어 현실적으로 실시간 분석이 어려움
    • 주제 변경 및 목표 조정
      • 결함 분석은 이미지 기반 분석으로 전환
      • 실시간 분석 단계는 안전모 착용 여부 탐지로 대체
      • 최종적으로 안전모 착용 시 결함 분석 가능의 흐름 구현
  • 데이터 추가 수집
    • 안전모 착용 탐지 데이터셋 (출처 : Kaggle / RoboFlow)
      • 데이터를 다양화하여 모델을 학습시킴으로써 성능 최적화
  • 데이터 전처리 및 자료 증강
    • 안전모 착용 여부 판별 : Head 근처에 Helmet이 없으면 미착용으로 판정하는 로직을 추가하여 직접 라벨링하지 않아도 자동으로 식별 가능하도록 처리
    • 라벨링 데이터 병합 및 형식 통일 : 두 데이터셋에서 중복되는 자료를 제거한 뒤 Roboflow의 클래스 이름 (names)을 기준으로 인덱스를 재맵핑하여 일관된 형식 유지
    • 데이터 증강 전략 : 학습 초반 다양성 확보를 위해 마지막 10 epochs 제외하고 모자이크 적용하여 데이터 증강 진행

 

 

6. 프로젝트 수행 결과
  • 6-1. YOLO v8s 모델 학습 결과

 

  • 6-2. YOLO v8n 모델 학습 결과

 

  • 6-3. 딥러닝 모델 실행 결과

 

 

7. 프로젝트 고찰
  • 7-1. 실시간 안전모 탐지
    • 다양한 환경 (실내·실외, 거리, 각도, 조명 방향 등)에서 따른 탐지 정확도 편차 발생
      • 해결 시도 : 카메라로 읽어오는 이미지 전처리 (밝기 및 대비 조절, 가우시안 블러 적용 등) 후 분석하였으나 카메라가 실행되는 위치가 바뀌면 또 다시 인식률이 떨어지는 문제 발생
      • 개선 방향 : 고해상도 카메라 도입, HSV·밝기·노이즈·모션블러 등 도메인 증강 적용, ROI 마스킹으로 배경 최소화, 최적 리사이징으로 속도 및 정확도 균형 확보
    • 노트북 GPU 성능 부족으로 인한 학습량 제약 및 실시간 추론 지연

 

  • 7-2. 금속 표면 결함 분류
    • YOLO 모델의 속도는 빠르지만 미세 결함 탐지 성능 저조
    • Faster R-CNN은 정밀하나 학습 효율 낮고 데이터 편향 영향 큼
    • 개선 방안 : epoch 약 80정도까지 확장, 학습량에 따른 LR 최적화, 파라미터 세밀 조정, 이미지 리사이징 및 ROI 마스킹을 통한 결함 인식 향상

 

 

8. 프로젝트 회고
  • 머신 러닝에 대하여
    • 이번 프로젝트를 통해 YOLO / Faster R-CNN 등 새로운 기술을 활용하여 OpenCV 기반의 카메라 비전과 딥러닝 모델을 연동해 실시간으로 데이터를 분석하고 처리하는 경험을 쌓을 수 있었다. 프로젝트가 끝날 때까지도 “카메라 화질이 조금 더 좋았더라면”, “노트북 성능이 조금만 더 높았더라면” 하는 아쉬움이 남았지만 머신 러닝을 통해 실시간 비전 기술과 응용하는 방법을 체득할 수 있는 뜻깊은 계기가 되었다.

 

  • 협업 및 역할 분담에 관하여
    • 처음에는 역할을 명확히 분담하고 팀원 간 소통도 원활하다고 생각했지만, 프로젝트 중반에 들어 서로의 이해관계가 다르다는 점을 깨달았다. 이후 회의 내용을 하나씩 되짚어보며 오해가 생긴 부분을 바로잡고나니 각자 맡은 역할을 무리 없이 수행할 수 있었다. 팀 프로젝트는 좋은 결과를 내는 것도 물론 중요하지만, 같은 목표를 향해 나아가는만큼 팀원들과의 꾸준한 소통 역시 그에 못지않게 중요하다는 걸 또 한 번 체감했다. 이번 프로젝트는 초반에 살짝 삐끗하였지만 올바른 방향으로 조율되어 초반에 그리고자 했던 그림을 완성할 수 있었다.

 

 

9. Github
 

GitHub - nohhyunshin/OpenCV_pj

Contribute to nohhyunshin/OpenCV_pj development by creating an account on GitHub.

github.com