Build and Install OpenCV 4.2.0 on Ubuntu with GPU support

Current OpenCV version only support CUDA 10.1.

Download sources

$ wget https://github.com/opencv/opencv/archive/4.2.0.tar.gz
$ wget https://github.com/opencv/opencv_contrib/archive/4.2.0.tar.gz

Extract the compressed files

$ tar zxf opencv-4.2.0.tar.gz
$ tar zxf opencv_contrib-4.2.0.tar.gz

CMake configuration

$ cd opencv-4.2.0
$ mkdir build
$ cd build
$ cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.2.0/modules -DWITH_CUDA=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release ..

Build

$ make -j8

It takes 15 ~ 20 minutes. And install,

$ sudo make install

Check installations

$ opencv_version 
4.2.0

$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2
<module 'cv2' from '/usr/local/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so'>
>>> 

Done.

Advertisements

Install Tensorflow with GPU support

Reference: https://www.tensorflow.org/install/gpu

  • Install CUDA 10.1 with GPU Driver
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt-get update
$ sudo apt install cuda
$ sudo apt install cuda-10-1
  • Install cuDNN
$ sudo apt install libcudnn7-dev
  • Install TensorRT
$ sudo apt install libnvinfer-dev=6.0.1-1+cuda10.1 libnvinfer6=6.0.1-1+cuda10.1 libnvinfer-plugin6=6.0.1-1+cuda10.1
  • Install python3-pip and update
$ sudo apt install python3-pip
$ sudo pip3 install -U pip
  • Install Tensorflow
$ sudo pip3 install -U tensorflow-gpu
$ sudo pip3 install -U launchpadlib

Check the installation

$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02)                                                                                                                                                                                         
[GCC 8.3.0] on linux                                                                                                                                                                                                                  
Type "help", "copyright", "credits" or "license" for more information.                                                                                                                                                                
>>> import tensorflow as tf                                                                                                                                                                                                           
2020-01-17 00:54:07.956548: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6                                                                                       
2020-01-17 00:54:07.957808: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
>>>
>>> tf.config.list_physical_devices('GPU')
2020-01-17 01:06:54.209819: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-01-17 01:06:54.244560: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.244971: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:68:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.76GiB deviceMemoryBandwidth: 573.69GiB/s
2020-01-17 01:06:54.245001: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-01-17 01:06:54.245027: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-01-17 01:06:54.246771: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-01-17 01:06:54.247101: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-01-17 01:06:54.248591: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-01-17 01:06:54.249448: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-01-17 01:06:54.249496: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-01-17 01:06:54.249579: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.249978: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.250314: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

Done.

PyQt and HiDPi Scaling

ROS1 관련 도구들 (rqt 시리즈, rviz 등)은 Qt 특히 PyQt를 사용하여 만들어졌는데, 일반 상황에선 괜찮으나, 4k 모니터 등 고해상도 모니터에서 HiDPi 설정을 켠 경우에 레이아웃이 깨지는 경우가 발생한다.

폰트 크기는 정상적이지만, 버튼 등 나머지 레이아웃은 그렇지 않음으로 인해, 이상하게 보인다.

간단히 환경변수를 셋팅함으로서 이 문제는 해결이 된다.

$ export QT_AUTO_SCREEN_SCALE_FACTOR=1

위와 같이 실행한 후, 다시 rviz 등을 실행해 보면,

UI의 비율 및 크기가 잘 맞춰져 있음을 볼 수 있다. 터미널을 실행할 때마다 설정되어야 하므로, .bashrc 등 사용자의 환경변수 설정 파일에 추가하면 편리하게 사용이 가능하다.

$ echo "export QT_AUTO_SCREEN_SCALE_FACTOR=1" >> ~/.bashrc

끝!

추가.

Qt 관련 환경 변수 중, 위와 비슷한 QT_SCALE_FACTOR도 있는데, 이는 폰트 크기를 포함한 모든 UI 컴포넌트를 조정한다. 또한 QT_SCREEN_SCALE_FACTORS 도 있는데, 이는 QT_AUTO_SCREEN_SCALE_FACTOR와 유사하게 동작하고, 사용자가 Scale Factor를 임의로 조정할 수 있다.

WordPress 옮기기 & AWS Lightsail 관련 설정

이전엔 DigitalOcean의 VPS에 LEMP (Nginx, MySQL, PHP)를 설치하고, 여기에 WordPress를 설치해서 사용하고 있었는데, 막상 사용하다보니 해외서버라서 그런지 좀 느렸다.Amazon Lightsail 역시 VPS로 아마존 서버를 사용하고, 서울에 있는 서버를 사용하니 꽤 빠르더라. 그리고 같은 가격에 DigitalOcean의 같은 가격대의 상품보단 쪼~~~~끔 더 나았고.

쓸데없는 삽질임에도 뭐… 연습 겸 ㅋㅋㅋ WordPress 서버 이전!!

Lightsail에 인스턴스를 하나 생성하고, 기본적인 LEMP 환경을 구축한다. 참고 링크 (https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04)

그런 다음엔

  1. 기존 wordpress의 wp-content 폴더를 백업한다. (압축파일, 꽤 용량이 크다)
  2. 데이터베이스를 백업한다.
$ mysqldump -u {your_database_id} -p {your_database_name} > backup_mysql_db.sql
  1. 백업한 파일을 일단 로컬PC로 옮기고… (scp를 사용하면 편함)
  2. 이것을 Lightsail VPS로 옮겨준다.

새로운 서버에 WordPress를 설치하고 (새로 설치하는 것처럼), 데이터베이스와 사용자 환경은 기존 사용자와 같게 끔 설치한다.

다음으로,

  1. 백업한 wp-content 파일을 같은 디렉토리에서 압축을 풀어서 복구
  2. 백업한 데이터베이스를 다시 복구
$ mysql -u {your_database_id} -p {your_database_name} < backup_mysql_db.sql

이렇게 하면 일단은 완료.


Lightsail은 Static IP도 일단은 공짜로 제공.

DNS 관련해선 DNS zone를 생성해서 설정

그 다음 Firewall은 서버 내부에서도 설정가능하지만, 외부도 해줘야 함. (서버 인스턴스에서 설정) 요걸로 좀 많이 삽질함.

이렇게 하면 끝!

iCloud Drive 강제 동기화 하기

맥북, 아이패드, 아이폰 등에서 파일 및 데이터를 공유하여 사용하기 위해서 iCloud Drive를 사용 중입니다. 요 근래 맥북에 업데이트되는 과정에서 iCloud Drive의 데이터가 동기화되지 않거나, 특정 프로그램에서 링크가 깨지는 등의 증상이 나타나서 해결책을 찾아보았습니다.

에러증상 #1

“documents” can’t be opened because the original item can’t be found

에러증상 #2

맥북의 iCloud Drive의 파일과 다른 기기와의 파일 리스트가 서로 다름

이를 해결하기 위해선,

먼저 ~/Library/Application Support/CloudDocs 폴더를 지운다. 그리고, bird, cloudd 프로세스를 중지한다.

$ rm -rf ~/Library/Application Support/CloudDocs
$ killall bird
$ killall cloudd

이렇게 되면, iCloud Drive의 리스트가 업데이트 되고, 다시 재동기화하는 과정을 진행한다.

끝.