[라즈베리파이 4] openCV, tensorflow 세팅

배뭉·2021년 5월 31일
0

Project

목록 보기
1/4
post-thumbnail

아두이노로 라인트레이싱 주행을 하며 라즈베리파이로 불량 토마토를 검출하는 프로젝트를 진행해보려 한다.

프로젝트를 진행하기 위해 먼저 라즈비안에 프로젝트 환경을 세팅하여야 한다.


라즈비안에 파이썬(3.7.6) 설치하기

1. 필요한 빌드 도구 설치

sudo apt-get update -y
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev -y

패키지 중 하나를 찾을 수 없는 경우 최신 버전 번호(eg. libdb5.3-dev 대신 libdb5.4-dev)를 사용하면 됨

2. Python 3.7.6을 설치

wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
tar xf Python-3.7.6.tar.xz
cd Python-3.7.6
./configure
make -j 4
sudo make altinstall

아래에 openCV설치 할 때도 나오겠지만 서로 버전 호환을 위해 그냥 3.7.6 버전을 설치한다.
make -j 4에서 시간이 엄청나게 오래걸린다..

sudo rm -r Python-3.7.4
rm Python-3.7.4.tar.xz

용량 확보를 위해서라면 설치 완료 후 위 디렉터리와 파일은 삭제해도 무방하다.


라즈비안에 Tensorflow 2.0 설치하기

1. github에서 whl 이미지 파일을 가져와 빌드

wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.0.0/tensorflow-2.0.0-cp37-none-linux_armv7l.whl
pip3 install tensorflow-2.0.0-cp37-none-linux_armv7l.whl
rm tensorflow-2.0.0-cp37-none-linux_armv7l.whl

현재까지는 tensorflow2.0 버전 이상은 설치가 안되는 것 같다.

2. 버전 확인

python3 -c 'import tensorflow as tf;print(tf.__version__)'

이렇게 2.0.0 이 뜨면 설치 성공

라즈비안에 openCV4 설치하기

1. 용량 확장

처음 Raspbian을 설치하면, OS가 차지하지 않는 공간이 빈 별도의 파티션으로 존재하게 된다.

sudo raspi-config

sudo raspi-config을 입력 하고 6 Advanced Options을 선택그 다음 A1 Expand Filesystem을 선택하여 용량을 확장시키고
finish 하면 재부팅 하게 된다.

용량 확보

df -h

위 커맨드를 입력하여 디스크 프리 사이즈를 확인

sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove

확인 후 wolfram-engine나 libreoffice*가 없을수도 있는데, 있다면 용량확보를 위해 프로젝트 진행에 필요없는 파일들을 제거한다.

2. openCV4 설치 전 필요 개발 툴 설치

sudo apt-get update && sudo apt-get upgrade

먼저 apt-get 업데이트, 업그레이드는 습관적으로 해준다.

sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libfontconfig1-dev libcairo2-dev
sudo apt-get install libgdk-pixbuf2.0-dev libpango1.0-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
sudo apt-get install python3-dev
sudo apt-get install python-pip
pip install Pillow

업데이트 후 cmake를 포함한 각종 개발 툴들을 하나하나 설치해준다.
일일이 복붙하는게 좀 귀찮지만 전체를 그대로 붙혀넣으니 설치 [ y / n ]에서 n로 인식하더라

3. 패키지 의존성 충돌 방지를 위해 가상 환경 세팅

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
sudo rm -rf ~/.cache/pip

get-pip를 받아와서 파이썬2, 파이썬3 각각 pip 설치후 캐시 삭제

sudo pip install virtualenv virtualenvwrapper

방금 설치한 pip를 이용하여 가상환경 패키지들을 설치

nano ~/.bashrc

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin 

위처럼 ~/.bashrc 쉘 스크립트 맨 끝에 위 소스를 추가하여

workon "가상환경 이름"

처럼 가상환경에 접속할 수 있도록 설정한다.

source ~/.bashrc

쉘스크립트를 다시 컴파일하여 시스템에 수정사항을 적용시킴

mkvirtualenv cv -p python3

cv라는 이름으로 가상환경을 생성하고 파이썬은 파이썬3으로 설정한다.

pip install "picamera[array]"

그리고 자동으로 활성화된 가상환경에서 picamera를 설치한다.

4. openCV4 설치

pip install opencv-contrib-python==4.1.0.25

파이썬 3.7.6에서 위 커맨드로 openCV4.1 버전을 설치하면 문제가 발생하지 않음.

python3 -c 'import cv2;print(cv2.__version__)'

openCV가 잘설치되었는지 버전을 확인해본다.
위 사진처럼 4.1.0이라고 나오면 설치 성공

5. 가상환경에도 tensorflow 2.0.0 다시 설치

wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.0.0/tensorflow-2.0.0-cp37-none-linux_armv7l.whl
pip3 install tensorflow-2.0.0-cp37-none-linux_armv7l.whl
rm tensorflow-2.0.0-cp37-none-linux_armv7l.whl

처음에 설치 했을 때 처럼 가상환경에서도 다시 설치한다.

그리고 나중에 프로젝트를 진행하다 보면

Traceback (most recent call last):

    model = tf.keras.models.load_model("digits_model.h5")

  File "/home/pi/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/save.py", line 146, in load_model

    return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)

  File "/home/pi/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/hdf5_format.py", line 166, in load_model_from_hdf5

    model_config = json.loads(model_config.decode('utf-8'))

AttributeError: 'str' object has no attribute 'decode'

h5모델을 불러올 때 위와 같은 에러가 발생하게 되는데,
tensorflow v2.0 와 openCV v4.1조합에서 h5py 패키지와의 호환성문제로 보인다.

pip install h5py==2.10.0

로 h5py의 버전을 낮추면 위 에러가 해결된다.

profile
SSAFY 6th -> SEC VD SW 👨‍💻🔥

1개의 댓글

comment-user-thumbnail
2021년 9월 14일

안녕하세요! 혹시 텐서플로 실행할 때는 파일을 어디서 찾을 수 있을까요??

답글 달기