수면 쓰레기 자동 인식 시스템 구현 가이드: OpenMV와 라즈베리파이를 활용한 협력형 보트 프로젝트

수면에 떠다니는 쓰레기의 자동 인식 및 제거는 환경 기술 분야에서 지속적인 과제입니다. 지난 국제 수중 로봇 대회에서 우수상을 수상한 "협력형 지능형 청정 모선-부선" 시스템은 혁신적인 시각 인식 솔루션을 통해 수면 쓰레기를 정밀하게 위치시키고 효율적으로 제거했습니다. 본 기사에서는 이 시스템의 기술적 구현을 완전히 분석하며, 하드웨어 선택부터 코드 배치까지 단계별로 안내하여 전통적인 이미지 처리와 딥러닝을 융합한 이 선진 프로젝트를 재현할 수 있도록 돕습니다.

1. 시스템 아키텍처 및 하드웨어 선택

이 시각 인식 시스템의 핵심은 계층 처리 설계 개념에 있습니다: 근거리 쓰레기 인식에는 OpenMV를 사용한 빠른 색상 블록 인식을, 원거리 복잡한 장면에서는 라즈베리파이에서 실행되는 경량화된 YOLOv5-Lite 모델을 활용합니다. 이러한 조합은 실시간성과 인식 정확성을 모두 보장합니다.

1.1 하드웨어 구성 목록

구성 요소 모델 용도 참고 가격
메인 컨트롤러 라즈베리파이 4B 4GB YOLOv5-Lite 모델 실행 ₩450
비전 모듈 OpenMV Cam H7 근거리 색상 블록 인식 ₩320
카메라 OV5640 500만 화소 원거리 이미지 취득 ₩85
통신 모듈 HC-05 블루투스 모듈 모선-부선 간 데이터 전송 ₩25
전원 관리 18650 배터리 팩 시스템 전원 공급 ₩60

팁: OpenMV는 H7 버전을 선택하는 것이 좋으며, STM32H743 듀얼 코어 프로세서가 이미지 필터 연산을 더 잘 처리할 수 있습니다

하드웨어 연결도는 다음과 같습니다:

[라즈베리파이 4B]
├─ CSI 포트 → OV5640 카메라
├─ USB 포트 → OpenMV Cam H7
└─ UART 핀 → HC-05 블루투스 모듈

1.2 주요 하드웨어 성능 비교

핵심 구성 요소 선택 시 세 가지 일반적인 솔루션을 비교했습니다:

  1. 전체 라즈베리파이 솔루션
  • 장점: 단일 장치로 시스템 간소화
  • 단점: 근거리 및 원거리 인식 병렬 처리 불가능
  1. OpenMV 단일 장치 솔루션
  • 장점: 저전력 소비
  • 단점: 딥러닝 모델 실행 불가능
  1. 하이브리드 아키텍처 (채택된 방식)
  • 장점: 각자의 역할에 최적화된 성능
  • 도전 과제: 크로스 플랫폼 통신 프로토콜 설치 필요

2. OpenMV 색상 블록 인식 구현

근거리 쓰레기 인식은 색상 임계값 기반의 전통 알고리즘을 사용하며, 응답 속도는 30FPS에 달해 실시간성 요구 사항을 충족합니다.

2.1 개발 환경 설정

먼저 OpenMV IDE 개발 환경을 설정합니다:

# OpenMV 기본 예제 코드
import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

while(True):
    img = sensor.snapshot()
    # 여기에 처리 코드 추가

2.2 핵심 알고리즘 구현

색상 블록 인식의 주요 단계는 다음과 같습니다:

  1. 양측 필터 전처리
  • 수면 파동 간섭 제거
  • 에지 정보 보존
# 양측 필터 구현
img.bilateral(3, color_sigma=0.1, space_sigma=1)

  1. 동적 임계값 분할
  • 조명 변화 자동 적용
  • 다중 색상 쓰레기 인식 지원
thresholds = [
    (30, 100, 15, 127, 15, 127), # 빨간색 임계값
    (20, 80, -30, 30, -30, 30)   # 흰색 임계값
]

for blob in img.find_blobs(thresholds, pixels_threshold=50):
    img.draw_rectangle(blob.rect())

  1. 대상 추적 최적화
  • 평균 이동(MeanShift) 알고리즘
  • 프레임 간 떨림 감소

참고: 실제 수역 테스트 시, 다양한 수질에 맞게 임계값 매개변수를 조정하는 것이 좋습니다

3. 라즈베리파이 딥러닝 모델 배포

원거리 복잡한 장면에는 YOLOv5-Lite 모델을 사용하며, 라즈베리파이 4B에서 3FPS의 추론 속도를 달성합니다.

3.1 학습 데이터 준비

데이터셋 구축은 핵심 단계로, 세 가지 데이터 소스를 사용했습니다:

  1. 현장 촬영
  • 다양한 수역 환경 촬영
  • 다양한 조명 조건
  1. 공개 데이터셋
  • PaddlePaddle 수역 쓰레기 데이터셋
  • 12종의 일반 수면 쓰레기 포함
  1. 데이터 증강
  • 무작위 회전, 확대/축소
  • 수면 반광 특효과 추가

라벨링 예시:

<객체-클래스> <x_중심점> <y_중심점> <너비> <높이>
0 0.452 0.312 0.125 0.089

3.2 모델 학습 및 최적화

YOLOv5-Lite의 경량화 개선 버전을 사용합니다:

# 학습 명령 예시
python train.py --img 640 --batch 16 --epochs 50 \
               --data water_garbage.yaml \
               --cfg models/yolov5s-lite.yaml \
               --weights yolov5s.pt

주요 최적화 전략:

  • 채널 프루닝: 30% 매개변수량 감소
  • 양자화 학습: FP32→INT8 양자화
  • 어텐션 메커니즘: SE 모듈 추가

모델 성능 비교:

모델 매개변수량 추론 속도(FPS) mAP@0.5
YOLOv5s 7.2M 1.8 0.892
YOLOv5-Lite 3.5M 3.1 0.874

4. 시스템 통합 및 실전 디버깅

두 시각 시스템을 유기적으로 통합하는 것은 프로젝트 성공의 핵심입니다.

4.1 크로스 플랫폼 통신 설계

JSON 형식을 사용하여 직렬 포트 통신:

# 라즈베리파이 통신 코드 예시
import serial
import json

ser = serial.Serial('/dev/ttyACM0', 115200)

def send_detection_result(result):
    data = {
        "type": "detection",
        "x": result[0],
        "y": result[1],
        "confidence": result[2]
    }
    ser.write(json.dumps(data).encode())

4.2 일반적 문제 해결 방안

실제 배포 중에서 발생하는 전형적인 문제:

  1. 수면 반광 간섭
  • 해결책: 편광 필터 + 동적 임계값 조정
  • 테스트 효과: 오인식률 42% 감소
  1. 다중 대상 추적 손실
  • 개선: DeepSORT 알고리즘 통합
  • 비용: 프레임 속도 약 15% 하락
  1. 무선 전송 지연
  • 최적화: 데이터 압축 + 재전송 메커니즘
  • 실제 측정: 지연 시간 320ms에서 150ms로 감소

4.3 성능 최적화 기술

대량 테스트를 통해 얻은 최적화 경험:

  • OpenMV 매개변수 최적화
sensor.set_auto_gain(False) # 자동 게인 끄기
sensor.set_auto_whitebal(False) # 밸런스 자동 조정 끄기

  • 라즈베리파이 시스템 최적화
# 그래픽 인터페이스 끄기
sudo raspi-config # → Boot Options → Console Autologin
# 오버클럭 설정
over_voltage=2
arm_freq=2000

  • 전원 관리 기술
  • TVS 다이오드 사용하여 전압 스파이크 방지
  • 모터 시작 전류 대응을 위한 슈퍼 커패시터 추가

5. 프로젝트 확장 및 혁신 방향

기본 시스템 구현 후, 다음과 같은 고급 개선을 고려할 수 있습니다:

5.1 다중 모달 감융합

  • 밀리미터 파 레이더 보조 위치 결정
  • 적외선 센서 야간 모드
  • 수질 모니터링 확장 기능

5.2 집단 지능 최적화

# 강화 학습 기반 협력 알고리즘 의사코드
class SubmarineEnv(gym.Env):
    def __init__(self):
        self.observation_space = ... 
        self.action_space = ...

    def step(self, action):
        # 부선 결정 로직 구현
        return obs, reward, done, info

5.3 태양광 지속 시간 최적화

전력 관리 시스템 설계 핵심 요소:

  1. 에너지 예산 분배 전략
  2. 동적 전력 소비 조절 알고리즘
  3. 배터리 건강도 모니터링

실제 수역 테스트에서 이 시스템은 지름 10cm 이상의 떠다니는 쓰레기에 대해 90%의 인식률을 성공적으로 달성했습니다. 특히 복잡한 조명 조건에서, 단일 인식 방식에 비해 융합 솔루션은 현저한 우위를 보였습니다.

태그: OpenMV 라즈베리파이 컴퓨터비전 YOLOv5-Lite 임베디드시스템

6월 19일 22:05에 게시됨