본 프로젝트는 라즈베리파이에서 카메라를 이용하여 컵 유뮤를 확인하는 것을 목표로 한다.
- Raspberry Pi 3
- Python3.7이상
라즈베리파이의 설정 방법은 아래의 링크를 참고. 설치는 아래의 쉘 스크립트를 실행한다.
sh install.sh
만약 설치가 정상적으로 진행되지 않을 시 수동으로 다음과 같이 설정한다. (libcblas-dev는 정상적으로 설치되지 않아도 상관없다.)
pip3 install opencv-python
sudo apt install -y libcblas-dev
sudo apt install -y libhdf5-dev
sudo apt install -y libhdf5-serial-dev
sudo apt install -y libatlas-base-dev
sudo apt install -y libjasper-dev
sudo apt install -y libqtgui4
sudo apt install -y libqt4-test
환경설정을 마쳤으면 프로젝트를 가져온다.
git clone https://github.com/messy-snail/boba-cup-checker.git
해당 경로로 이동하여 정상적으로 동작하는지 확인한다. 이 때 카메라는 반드시 연결되어 있어야 한다.
cd boba-cup-checker
python3 main.py -v True
설정은 아래의 쉘 스크립트를 실행한다.
sh auto.sh
만약 정상적으로 열리지 않는다면 다음과 같이 수동으로 진행한다.
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
마지막에 다음과 같이 문자열을 입력한다. 프로그램 실행 인자에 대해서는 다음 챕터를 참고한다.
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-spalsh
# 여기부터 추가
lxterminal -e python3 /home/pi/boba-cup-checker/main.py -i 192.168.100.91 -p 7777
프로그램 실행 시 옵션으로 줄 수 있는 인자는 다음과 같다.
- -i(--ip): 서버로 설정할 IP 주소
- -p(--port): 서버로 설정할 PORT 번호
- -v(--viz): 가시화 옵션으로 True 또는 False를 입력
- -w(--write): 이미지 저장 옵션으로 True 또는 False를 입력
-d(--delay): 딜레이 옵션으로 0~5초 사이 값을 입력- -c(--counter): 달라진 픽셀 수로 10~245760개 사이 값을 입력 (기본:200)
- -q(--threshold): 민감도로 차이가 얼마만큼 났을 때 달라진 픽셀로 간주할 것인가에 대한 인자. 0~255 사이 값을 입력 (기본:30)
- -o(--open): 침식->팽창 필터링으로 노이즈를 날리는 작업을 한다. 0~5 사이의 값을 입력 (기본:2)
- -l(--left): ROI 설정 옵션으로 왼쪽 몇번째 픽셀부터 크롭할지 설정한다. (기본:0)
- -r(--right): ROI 설정 옵션으로 오른쪽 몇번째 픽셀까지 크롭할지 설정한다. (기본:640)
- -t(--top): ROI 설정 옵션으로 위쪽 몇번째 픽셀부터 크롭할지 설정한다. (기본:0)
- -b(--bot): ROI 설정 옵션으로 아래쪽 몇번째 픽셀까지 크롭할지 설정한다. (기본:480)
각 인자의 사용 예시는 다음과 같다.
# boba라는 윈도우 창에 현재 캠 화면을 표시함
python3 main.py -v True
# boba라는 윈도우 창에 현재 캠 화면을 표시하고, 설정한 ROI로 크롭하여 획득
python3 main.py -v True -l 100 -r 500
- init: 알고리즘 수행에 필요한 참조 영상을 획득
- stat: cup or nocup 판단 시작
- stop: cup or nocup 판단 종료
- set: 옵션을 설정함(위에서 기술한 프로그램 실행 인자 사용)
#가시화를 수행하고, IP주소는 192.168.1.92로 설정, 포트는 7777로 설정함.
set -v True -i 192.168.1.92 -p 7777
- cup: 컵이 있음
- nocup: 컵이 없음
- success: set을 정상적으로 수행함
- fail: set 설정을 실패함