생활폐기물 분류 시스템 구축
생활폐기물 분리배출 과정의 수작업을 줄이기 위해 카메라 기반 객체 탐지와 기계식 분류 장치를 결합한 시제품을 제작했다. AI Hub 데이터 전처리와 YOLOv8 모델 학습, Python·OpenCV 실시간 추론, Arduino 연동을 진행해 실제로 구동하는 소형 분류 모형을 완성했다. 현재 모형은 고정 제어값으로 동작하며, 인식 결과에 따른 분류구 자동 전환은 후속 과제로 남았다.
만들게 된 배경
생활폐기물을 올바르게 분리배출하는 데 필요한 판단과 수작업을 줄이고자 시작한 프로젝트다. 카메라로 폐기물 종류를 인식하고 물리적 분류 장치까지 동작시키는 방식을 2023년 1학기 동안 3인 팀으로 구현했다.
개발 기간
2023년 1학기
해결하려던 문제와 목표
모양·크기·재질이 다른 폐기물을 영상에서 식별하고, 인식 결과를 기계적인 분류 작업과 연결하는 것이 목표였다. 이를 위해 이미지 데이터의 전처리부터 객체 탐지 모델 학습, 실시간 추론, 시리얼 통신, Arduino 모터 제어까지 하나의 흐름으로 설계했다. 최종 결과물은 실제 분류 장치의 작동을 확인할 수 있는 소형 실물 모형으로 제작했다.
주요 기능
- 실시간 폐기물 인식: USB 카메라 영상에 YOLOv8을 적용하고 바운딩 박스·클래스명 표시.
- 분류 체계: 세부 클래스 29개를 재활용·일반쓰레기·다중포장재·별도 처리·기타 5개 그룹으로 매핑.
- 장치 제어: Python 시리얼 통신과 Arduino 모터·서보모터 제어를 연결.
- 실물 시연: 컨베이어형 소형 모형을 제작해 움직임 확인. 현재 장치에는 고정 제어값
1을 전달하며 인식 결과에 따른 자동 분기 전환은 남은 과제.
내가 직접 구현하거나 담당한 부분
- 데이터·AI 개발: AI Hub 생활폐기물 데이터셋 조사, 데이터 탐색·전처리, YOLOv8 모델 학습·재학습 및 결과 확인.
- 영상 인식 소프트웨어: Python·OpenCV 기반 카메라 입력, 객체 탐지 모델 로드, 탐지 결과 표시와 클래스별 그룹 매핑 로직 구현.
- 시스템 통합: 객체 탐지 프로그램과 Arduino 장치의 시리얼 통신 및 제어 연동 작업 담당.
- Arduino 코드 개선: 타인이 최초 작성한 Arduino 모터 제어 코드를 리팩토링. 하드웨어 구조물 제작 및 Arduino 코드의 최초 작성은 담당하지 않음.
팀 구성과 역할
3명 / 소프트웨어 전반 담당 — 데이터 전처리, YOLOv8 학습·검증, Python 기반 객체 탐지 및 제어 연동, 기존 Arduino 제어 코드 리팩토링. 하드웨어 제작과 Arduino 코드의 최초 작성은 담당 범위에서 제외.
설계 구조와 기술
처리 구조: AI Hub 이미지·JSON 라벨 → 전처리 → YOLOv8 학습 → ONNX 모델 → OpenCV 추론 → 클래스별 그룹 매핑 → PySerial → Arduino 모터 제어.
Ultralytics의 YOLO('./best.onnx')로 모델을 불러오고 get_category_id()로 클래스 ID를 5개 그룹에 대응시켰다. Arduino는 시리얼 명령에 따라 모터·서보모터의 작동 순서를 제어한다.
현재 제어 범위: 전송 구문은 arduino.write(str(1).encode())로 고정돼 있다. 예측 그룹 ID에 따라 분류구가 자동 전환되도록 연결하는 단계는 후속 과제다.
기술 구성
- AI / 데이터: Python, Ultralytics YOLOv8, ONNX, AI Hub 생활폐기물 이미지·JSON 라벨 데이터
- 영상 처리 / 통신: OpenCV, PySerial, USB 카메라
- 제어: Arduino(C/C++), 서보모터, 구동모터 및 모터 드라이버
- 시제품: 컨베이어형 소형 분류 모형, 3D 설계 기반 구조물
주요 개발 과제
개발 과제: 데이터셋의 형식·품질과 실제 촬영 환경이 달라 모델 학습·적용이 어려웠다.
문제의 원인: 손상된 이미지·JSON, 서로 다른 해상도·방향·어노테이션 좌표와 클래스 불균형이 있었다. 시제품의 조명·카메라 환경도 학습 데이터와 달랐다.
처리 방식: EDA와 이미지·라벨 전처리를 다시 수행하고 YOLOv8을 재학습했다. 학습 손실·검출 예시를 검토하고 USB 카메라에서 실제 물체의 탐지를 확인했다.
결과: 모델 성능은 mAP 약 0.9를 기록했으며, 실시간 폐기물 탐지·바운딩 박스 표시를 시연하고 소형 모형을 구동했다.
최종 결과 / 실제 사용 여부
YOLOv8 탐지 프로그램과 Arduino 제어부를 연결해 실제 움직이는 소형 컨베이어형 모형을 완성했다. 물체 탐지와 기계 동작은 구현했으며, 고정 제어값을 예측 그룹 ID로 바꾸는 자동 분류 연결은 후속 과제로 남았다.
배운 점
객체 탐지 모델의 학습 품질은 모델 구조뿐 아니라 이미지·라벨 형식, 클래스 분포, 실제 촬영 조건에 크게 좌우된다는 점을 경험했다. 소프트웨어 전반을 담당하며 데이터 전처리부터 실시간 추론·시리얼 통신까지 연계했고, Arduino 코드 리팩토링을 통해 기존 하드웨어 제어 프로그램을 읽고 개선하는 작업도 수행했다. 또한 객체 인식 성공, 기계 동작 성공, 인식 결과를 이용한 완전 자동 분류가 서로 다른 검증 단계임을 확인했다.
개선 방향
- 인식과 제어 연결: 고정 전송값을 실제 예측 그룹 ID로 바꾸고 분류구 동작을 종단 간 테스트.
- 데이터 보완: 손상된 이미지·라벨 정리, 좌표 표준화, 조도·물체 크기 변화 대응과 클래스 불균형 완화.
- 모형 확장: 다양한 크기·형태의 폐기물에 대응하도록 기구부·카메라 환경 개선.