이종관
프로젝트 목록으로

산업용 멀티프로세스 머신 비전

8대 카메라 실시간 GPU 추론 파이프라인 + 확장 가능한 비전 라이브러리 아키텍처 설계

에이오팜·2024.06 - 2025.11·시스템 아키텍처 설계 및 개발
PyTorch
YOLOv8
OpenCV
Basler Pypylon
Python multiprocessing
Socket.IO
Arduino

배경

컨베이어 위를 고속으로 지나가는 농산물을 최대 8대의 산업용 카메라로 촬영하고, GPU 기반 YOLOv8 AI 추론 + 머신 비전 분석을 실시간으로 수행하는 시스템입니다. 1년간 기능 추가를 거듭하면서 메인 프로세스에 초기화, 프로세스 빌드, CPU 할당, 설정 관리가 혼재되었고, 10개 이상의 프로세스가 CPU 자원을 경쟁하면서 레이턴시가 불안정했습니다. 또한 8종 농산물에 대한 확장 가능한 머신 비전 라이브러리 구조가 필요했습니다.

해결 과정

아키텍처 리팩토링: core/ 모듈을 신설하여 시스템 앱, 프로세스 빌더, 프로세스 매니저, 설정 매니저, CPU 할당기로 핵심 책임을 분리했습니다. 베이스 클래스를 생성하여 10개 이상의 설비 제조사별 프로토콜 Sender에서 공통 로직을 추출(코드 33% 감소)하고, 데이터 흐름 라우팅 단일 파일을 7개 집중 모듈로 분해했습니다.

CPU Affinity 최적화: psutil로 물리 코어를 탐지하고 프로세스별 전용 코어를 할당(9코어 예약)하는 전략을 적용했습니다. Queue 기반 Producer-Consumer 패턴으로 10개 Queue 타입을 통해 프로세스 간 완전 디커플링을 달성하고, Backpressure와 Timeout 기반 데드락 방지를 구현했습니다.

설비 제조사 플러그인 아키텍처: 전국 각 현장에서 사용하는 장비 업체마다 PLC 통신 프로토콜이 달라, importlib 기반 플러그인 아키텍처를 도입했습니다. 신규 업체 프로토콜 추가 시 Sender 파일 1개만 작성하면 됩니다.

컴퓨터 비전 코어 라이브러리 설계: Registry + Template Method + Factory 3가지 디자인 패턴을 조합한 프레임워크를 설계했습니다. 데코레이터로 자동 등록하고, process_single_image() 메서드 하나만 오버라이드하면 신규 품목을 추가할 수 있는 구조입니다. 본인은 라이브러리 아키텍처를 설계했으며, 개별 품목의 머신 비전 알고리즘은 팀원들이 독립적으로 구현했습니다.

Arduino 카메라 트리거: 컨베이어 라인의 광전 센서 신호를 받아 다중 카메라 트리거를 밀리초 정밀도로 생성하는 임베디드 시스템을 Arduino Mega 2560 기반으로 7개 품목별 변형으로 개발했습니다.

성과

  • core/ 모듈 5개 클래스 신설, 프로토콜 Sender 코드 33% 감소, 데이터 흐름 단일 파일 → 7개 모듈 분해
  • 9개 장비 업체 프로토콜 지원, 신규 업체 추가 시 파일 1개만 작성하는 플러그인 구조
  • libjpeg-turbo JPEG 인코딩으로 네트워크 대역폭 90% 절감, 다중 GPU 지원으로 추론 처리량 선형 확장
  • 비전 라이브러리 프레임워크 위에서 팀원들이 8종 농산물 머신 비전 알고리즘을 독립 개발 (아키텍처 설계 담당)
  • Arduino 7개 품목별 펌웨어 변형, 현장별 브랜치 관리로 다중 현장에 배포