[Tutorial] Installing OpenCV on Raspberry Pi 4B with Ubuntu 20.04

This guide will show how to install OpenCV 4.5.0 (latest) on Raspberry Pi 4B running Ubuntu Server 20.04, where architecture is ARM64 (aarch64) – which is unusal part.

but installing procedure never changes – thanks to CMake. We can build own library within Raspberry Pi with following tutorials.

OpenCV-aarch64

This is a guide to natively install OpenCV on aarch64/arm64 devices (Updated 2020-12-13, by @LimeOrangePie)

Pre-requisites

Your aarch64 device should have Ubuntu/Debian/Armbian OS flashed on it.

Steps

  1. Install dependencies
sudo apt-get install python3-dev python3-pip python3-numpy

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev  libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev protobuf-compiler libgflags-dev libgoogle-glog-dev libblas-dev libhdf5-serial-dev liblmdb-dev libleveldb-dev liblapack-dev libsnappy-dev libprotobuf-dev libopenblas-dev libgtk2.0-dev libboost-dev libboost-all-dev libeigen3-dev libatlas-base-dev libne10-10 libne10-dev

pip3 install neon

sudo apt-get install libneon27-dev

sudo apt-get install libneon27-gnutls-dev
  1. Download Source
cd ~/

git clone https://github.com/opencv/opencv.git -b 4.5.0 --single-branch

git clone https://github.com/opencv/opencv_contrib.git -b 4.5.0 --single-branch
  1. Configuring OpenCV using cmake:

Put your username in place of [username] below for the path to opencv_contrib/modules

mkdir opencv_build

cd opencv_build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D ENABLE_NEON=ON -D ENABLE_TBB=ON -D ENABLE_IPP=ON -D ENABLE_VFVP3=ON -D WITH_OPENMP=ON -D WITH_CSTRIPES=ON -D WITH_OPENCL=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencv
  1. Compilation:
make -j${nproc}

sudo make install
  1. Testing:
python3
>>import cv2
>>

Repository: https://github.com/jungin500/OpenCV-aarch64

Original Repository: https://github.com/huzz/OpenCV-aarch64

Sharif Judge × OpenCV 4.0.1 연동 사용기 – Part 1

설치를 해보자

Sharif Judge는 온라인 채점 프로그램을 Web과 Bash 코드로 구현한 Application이다. 모 교수님이 이걸로 채점을 하고 계신다지 실제로 써보면 백준과 비슷하다. 다만 간단하게 과제 풀이 형식으로만 되어있고, 언어도 Python2/3, Java, C, C++ 이렇게만 지원한다. 정말 과제 내기엔 딱좋은 어플리케이션이다…

준비물

맨땅에 헤딩

먼저 필요한 패키지를 설치하는 것부터 시작해보자. 여기서는 Ubuntu 18.04에 PHP 7.2를 사용한다.

sudo apt-get install apache2 libapache2-mod-php7.2 \
    php7.2 php7.2-mysql mysql-server mysql-client

다음은 MySQL 서버를 세팅해보자. mysql_secure_installation을 사용하여 기본적인 권한 세팅을 해주자.

sudo mysql_secure_installation

그런데 이제 mysql에 root계정으로 접속하려니까 안된다. 알아보니 MySQL 5.7 이상으로는 기본적으로는 root 계정 접속에 auth_socket 플러그인이 활성화되어있는데, 비밀번호 없이 socket으로 로그인하는 플러그인이다. 우리는 기존 legacy한 방법(패스워드 로그인)으로 변경을 해보자.

$ sudo mysql -uroot -p
> SELECT User,Host FROM mysql.user;
> ALTER USER "root"@"localhost" IDENTIFIED BY "<password>";

이제 마음껏 로그인할 수 있을것 같다. Sharif Judge가 사용할 수 있도록 데이터베이스와 여기에 접근하는 별도의 사용자를 만들자(보안상의 이유로).

$ mysql -uroot -p
> CREATE DATABASE sharif;
> CREATE USER "sharif"@"localhost" IDENTIFIED BY "<sharif-password>";
> GRANT ALL PRIVILEGES ON sharif.* TO "sharif"@"localhost";

DB 세팅은 끝났지만, 아직 한국에 최적화(?)되어 있지 않다. 유니코드를 기본 charset으로 설정해보도록 하자.

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
i (입  모드)
... 40번째 줄
character-set-server = utf8
... 추가 후
ESC (명  모드)
:wq! (강   장후 종료)
$ sudo service mysql restart

이제 DB 세팅은 끝났다. sharif-judge를 설치해보도록 하자.

wget https://github.com/mjnaderi/Sharif-Judge/archive/v1.4.1.tar.gz
tar xzf v1.4.1.tar.gz
sudo cp -R Sharif-Judge-1.4.1/ /var/www/
cd /var/www/
sudo rm -rf html/
sudo mv Sharif-Judge-1.4.1 html
sudo chown www-data:www-data -R html/

다운로드와 압축을 풀었다면, 설정 파일을 수정해 DB와 연결하도록 하자.

$ sudo vi /var/www/html/application/config/database.php
i (입  모드)
... 86번째 줄
        /*  Enter database connection settings here:  */
        'dbdriver' => 'mysqli',     // database driver (mysqli, postgre)
        'hostname' => 'localhost',  // database host
        'username' => '',           // database username
        'password' => '',           // database password
        'database' => '',           // database name
        'dbprefix' => 'shj_',       // table prefix
        /**********************************************/
... 수  후
ESC (명  모드)
:wq! (강 로  장 후 닫기)

헤딩도 쉬어가면서

Part 1에서는 MySQL, Apache2, PHP7.2를 설치하고, MySQL을 설정 완료하고 Sharif Judge까지 세팅해두었다. Apache2와 PHP.2는 따로 세팅이 필요하지 않으므로 스킵-

다음 Part2에서는 Sharif Judge의 Installation을 진행하고, 거기에 OpenCV를 연동하는 고난작업을 해보도록 하자.