Saturday, November 9, 2019

OpenCV Install

//OPENCV CHECK and Delete

sudo find / -name "*opencv*" -exec rm -rf {} \;
sudo find /usr/local/ -name "*opencv*" -exec rm  {} \;
sudo apt-get purge libopencv* python-opencv
sudo find /usr/local -name "*opencv*"
sudo find / -name "*libopencv*"



INSTALL BY BUILD
Raspbian 2019.9.26 Ver.(BUSTER), OpenCV 4.1.2
reference : https://webnautes.tistory.com/916

3-2. build-essential 패키지에는 C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있습니다.
cmake는 컴파일 옵션이나 빌드된 라이브러리에 포함시킬 OpenCV 모듈 설정등을 위해 필요합니다.
$ sudo apt-get install build-essential cmake

3-3. 특정 포맷의 이미지 파일을 불러오거나 기록하기 위해 필요한 패키지들입니다.
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

3-4. 특정 코덱의 비디오 파일을 읽어오거나 기록하기 위해 필요한 패키지들입니다.
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

3-5. Video4Linux 패키지는 리눅스에서 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API를 포함하고 있습니다.
$ sudo apt-get install libv4l-dev v4l-utils

3-6. GStreamer는 비디오 스트리밍을 위한 라이브러리입니다.
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

3-7. OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오들을 보여줄 수 있습니다.
윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다.  여기서는 gtk2를 지정해주었습니다.
$ sudo apt-get install libgtk2.0-dev
그외 선택 가능한 패키지는 다음과 같습니다.
libgtk-3-dev
libqt4-dev
libqt5-dev

3-8. OpenGL 지원하기 위해 필요한 라이브러리입니다.
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev

3-9. OpenCV 최적화를 위해 사용되는 라이브러리들입니다.
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

3-10. python2.7-dev와 python3-dev 패키지는 OpenCV-Python 바인딩을 위해 필요한 패키지들입니다.
Numpy는 매트릭스 연산등을 빠르게 처리할 수 있어서 OpenCV Python에서 사용됩니다.
$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy

4-1. 소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후.. 진행합니다
mkdir opencv
cd opencv

4-2. OpenCV 4.1.2 소스코드를 다운로드 받아 압축을 풀어줍니다.
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip
$ unzip opencv.zip

4-3. opencv_contrib(extra modules) 소스코드를 다운로드 받아 압축을 풀어줍니다.
SIFT, SURF 등을 사용하기 위해 필요합니다
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip
$ unzip opencv_contrib.zip

4-5. opencv-4.1.2 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.
컴파일은 build 디렉토리에서 이루어집니다.
pi@raspberrypi:~/opencv $  cd opencv-4.1.2
pi@raspberrypi:~/opencv/opencv-4.1.2 $  mkdir build
pi@raspberrypi:~/opencv/opencv-4.1.2 $  cd build
pi@raspberrypi:~/opencv/opencv-4.1.2/build $

4-6. cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다.  복사해서 터미널에 붙여넣기 해주면 됩니다.
다음 옵션은 빌드할 OpenCV 버전에 맞추어 아래 경로중 빨간색 부분을 변경하세요.

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON ../


4-8. 다음과 같은 메시지가 보이면 정상적으로 된 것입니다.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build


4-9. 진행하기 전에 스왑(swap) 공간을 늘려줘야 멀티코어를 사용하여 컴파일시 메모리 부족으로 에러가 나지 않습니다.
( 참고 https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/ )
/etc/dphys-swapfile 파일을 열어서
$ sudo nano /etc/dphys-swapfile

CONF_SWAPSIZE  변수값을 100에서 2048로 수정합니다.
# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 대략 20배가 됩니다

$ free

$ sudo /etc/init.d/dphys-swapfile restart

$ time make -j4
혹, python 라이브러리 빌드하는 부분에서 다음처럼 오랫동안 멈춤 현상이 있는 경우 . Ctrl + C를 눌러 중지하고

make 명령으로 다시 진행해서 완료하면 됩니다.(이때 인내심이 중요함)
pi@raspberrypi:~/opencv/opencv-4.1.2/build $ make

4-11. 이제 컴파일 결과물을 설치합니다.
pi@raspberrypi:~/opencv/opencv-4.1.2/build $ sudo make install

샘플 코드들은 /usr/local/share/opencv4/samples/ 위치에 복사됩니다.

4-12. opencv  라이브러리를 찾을 수 있도록 다음 명령을 실행합니다.
pi@raspberrypi:~/opencv/opencv-4.1.2/build $ sudo ldconfig

4-13. /etc/dphys-swapfile 파일을 열어서 CONF_SWAPSIZE  변수값을 다시 100으로 수정합니다.
$ sudo nano /etc/dphys-swapfile

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100

스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 원래대로 돌아옵니다.
$ sudo /etc/init.d/dphys-swapfile restart


INSTALL BY PKG (Simple Method)
Raspbian (STRETCH), OpenCV 3.4.1
1. apt update
$ sudo apt update
$ sudo apt upgrade
If you are busy, you can skip 'upgrade', but 'update' is necessary.

시간을 절약하려면 'upgrade'는 안해도 되는데, 'update'는 꼭 해야 합니다.

2. Download
All (모든 버전 다운로드)
~ $ git clone https://github.com/dltpdn/opencv-for-rpi.git
~ $ cd opencv-for-rpi
~/opencv-for-rpi $ cd <rasbian_version>/<opencv_version> #cd stretch/3.4.0

3. Installation
~/opencv-for-rpi/stretch/3.4.0 $ sudo apt-get install -y ./OpenCV*.deb
or

~/opencv-for-rpi/stretch/3.4.0 $ sudo dpkg -i ./OpenCV*.dev
~/opencv-for-rpi/stretch/3.4.0 $ sudo apt install -f


https://github.com/dltpdn 읽어볼것
wget https://github.com/dltpdn/opencv-for-rpi/releases/download/v3.4.1/OpenCV-3.4.1.tar.gz
tar -xvf OpenCV-3.4.1.tar.gz 
sudo apt-get install -y ./OpenCV*.deb


3. Check the result(결과 확인)
~ $ pkg-config —modversion opencv  #opencv 3.4.0
~ $ dpkg -l |grep opencv

Thursday, November 7, 2019

Linux Command

//basic command

touch, 
more, 
less, 
file,
shutdown [options][time],
man [option]...[page][command]


//사용자

adduser [options] [--home DIR] [--shell SHELL] [--disabled-password] [--disabled-login] 
user
useradd - user add with default (none-dialog 방식) / adduser의아래레벨실행파일
chage
passwd
deluser

//사용자 그룹

addgroup
groupadd
delgroup
usermod

//파일의 권한

umask
chmod
chown

//Release List

https://downloads.raspberrypi.org/NOOBS/images/

//OS version Check

$ cat /etc/os-release
$ uname -a

$ apt --fix-broken install

//directory

delete directory recursively
$ rm -r directory

directory structure
. : self
.. : parents
! : home
- : before

//link

softlink : $ ln -s hello.txt hellosymlink
hardlink : $ ln hello.txt hellolink
$ ls -ali
* concept of inode ?

//apt source change

$ sudo nano /etc/apt/sources.list


//Find

sudo find / -name "filename"
sudo find ./ \(-name 'filename1' -o -name 'filename2'\)


//Extract all zip files in a folder

depending on extension
find . -name '*.bz2' -exec tar xvf {} \;
or
find . -name '*.zip' -exec unzip {} \;

//KOREAN FONTS

sudo apt-get -y install ibus-hangul
sudo apt-get -y install ttf-unfonts-core
or
sudo apt-get install fonts-unfonts-core

//FTP setting??


//Multi User

Text Terminal : Ctrl+Alt+F1~F6
GUI Terminal : Ctrl+Alt+F7

GUI -> CUI : Ctrl + Alt  F1 ~ F6  // CUI화면간 이동
CUI -> GUI : Alt + F7   // GUI창으로 이동



// 계정 사용시 root 에 사용할 비밀번호 등록 (한번만 등록하면 됨)

$ sudo passwd root
$ su


FTP setting

//install vsftpd
sudo apt-get install vsftpd

//vsftpd.conf modification
sudo vi /etc/vsftpd.conf
   (delete #...)
   anonymous_enable=NO
   local_enable=YES
   write_enable=YES
   local_umask=022
   chroot_local_user=YES
   chroot_list_enable=YES
   chroot_list_file=/etc/vsftpd.chroot_list

//user registering
sudo vi /etc/vsftpd.chroot_list
//and then input user(ex. pi) and save and exit

//restart vsftpd
sudo service vsftpd restart
or
sudo systemctl restart vsftpd

//autobatch when booting
sudo systemctl enable vsftpd

//check status
sudo systemctl status