Object Detection W/ Dragonboard 410c or 820c Using OpenCV and Tensorflow.

by alvaromfcunha in Circuits > Software

2404 Views, 4 Favorites, 0 Comments

Object Detection W/ Dragonboard 410c or 820c Using OpenCV and Tensorflow.

download.jpeg
FYYULXFJHQJP65L.LARGE.jpg
opencv.png
arrow_dragonboard820c_front2.jpg

This instructables describes how to install OpenCV, Tensorflow, and machine learning frameworks for Python 3.5 to run the Object Detection application.

Requirements

You will need the following itens:

Download the file (In the end of this step), unzip and copy to the MicroSD card;
Obs: If using an DB820c, download the file, unzip and move to /home/*USER*/ to ease the use of the commands.

  • A USB Hub;
  • A USB camera (Linux compatible);
  • A USB mouse and keyboard;
  • An internet connection.

Obs: Follow this instructables in the DragonBoard browser if possible, facilitating the copying of the commands.

Mounting the MicroSD Card (only W/ DB410c)

  • Open the terminal in the Dragonboard;
  • In the terminal run fdisk:
$ sudo fdisk -l
  • Insert the MicroSD card into the DragonBoard MicroSD card slot;
  • Run fdisk again, looking for the name (and partition) of the new device in the list (e.g. mmcblk1p1)
$ sudo fdisk -l
  • Go to the root directory:
$ cd ~
  • Create a folder:
$ mkdir sdfolder
  • Mount the MicroSD card:
$ mount /dev/<sd_card_partition_name> sdfolder

Installing Required Frameworks

  • Open the terminal in the Dragonboard;

  • In the terminal, go to a chosen directory (using "~" for the 820c and the mounted SDCard for the 410c):

(820c) $ cd ~
(410c) $ cd ~/sdfolder
  • Go to the Object Detector scripts folder:
$ cd object_detector_tensorflow_opencv/scripts/
  • Run the environment setup script:
$ sudo bash set_Env.sh
  • Update the system:
$ sudo apt update
  • Install these packages:
$ sudo apt install -y protobuf-compiler gcc-aarch64-linux-gnu
g++-aarch64-linux-gnu debootstrap schroot git curl pkg-config zip
unzip python python-pip g++ zlib1g-dev default-jre libhdf5-dev
libatlas-base-dev gfortran v4l-utils hdf5* libhdf5* libpng-dev
build-essential cmake libreadline-gplv2-dev libncursesw5-dev
libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
libjpeg-dev libtiff5-dev libavcodec-dev libavformat-dev
libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev
libgtk-3-dev ffmpeg python-opengl
  • Go to this directory:
$ cd /usr/src
  • Download Python 3.5:
$ sudo wget <a href="https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz" rel="nofollow"> https://www.python.org/ftp/python/3.5.6/Python-3....</a>
  • Extract the package:
$ sudo tar xzf Python-3.5.6.tgz
  • Delete the compressed package:
$ sudo rm Python-3.5.6.tgz
  • Go to the Python 3.5 directory:
$ cd Python-3.5.6
  • Enable optimizations for the Python 3.5 compilation:
$ sudo ./configure --enable-optimizations
  • Compile Python 3.5:
$ sudo make altinstall
  • Upgrade pip and setup tools:
$ sudo python3.5 -m pip install --upgrade pip && python3.5 -m pip install --upgrade setuptools
  • Install numpy:
$ python3.5 -m pip install numpy
  • Go to the chosen directory:
(820c) $ cd ~
(410c) $ cd ~/sdfolder
  • Download Tensorflow 1.11 whl:

$ wget <a href="https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.11.0/tensorflow-1.11.0-cp35-none-linux_aarch64.whl" rel="nofollow"> https://github.com/lhelontra/tensorflow-on-arm/re...</a>
  • Install tensorflow:
$ sudo python3.5 -m pip install tensorflow-1.11.0-cp35-none-linux_aarch64.whl
  • Clone OpenCV and OpenCV Contrib repositories:
$ sudo git clone -b 3.4 https://github.com/opencv/opencv.git && sudo git clone -b 3.4 https://github.com/opencv/opencv_contrib.git  
  • Go to directory:
$ cd opencv
  • Create build directory and go to it:
$ sudo mkdir build && cd build
  • Run CMake:
$ sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_java=OFF -D BUILD_opencv_python=OFF -D BUILD_opencv_python3=ON -D PYTHON3_DEFAULT_EXECUTABLE=$(which python3.5) -D PYTHON3_EXECUTABLE:FILEPATH=$(which python3.5) -D PYTHON_INCLUDE_DIR=/usr/local/include/python3.5m/ -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON3_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF -D WITH_CUDA=OFF -D BUILD_TESTS=OFF -D WITH_TBB=ON -DBUILD_TBB=ON -D OPENCV_ENABLE_NONFREE=ON -DBUILD_opencv_xfeatures2d=OFF -D OPENGL=ON -D OPENMP=ON -D ENABLE_NEON=ON -D BUILD_PERF_TESTS= OFF -D BUILD_OPENCV_DNN=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
  • Compile OpenCV with 4 cores:
$ sudo make -j 4
  • Install OpenCV :
$ sudo make install
  • Go to the chosen directory:
(820c) $ cd ~
(410c) $ cd ~/sdfolder
  • Go to scripts directory:
$ cd object_detector_tensorflow_opencv/scripts/
  • Install Python3.5 requirements:
$ sudo python3.5 -m pip install -r requirements.txt --no-cache-dir
  • Test imports:
$ python3.5
>> import cv2
>> import tensorflow 

Obs: If cv2 returns import error, run make install in OpenCV build folder and try again.

  • Go to the chosen directory:
(820c) $ cd ~
(410c) $ cd ~/sdfolder 
  • Download cocoapi repository:
$ git clone <a href="https://github.com/cocodataset/cocoapi.git" rel="nofollow"> https://github.com/cocodataset/cocoapi.git</a>
  • Download Tensorflow models repository:
$ git clone <a href="https://github.com/tensorflow/models.git" rel="nofollow"> https://github.com/tensorflow/models.git</a>
  • Go to this directory:
$ cd cocoapi/PythonAPI
  • Edit the file Makefile, changing python to python3.5 in line 3 and 8 then save the file (using nano as an example):
$ nano Makefile
  • Compile the cocoapi:
$ sudo make

Obs: If ‘make’ command doesn’t compile, try reinstalling cython with:

$ sudo python3.5 -m pip install cython
  • Copy pycocotools to tensorflow /models/research directory:
(820c) $ cp -r pycocotools ~/models/research/ 
(410c) $ cp -r pycocotools ~/sdfolder/models/research/
  • Go to the chosen directory:
(820c) $ cd ~ 
(410c) $ cd ~/sdfolder
  • Go to models/research directory:
$ cd models/research
  • Compile with protoc:
$ protoc object_detection/protos/*.proto --python_out=.
  • Export environment variable:
$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
  • Test the environment:
$ python3.5 object_detection/builders/model_builder_test.py

Obs: It must return OK, otherwise the aplication won't work. If don't, carefully search for any mistake in the process of installing the required frameworks.



Running the Object Detection API

Captura de tela de 2019-03-12 17-20-32.png

With all frameworks configured, it’s now possible to run the object detection API that uses OpenCV along with Tensorflow.

  • Go to the chosen directory:
(820c) $ cd ~
(410c) $ cd ~/sdfolder
  • Go to object detection directory:
$ cd object_detector_tensorflow_opencv/
  • Now run the application:
$ python3.5 app.py

Now the Dragonboard will stream the video through the network. To see the output video open the browser in the DB and go to "0.0.0.0:5000".