8조
프로젝트 개요
기술개발 과제
국문 : 영상인식 기반 RVM 시스템 개발
영문 : Developing RVM System Based On Image Recognition
과제 팀명
재활용 잘허니
지도교수
김태현 교수님
개발기간
2020년 9월 ~ 2020년 12월 (총 4개월)
구성원 소개
서울시립대학교 기계정보공학과 20144300** 심**(팀장)
서울시립대학교 기계정보공학과 20144300** 강**
서울시립대학교 기계정보공학과 20144300** 김**
서울시립대학교 기계정보공학과 20144300** 손**
서울시립대학교 기계정보공학과 20144300** 유**
서울시립대학교 기계정보공학과 20144300** 윤**
서론
개발 과제의 개요
개발 과제 요약
- • RVM이란 Reverse Vending Machine으로 페트와 캔과 같은 재활용을 위한 자원을 받아서 포인트나 돈을 제공하는 역 자판기이다. 우리는 RVM이 기존의 바코드 인식 방법과는 달리 영상 인식을 통해서 자원을 판별함을 목표로 한다. 영상인식을 사용하게 되면 더욱 폭넓은 종류의 페트병과 캔 등을 대상으로 할 수 있다.
- • 본 프로젝트에서 전체적인 자판기를 구성하고 물체를 투입하면 페트와 캔, 혹은 그 외의 물체임을 판별하여 각각의 쓰레기통으로 분리하며 페트와 캔이 아닌 물체는 다시 사용자에게 돌려주도록 구성한다. 이를 통해서 올바른 재활용 방법 홍보를 할 수 있고 동시에 페트와 캔의 재활용률을 높임을 기대할 수 있다.
개발 과제의 배경 및 효과
- • 페트병은 각종 음료수 용기 등에 흔히 쓰이는 재료로 우리도 주변에서 많이 접하는 플라스틱이다. 페트는 플라스틱 중 가장 재활용이 쉽고 재활용 후에도 그 품질이 떨어지지 않으며 깨끗하게 분리배출 되는 경우 100% 가깝게 재활용이 가능하다. 재활용을 하는 과정에서 페트는 3가지 등급으로 나뉜다. 1등급은 의류, 운동화 제작에 사용되고 2등급은 플라스틱 제품, 3등급은 가구 및 산업용 솜으로 재활용이 된다. 페트병은 이렇게 재활용 측면에서 가능성이 큰 자원이다.
- • 페트는 라벨 및 뚜껑 제거, 색상 선별, 파쇄, 세척, 건조의 재활용 과정을 거친다. 다만 페트의 선별 과정은 대부분 사람이 직접 진행하기에 이 과정에서 버려지는 페트의 양이 많다. 또한 라벨을 제거하는 경우 파쇄 후 물에 띄우는 방법으로 제거를 하는데 라벨이 크거나 무거우면 분리가 안 된다. 결국 다시 분리과정을 거치게 되며 여러 차례 반복될수록 비용이 늘고 이물질과 함께 버려지는 페트가 늘어난다. 결과적으로 자원으로 활용될 가능성이 큰 페트병의 재활용률이 감소한다.
- • 본 프로젝트의 목표는 고가의 RVM을 임베디드 시스템을 활용하여 저가형으로 개발하고 시스템 간소화를 통해 소형화를 이루어 포터블한 시스템으로 발전시켜 다양한 장소에서의 유동적 활용을 이루는 것이다. 또한 영상인식 기반의 물체분류를 하기에 수거하는 물체의 범위가 광범위할 수 있다는 장점을 가진다. 주로 예상되는 사용처는 쓰레기 배출량은 많지만 고가의 장비를 사용하기에 부담되는 곳인 학교, 주거단지, 소규모 마트 등이 있다. 이 과정을 통해 앞서 언급한 재활용과정의 문제점을 해결할 수 있는 올바른 재활용 과정에 대한 교육 및 홍보효과를 불러올 수 있다.
- • 임베디드 시스템을 활용하여 개발 비용을 줄이는거에 더하여 본 프로젝트는 사용하는 모든 라이브러리가 오픈소스이다. 따라서 오픈소스의 장점인 초기 개발비용이 매우 적다는 점이 장점으로 작용한다. 또한 프로젝트 진행 과정에서 다양한 목적에 맞게 재구성이 용이하다. UI, 영상인식 알고리즘 등의 프로젝트 내용 역시 오픈소스 소프트웨어 형태로 제작, 공유하여 성과 확산에 유리하다.
개발 과제의 목표와 내용
- • 개발 목표
- 먼저 디스플레이를 통해 사전에 구축된 웹 어플리케이션이 실행된다. 이후 재활용품을 투입하면 페트, 캔, 수거하지 않는 물체로 나뉘게 되고 수거하지 않는 물체의 경우 다시 사용자에게 반납이 된다. 페트와 캔의 경우에는 판별 후 해당 쓰레기통으로 이동한다. 모든 경우에 대해서 이중확인을 하기 위해서 판별 결과가 투입한 물체와 같은지를 묻는 UI가 나오게 되며 이 결과에 따라서 페트와 캔으로 재분류가 가능하다. 시스템은 물체 하나의 사이클이 끝난 이후 투입종료 버튼이 눌림 여부를 확인한다. 이후 투입종료 상황이면 UI를 통해 사용자에게 투입한 물체의 개수를 안내해주고 지금까지 총 투입한 물체를 안내해준다.
- • 개발 내용
- 1. 영상 인식을 통한 페트병, 캔 판별
- 먼저 디스플레이를 통해 사전에 구축된 웹 어플리케이션이 실행된다. 이후 재활용품을 투입하면 페트, 캔, 수거하지 않는 물체로 나뉘게 되고 수거하지 않는 물체의 경우 다시 사용자에게 반납이 된다. 페트와 캔의 경우에는 판별 후 해당 쓰레기통으로 이동한다. 모든 경우에 대해서 이중확인을 하기 위해서 판별 결과가 투입한 물체와 같은지를 묻는 UI가 나오게 되며 이 결과에 따라서 페트와 캔으로 재분류가 가능하다. 시스템은 물체 하나의 사이클이 끝난 이후 투입종료 버튼이 눌림 여부를 확인한다. 이후 투입종료 상황이면 UI를 통해 사용자에게 투입한 물체의 개수를 안내해주고 지금까지 총 투입한 물체를 안내해준다.
- 영상인식 후 판별 과정은 이미지 분류기를 제작하여 진행할 계획이다. YOLO v3와 같은 물체 검출기를 사용하는 경우 알고리즘의 안정성과 검출 정확도의 장점을 가질 수 있지만 본 프로젝트는 하나의 물체를 분류하는데 초점을 맞추고 있다. 이 경우 검출기 보다는 분류기를 사용함이 더욱 적합하다고 판단하였다. 사용할 분류기는 Alexnet, Resnet과 같은 기존의 완성도가 높은 이미지 분류 알고리즘을 변형하여 제작을 할 계획이다. 딥러닝 학습을 위한 프레임워크는 Facebook AI팀이 개발한 PyTorch를 사용한다.
- 페트와 캔의 경우 빛의 영향을 매우 많이 받아 이미지의 일정함이 부족해지는 문제가 발생한다. 따라서 이미지 전처리 과정을 거쳐 이미지 데이터의 일관성을 유지한다. 이미지 전처리의 경우 오픈소스 영상처리 라이브러리인 OpenCV 를 사용한다.
- 신경망 학습을 통한 접근방법 이외에도 여러 센서 처리를 통해 일차적으로 물체를 분류할 수 있다. 이를 위해 무게센서 등을 사용할 수 있으며 이 경우 이미지 처리 이전에 물체를 빠르게 분류할 수 있어 전체적인 서비스 응답시간을 단축시킬 수 있다는 장점이 있다.
- 2. 수거 자원을 수거함으로 이동시키는 모터제어 파트
- 투입구에 들어온 물체를 판별부 위치까지 레일을 이용해 옮기는 장치이다. 물체 판별 후 페트병 및 캔이 아니라면 사용자에게 돌려준다. 페트병 또는 캔이라면 판별 결과에 따라 선별하여 수거함으로 이동시킨다.
- RVM에 필요한 모터는 투입부 모터 1개, 선별 부 모터 1개, 물체를 판별모듈로 옮겨 주는 레일 모터 1개를 사용할 예정이다. 사용되는 모터의 일정 수준 힘과 제어 정확성이 중요하다. 사용 목적에 따라 모터 활용을 고려중이다. 먼저 엔코더 DC모터를 사용한 제어방식이다. DC모터의 경우 구동 파워가 충분하며 정확한 제어를 위해서는 인코더를 활용할 수 있기에 본 프로젝트에 적합하다고 판단이 가능하다.
- 메인으로 사용하는 Jetxon TX1 보드와 아두이노를 연결하여 모터를 제어한다. 아두이노는 Arduino Mega를 사용하며 외부 전력을 연결하여 메인 서버의 전력에 영향을 최소화한다.
- 3. 전체 시스템 제어를 위한 컨트롤 서버 및 UI
- RVM 웹어플리케이션이 실행되어 시스템을 사용할 수 있도록 구성한다. 투입한 물체의 결과와 투입 종료버튼이 있으며 지금까지 총 처리한 페트와 캔의 양도 안내를 할 수 있도록 웹어플리케이션은 구성이 된다.
- 영상처리, 레일 컨트롤, UI 등 전체적인 시스템을 관리하는 중앙 서버가 필요하다. 컨트롤 서버는 사용자의 입력에 따라 각 모듈을 동기화하여 작동시키는 커맨드 핸들 기능과 현재 시스템의 상태를 나타내는 머신 스탯을 가지고 있다. 서버는 이 데이터를 UI와 공유하며 앞서 언급했듯이 사용자에게 충분한 정보를 제공할 수 있어야 한다.
관련 기술의 현황
State of art
해외의 RVM시스템의 경우 바코드를 중심으로 운영이 되고 있다. 따라서 사전에 바코드의 정보가 시스템에 저장이 되어있어야 수거를 진행할 수 있으며 이로 인해서 수거할 수 있는 자원의 양이 한정되어있다. 자원 하나에 대한 응답시간은 약 5초 정도로 진행이 된다. 기기 한 대의 가격은 시장을 선도하는 노르웨이의 Tomra 기업의 경우 약 3000만원으로 형성이 되어있다. 바코드를 중심으로 진행이 되기 때문에 용기가 찌그러지거나 이물질이 묻고 라벨지가 손상이 되면 수거에 제한이 가해진다. 따라서 수거를 하는 자원임에도 불구하고 제약사항이 존재하여 수거할 수 있는 자원의 종류가 다시 한 번 제한이 된다. RVM을 적극적으로 활용하는 국가 중 독일의 경우 페트 하나에 50센트, 캔의 경우 15센트, 병은 35센트를 제공하며 이로 인해서 자원 수거율이 굉장히 높다. 다만 이 보상금은 소비자가 물품을 구매할 때 지불을 하기 때문에 시스템 제공자의 경우 보상금에 대한 부담이 적다는 특징을 가진다.
국내에서 영상인식을 활용한 RVM은 수퍼빈의 ‘네프론’ 기기가 있다. 영상인식을 활용하기에 수거할 수 있는 자원의 양에 제한이 적으며 현재 음료 페트와 캔을 수거하고 있다. 수거에 들어가는 시간은 약 7초 정도이며 자원에 따라 페트는 5원, 캔은 10원의 포인트를 사용자에게 돌려주며 자원 수거율을 높이기 위한 노력을 하고 있다. 판별 성공률에 대한 정확한 지표는 안내를 하지 않고 있으며 수거가 완료되지 않은 경우에 자원을 투입하면 기기가 멈추는 등 여러 예외상황에 대한 처리가 부족하다. 영상인식을 활용하지만 라벨지가 부착되어있어도 수거를 하고 있다. 내용물의 경우 500ml 생수병 기준으로 1/3정도가 채워져있어도 수거를 하고 있다. 수거되는 내용물로 인해 여름철 네프론의 주변에서는 악취가 난다는 단점이 존재한다. 네프론은 기기의 가격이 2000만원이다. 비용의 경우 영상인식 알고리즘의 개발에 들어가는 비용이 많이 들어갔으며 독자적인 인공지능 프로그램으로 유지보수를 하고 있다.
기술 로드맵
특허조사
내용
특허전략
내용
관련 시장에 대한 분석
경쟁제품 조사 비교
내용
마케팅 전략
내용
개발과제의 기대효과
기술적 기대효과
내용
경제적 및 사회적 파급효과
내용
구성원 및 추진체계
내용
설계
설계사양
내용
개념설계안
내용
이론적 계산 및 시뮬레이션
내용
조립도
조립도
내용
조립순서
내용
부품도
내용
제어부 및 회로설계
내용
소프트웨어 설계
내용
자재소요서
내용
결과 및 평가
완료작품 소개
프로토타입 사진
내용
포스터
내용
특허출원번호 통지서
내용
개발사업비 내역서
내용
완료 작품의 평가
내용
향후평가
내용
부록
참고문헌 및 참고사이트
내용
관련특허
내용
소프트웨어 프로그램 소스
내용
위키페이지 작성을 위한 문법 가이드
- 표
표는 위키 문법에 맞추어 작성할 수 있습니다. Mediawiki table generator를 이용하면 손쉽게 표를 작성하여 위키 문법으로 export할 수 있습니다. 아래는 Mediawiki table generator를 이용하여 작성한 표의 예시입니다. 위 웹페이지에서는 직접 CSV파일을 가져와서 바로 표를 만들 수도 있습니다. 직접 표를 문법에 맞추어 편집하고자 하시는 분들은 wiki 표 문법을 참조하면 도움이 됩니다.
구분 | 실험 1 | 실험 2 | 실험 3 | 실험 4 |
---|---|---|---|---|
결과 1 | 1.1 | 2.1 | 3.1 | 4.1 |
결과 2 | 1.2 | 2.3 | 4.5 | 6.4 |
결과 3 | 5.1 | 5.4 | 2.7 | 8.5 |
- 수식
원래 위키백과에서는 math 태그를 이용하여 바로 수식을 작성할 수 있지만 capstone wiki에서 그 기능은 지원되지 않는것으로 확인됩니다. 따라서 수식을 올리기 위해서는 수식을 사진으로 변환한 후 올려야 합니다. LATEX 수식 생성기 를 이용하면 tex 문법을 이용하여 수식을 작성하여 파일로 저장할 수 있습니다.
위 수식은 support vector machine의 비용 함수를 표현한 예시입니다. tex 문법은 tex 수식 문법 에서 확인할 수 있습니다.
- 사진
사진은 "도구-파일 올리기" 탭에서 파일을 올린 후 아래와 같이 올릴 수 있습니다. 파일명은 파일 올리기에서 정한 "파일의 새 이름"을 사용하면 됩니다.
- 코드
코드는 syntaxhighlight 기능을 이용하여 아래와 같이 표현할 수 있습니다.
#include <iostream>
int main ( int argc, char **argv ) {
std::cout << "Hello World!";
return 0;
}
이에 대한 자세한 내용은 Mediawiki syntaxhighlight를 참고하면 도움이 됩니다.