Embedded

라즈베리파이 tensorflow lite로 카메라 실시간 image classification, object detection

Bicentennial 2023. 7. 18. 18:36

라즈베리파이에서 tesonflow lite를 활용하여 카메라로 들어오는 영상정보를 기반으로 image classification 및 obejct detection을 수행해 보겠습니다.

 

우선 업데이트와 업그레이드해줍니다.

$ sudo apt-get update
$ sudo apt-get upgrade

 

파이썬3 버전 확인. 3.7 이상 이어야 Tensorflow lite와 호환이 됩니다.

$ python3 -V

 

가상환경 설치

$ sudo -H python3 -m pip install virtualenv

 

project 폴더 생성 및 가상환경 활성화

$ mkdir project
$ cd project
~/project $ python3 -m virtualenv env
~/project $ source env/bin/activate

활성화하고 나면 맨 앞에 (env)가 붙습니다.

 

 

필요 라이브러리 설치

~/project $ python3 -m pip install "picamera[array]"
~/project $ python3 -m pip install tflite-runtime

 

이후 python3 환경에서 tflite가 잘 설치됐는지 확인합니다.

~/project $ python3
>>> import tflite_runtime
>>> tflite_runtime.__version__
'2.13.0'

 

object detection 예제파일 설치

~/project $ git clone https://github.com/tensorflow/examples --depth 1
~/project $ cd examples/lite/examples/image_classification/raspberry_pi
~/project/examples/lite/examples/image_classification/raspberry_pi $ sh setup.sh
~/project/examples/lite/examples/image_classification/raspberry_pi $ sudo apt-get install libatlas-base-dev

 

libatlas-base-dev 설치 시 저는 다음과 같은 에러가 나타났었는데요

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libatlas-base-dev

이 에러뿐만이 아니라 모든 lib 설치 시에 Unable to locate package 에러가 나타나더라고요.

 

sudo apt-get update upgrade도 아무 소용이 없고, 그냥 부팅디스크를 새로 만들었습니다.ㅠㅠ

 

 

 

예제파일 설치가 끝나면 예제파일을 실행하면 됩니다.

 

~/project/examples/lite/examples/image_classification/raspberry_pi $ python3 classify.py

이때도 몇 가지 에러를 겪었습니다.

 

Traceback (most recent call last):
  File "/home/pi/project/examples/lite/examples/image_classification/raspberry_pi/classify.py", line 21, in <module>
    from tflite_support.task import core
  File "/home/pi/project/env/lib/python3.9/site-packages/tflite_support/__init__.py", line 48, in <module>
    from tensorflow_lite_support.metadata.python import metadata
  File "/home/pi/project/env/lib/python3.9/site-packages/tensorflow_lite_support/metadata/python/metadata.py", line 30, in <module>
    from tensorflow_lite_support.metadata.cc.python import _pywrap_metadata_version
ImportError: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/pi/project/env/lib/python3.9/site-packages/tensorflow_lite_support/metadata/cc/python/_pywrap_metadata_version.so)

바로 GLIBCXX__3.4.29 버전이 없다는 에러인데요, 실제로 다음 명령어를 통해서 조회해 보면 해당 버전이 없습니다.

 

strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...(임의 생략)
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

여러 가지 시도를 한 결과, 다음 명령어로 해결할 수 있었습니다.

python -m pip install --upgrade tflite-support==0.4.3

GLIBCXX__3.4.29를 필요로 하지 않는 tflite-support 버전으로 다운그레이드하는 내용으로 보입니다.

 

 

그 후 또 다른 에러가 발생했습니다.

(env) pi@raspberrypi:~/project/examples/lite/examples/image_classification/raspberry_pi $ python3 classify.py
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
ERROR: Unable to read from webcam. Please verify your webcam settings.

USB 카메라 설정이 아직 안 됐었군요.

 

웹캠 액세스 원한을 부여합니다.

sudo usermod -aG video $USER

이후 재부팅하여 다시 예제파일을 실행합니다.

 

 

 

왼쪽 위에 FPS와 상위 3개 검출 결과가 나옵니다.

lite 버전임에도 불구하고 복잡한 이미지에서 나름 모니터, 스크린, 데스크톱 컴퓨터 등의 인식 결과를 보여줍니다.

 

object detection은 다른 폴더에 있으니 바로 실행해 봅니다.

 

폴더 경로만 바꿔서 똑같이 실행해 주시면 됩니다.

 

휴대전화와 가위를 잘 인식합니다. 바셀린 통은 아직 학습이 안 됐군요.ㅎㅎ

 

도움이 됐으면 좋겠습니다.

 

감사합니다.