블로그 이미지
devtang
Instagram : @taebr0 devtaehyeong@gmail.com

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2020. 4. 29. 18:06 Raspberry Pi

 

 

 

 

 

 

 

이번 게시물에서는 RaspberryPi 3B+에 Tensorflow 를 이용하여 사전 훈련된 Mobilenet SSDLite_V2를 이용하여 파이카메라로 Object Detection하는 과정을 작성하겠습니다.

 

우선 준비물로는 Picamera와 라즈베리파이만 있으면 됩니다.

 

라즈베리파이 터미널창을 열고 다음과같이 업데이트를 해줍니다.

sudo apt-get update
sudo apt-get upgrade

 

이후 tensorflow 모델을 다운 받을 폴더를 만들어줍니다.

cd Desktop
mkdir tensorflow
cd tensorflow

 저는 Desktop 에 tensorflow1이라고 폴더명을 만들고 터미널로 들어가줬습니다.

wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv7l.whl

 

이제 위와 같은 명령어를 치고 다운받아줍니다. 

 

다운이 완료되면 models라는 폴더가 생성되있습니다.

 

sudo pip3 install tensorflow-1.8.0-cp35-none-linux_armv7l.whl // python3.x버전설치
sudo pip install tensorflow-1.8.0-cp35-none-linux_armv7l.whl

저는 라즈베리파이에 세팅된 기본 파이썬버전이 3.5 라 pip3를 붙혀줄 필요가 없었습니다.

pip3버전으로 까는것을 추천드립니다.

 

텐서플로우가 설치가 완료되고나면, 텐서플로우에 필요한 패키지를 추가로 설치해줘야합니다.

이제부터 pip은 생략하고 pip3로 통일해서 올리겠습니다. 본인 환경에 맞게 설치하시길 바랍니다.

 

sudo apt-get install libatlas-base-dev

sudo pip3 install pillow lxml jupyter matplotlib cython

sudo apt-get install python-tk

추가적으로 OpenCV도 설치해줘야하는데 Jetson nano가 라즈베리와같이 우분투 환경이기에 똑같이 진행해주시면 됩니다.

 

(아래 게시물 참고바랍니다.)

https://ultrakid.tistory.com/10

 

[OpenCV] Jetson nano에 OpenCV 3.4 설치

제 나노 보드에 설치된 Jetson Nano Developer Kit image, CUDA 10.0, Jetpack 4.3 버전 기준으로 작성하였습니다. 우선 OpenCV 설치 전에 필요한 라이브러리 들을 설치해줍니다. (참고) - pkg-config나 unzip 또..

ultrakid.tistory.com

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-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 qt4-dev-tools

pip3 install opencv-python

OpenCV 설치시에 굉장히 오래걸리기도 하고, 발열이 심하니 설치후에 꼭 라즈베리파이를 쉬게 해주세요..

 

이제 구글의 프로토콜 버퍼를 이용할 준비를 해야합니다.

https://developers.google.com/protocol-buffers

 

Protocol Buffers  |  Google Developers

Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.

developers.google.com

이것을 이용하면 데이터를 한 번 구성하는 방법을 정의한 후 특수 생성 된 소스 코드를 사용하여 다양한 데이터 스트림에서 다양한 언어로 다양한 구조의 데이터를 쉽게 읽고 쓸 수 있다고 합니다. .proto파일을 생성하여  응용 프로그램 언어에 대한 프로토콜 버퍼 컴파일러를 실행하여 데이터 액세스 클래스를 생성한다고 하는데, 이것을 이용하면 더 작고 빠르게 읽을 수 있어서 라고 합니다.

 

명령어를 입력해줍니다. 

sudo apt-get install autoconf automake libtool curl

이 다운로드는 참고로 만들어준 tensorflow 폴더에서 진행해주세요.

wget https://github.com/protocolbuffers/protobuf.git // protocol buffer 받아오기

tar -zxvf protobuf-all-3.6.0.tar.gz // 압축풀어주기

cd protobuf-3.6.0 // 폴더로 진입

 

 

./configure

./configure를 해주면 대략 2분정도걸립니다.

 

make

make는 진짜 더더 오래걸립니다.. 저는 한시간정도 걸린 것 같습니다.

make check

이건 리얼 더더더 오래걸렸던거 같습니다. 참고로 하다가 라즈베리파이가 먹통됬는데, 먹통된 사람들은 전원을 끄고 

다시 켜준다음에 다시 make check 진행해주시면 위와같은 화면이 나오면 올바르게 컴파일 된겁니다.

저는 먹통이되서 다시 켜고 컴파일시켜 2시간 넘게 걸렸습니다.

sudo make install

위와같은 명령어를 쳐서 설치합니다.

cd python  // @@@@ python 폴더로 꼭 들어가주세요 @@@@

export LD_LIBRARY_PATH=../src/.libs

python3 setup.py build --cpp_implementation

python3 setup.py test --cpp_implementation

python3 setup.py build --cpp_implementation

 

python3 setup.py test --cpp_implementation

sudo python3 setup.py install --cpp_implementation

계속계속 진행해 줘요.

 

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3

sudo ldconfig

sudo ldconfig 치면 위와 같이 나옵니다.

이제 설치가 거의 완료됬습니다. 재부팅 전에 실행하면 텐서플로우 오류가 뜨니 반드시 재부팅을 해줍니다.

sudo reboot now

 

재부팅이 완료가 되면 Desktop에다 tensorflow1 이라고 폴더를 만들어주어 그안에 들어가줍니다.

cd Desktop

mkdir tensorflow1

cd tensorflow1

아래 명령어를 입력해주면 위와 같은 이미지처럼 다운로드가 진행됩니다~!!

git clone --recurse-submodules https://github.com/tensorflow/models.git 

설치가 완료되면 

이다음부터 조금 중요한데,

sudo nano ~/.bashrc

위의 명령어를 입력해주면

아래와 같은 GNU 창이 뜹니다. 커서를 맨아래로옮겨 아래 코드를 적고 Ctrl + X -> Y 를 눌러 저장하고 나옵니다.

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

echo $PYTHONPATH 를치면

위와같이 우리가 입력한 주소가 나옵니다. 위와 같이 나오면 성공적으로 진행된것입니다.

 

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

 

tensorflow/models

Models and examples built with TensorFlow. Contribute to tensorflow/models development by creating an account on GitHub.

github.com

이제 실행을위해 pre-trained 된 모델을 다운 받아옵니다. 저는 Mobilenet ssdlite V2 버전을 이용하겠습니다.

wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

 

다운로드가 완료되면 아래 명령어를 입력하여 압축을 풀어줍니다.

tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

다시 models파일안에 research 폴더안으로 들어와서 명령어를 입력해줘야 합니다.

protoc object_detection/protos/*.proto --python_out=.

이명령어를 입력한후 폴더안에 파일을보시면 파이썬 파일들이 proto파일들로 변환되서 저장되어있습니다. 구글 프로토콜 버퍼를 사용할 준비가 완벽하게 됬습니다!

 

 

이제 object_detection 폴더 안으로 들어와서 테스트할 파이썬 파일을 받아옵니다.

라즈베리카메라를 이용한 객체인식 예제 코드 파일입니다.

wget https://raw.githubusercontent.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/master/Object_detection_picamera.py

python3 Object_detection_picamera.py

받아와서 python으로 실행을 시키면 tensorflow가 꽤 많이 메모리를 잡아먹기 때문에 시간이 조금 걸립니다.

 

아래는 구현 동영상입니다.

https://youtu.be/rLK-y8ePueQ

 

 

참고사이트

https://youtu.be/npZ-8Nj1YwY

 

=======================================================================

posted by devtang