본문 바로가기
STUDY/YOLO

ubuntu 프젝과정 최종정리

by brown_board 2022. 6. 6.
728x90

1. 가상환경구축

https://www.anaconda.com/products/individual

 

Anaconda | Anaconda Distribution

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

다운로드를 합니다.

anaconda 파일 생성 후 다운받은 파일을 넣어줍니다.

$ sha256sum Anaconda3-2022.05-Linux-x86_64.sh 입력 (무결성 체크)

https://docs.anaconda.com/anaconda/install/hashes/all/

위에서 나온 코드가 웹사이트의 해시코드와 동일한지 비교합니다. 문제가 없다면 다음으로 진행합니다.

$ bash Anaconda3-2021.11-Linux-x86_64.sh 입력 (설치명령어)

anaconda prompt를 사용하기 위해 아래의 작업을 해줘야 한다.
$ sudo gedit ~/.bashrc

텍스트 편집기가 열리면 "export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH"를 마지막 줄에 추가해준 후 저장한다.

$ source ~/.bashrc를 입력해주면 아나콘다 프롬프트가 열리게 되면서 앞에 (base)가 붙는다. $ conda -V를 입력하면 아나콘다 버전을 알 수 있다.

이와 같은 anaconda prompt가 실행되는 것을 확인할 수 있다.

python 3.7을 쓰는 가상환경을 만들자. 가상환경 이름은 yolov4라고 했다.

$ conda create -n yolov4 python=3.7

그리고 $ conda activate yolov4를 해주면 가상환경이 활성화된다.

다음 내용은 모두 가상환경에서 실행한 것입니다.

2. easyocr 설치

기존에 설치된 패키지를 업그레이드합니다. 

$ sudo apt-get update

$ sudo apt-get upgrade

 

python3버전에 pip설치를 위해 다음을 입력합니다.

$ sudo apt-get install python3-pip

 

easyOCR설치를 위해 다음을 입력합니다.

$ pip3 install easyocr

테스트를 위해 zip파일도 다운받았습니다.

https://github.com/JaidedAI/EasyOCR

#테스트 코드#

import easyocr

reader=easyocr.Reader(['ko','en'],gpu=False)
result=reader.readtext("/home/ai/EasyOCR-master/examples/korean.png")

print(result)

3. opencv삭제

나중에 opencv설치할 때 상위 버전이 있으면 새로 설치해도 상위버전이 인식되었다. 그래서 easyocr설치할 때 설치되었던 opencv 관련 파일을 전부 삭제합니다.

$ find / -name "opencv*"  > out
$ less out

위 경로에서 아래 2개의 폴더경로로 이동해서 opencv_python_headless만 삭제합니다. (만약 가상환경이 아니라 base에서 설치되었다면 /.local경로로 설치될텐데 이때 삭제하는 방법은 아직 잘 모르겠다)

4.cmake 업그레이드

cmake 버전확인

$ cmake --version

기존 cmake 삭제

$ sudo apt purge cmake

2) 최신 버전의 cmake 다운로드

https://cmake.org/download/

에 접속해서 https://cmake.org/files/v3.23/ 로 접속한 뒤에

cmake-3.23.0-rc1.tar.gz를 다운로드 했습니다. (참고했던 블로그랑 동일하게 실행하기 위함)

그 후 아래의 명령어로 압축 해제를 합니다.

$ tar -xvzf cmake-3.23.0-rc1.tar.gz

압축 해제가 완료되면 필요한 패키지를 아래의 명령어로 설치합니다.

$ sudo apt install qt5-default
$ sudo apt-get install build-essential
$ sudo apt install libssl-dev

그 후 cmake 파일이 있는 경로로 이동한 후 $ ./bootstrap을 입력해서 bootstrap 파일을 실행합니다.

bootstrap 파일이 정상적으로 실행되면 아래의 명령어를 입력합니다.

$ time make
$ sudo make install

$ /usr/local/bin/cmake --version을 입력하면 cmake 버전이 잘 출력됩니다.


시스템 전역에서 사용할 수 있도록 ~/.bashrc파일에 path를 추가합니다.
$ gedit ~/.bashrc를 입력해서 파일을 열고 export PATH=$PATH:/usr/local/bin/을 추가해준 후 $ source ~/.bashrc를 해주면 된다. (source하면 가상환경이 풀리므로 다시 conda activate yolov4)

echo $PATH 를 입력하면 PATH변수에 설정한 경로들이 나온다. 앞서 아나콘다를 깔때 PATH입력한 내용과 같이 출력됩니다.

5. 그래픽 카드 드라이버 설치

$ ubuntu-drivers devices

470을 recommended 하고 있으므로 470설치합니다.

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt-get install nvidia-driver-470

비밀번호 8자리를 설정합니다.

$ sudo reboot

그러면 위와 같은 화면이 나옵니다.
Enroll MOK -> View Key 0 -> ESC 클릭 -> Continue -> password: 아까 설정한 비밀번호 -> OK -> reboot

$nvidia-smi

470 드라이버설치된것과 동시에 cuda 11.4가 설치 됩니다.

 

6. cuda-10.2 설치

기존 cuda삭제

$ sudo apt-get --purge remove "*cublas*" "cuda*"
$ sudo autoremover
$ reboot

했는데 

음... 제거되는 게 없다고 뜨는 데 nvidia-smi를 입력했을 때 cuda는 11.4버전이다.
$ find / -name "cuda*"  > out
$ less out
로 찾아봐도 11.4버전은 안보인다. 그래서 그냥 재설치하였습니다.

https://developer.nvidia.com/cuda-toolkit-archive

 

CUDA Toolkit Archive

Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production

developer.nvidia.com

공식 사이트에 접속합니다.

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
$ sudo apt-get update

명령어 중에 맨 마지막 줄 빼고 입력합니다.

# CUDA 10.2 설치 (명령어 중 맨 마지막 줄은 cuda-10-2를 꼭 붙여야함 아니면 여러개 설치되는 걸로 알고 있습니다)
$ sudo apt-get -y install cuda-10-2

$ sudo gedit ~/.bashrc

가장 아래에 다음을 추가

export PATH=$PATH:/usr/local/cuda-10.2/bin
export CUDADIR=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib64

값만 넣지말고 실제로 경로에 들어가 파일명 맞는지 확인합니다. cuda-10.2버전이 아니라면 버전명과 폴더명이 다를 수도 있습니다.

$ sudo reboot
$ nvidia-smi

위와 같이 cuda버전이 10.2가 된 것을 확인할 수 있습니다.
이제와서 보니깐 드라이버 440을 깔아야 RTX 2060 SUPER를 제대로 인식하는 것 같다. 처음 알았네

7. cudnn 8.0.3 설치

https://developer.nvidia.com/cudnn

 

CUDA Deep Neural Network

cuDNN provides researchers and developers with high-performance GPU acceleration.

developer.nvidia.com

공식 다운로드 사이트에 접속하고 로그인을 합니다.

 

위의 파일을 다운 받고 압축을 해제합니다.
tar -xvf cudnn-10.2-linux-x64-v8.0.3.33.tgz
 

cuDNN header 파일들을  local/cuda/cuda-10.2/include 폴더에 붙여 넣어주는 명령어입니다.

sudo cp ./cuda/include/* /usr/local/cuda-10.2/include

 

 

cuDNN Library 파일들을  local/cuda/cuda-10.2/include 폴더에 붙여 넣어주는 명령어입니다.

sudo cp -P ./cuda/lib64/* /usr/local/cuda-10.2/lib64

 

 

라이브러리 실행 권한을 부여합니다.

 

sudo chmod a+r /usr/local/cuda-10.2/lib64/libcudnn*

 

cudnn 버전을 확인합니다.

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

8.0.3버전에 맞게 표시가 됩니다.

8. opencv 4.5.1 빌드

기존 버전 확인

pkg-config --modversion opencv

삭제 명령어
$ sudo apt-get purge libopencv* python-opencv
$ sudo apt-get autoremove
$ sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \;
패키지 업데이트
$ sudo apt-get update
$ sudo apt-get upgrade
opencv 관련 패키지

  • build-essential: C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함
  • cmake: 컴파일 옵션이나 빌드된 라이브러리에 포함시킬 OpenCV 모듈 설정 등을 위해 필요 (나는 앞에서 미리 깔아서 이건 안했음)
  • pkg-config: 프로그램 컴파일 및 링크시 필요한 라이브러리에 대한 정보를 메타파일(확장자가 .pc 인 파일)로부터 가져오는데 사용됨. 터미널에서 특정 라이브러리를 사용한 소스코드를 컴파일시 필요한 컴파일러 및 링커 플래그를 추가하는데 도움이 됨.
  • libjpeg-dev, libtiff5-dev, libpng-dev : 특정 포맷의 이미지 파일을 불러오거나 기록하기 위해 필요
  • libavcodec-dev, libavformat-dev, libswscale-dev, libxvidcore-dev, libx264-dev, libxine2-dev: 특정 코덱의 비디오 파일을 읽어오거나 기록하기 위해 필요
  • libv4l-dev, v4l-utils: Video4Linux 패키지는 리눅스에서 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API 포함
  • libgstreamer1.0-dev, libgstreamer-plugins-base1.0-dev: 비디오 스트리밍을 위한 라이브러리
  • libgtk2.0-dev: highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오를 보여줄 수 있음. 윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용 가능. 여기서는 gtk2를 지정함 (다른 가능한 패키지: libgtk-3-dev, libqt4-dev, libqt5-dev)
    3.2.0
  • mesa-utils, libgl1-mesa-dri, libgtkgl2.0-dev, libgtkglext1-dev: OpenGL 지원하기 위해 필요
  • libatlas-base-dev, gfortran, libeigen3-dev: OpenCV 최적화하기 위해 필요
  • python2.7-dev, python3-dev: OpenCV-Python 바인딩 위해 필요
  • python-numpy, python3-numpy: numpy는 매트릭스 연산 등을 빠르게 처리 가능

########$ sudo apt-get install build-essential cmake (#이거는 앞에서 cmake 깔아서 안함.)
$ sudo apt-get install pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgtk2.0-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy

이제 opencv를 빌드하자.
먼저 디렉터리를 생성한다.

$ mkdir opencv
$ cd opencv

그 후 opencv와 opencv-contrib를 다운받는다.

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip

$ unzip opencv.zip

 $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip

$ unzip opencv_contrib.zip

다음으로 opencv 디렉터리 안으로 이동해서 빌드할 디렉터리 생성.

$ cd opencv-4.5.1
$ mkdir build
$ cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_ENABLE_NONFREE=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-4.5.1/modules \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D BUILD_DOCS=OFF \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python3) \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \

-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=ON \
-D WITH_CUDNN=ON \
-D CUDNN_LIBRARY=/usr/local/cuda-10.2/lib64/libcudnn.so.8.0.3 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda-10.2/include \
-D CUDA_FAST_MATH=1 \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \
-D CUDA_ARCH_PTX=7.5 \
-D WITH_VTK=ON \
-D WITH_OPENCL=ON \
-D OPENCV_SKIP_PYTHON_LOADER=ON \
-D PYTHON_EXECUTABLE=~/anaconda3/envs/yolov8/bin/python3 \
-D PYTHON3_INCLUDE_DIR=~/anaconda3/envs/yolov8/include/python3.7m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=~/anaconda3/envs/yolov8/lib/python3.7/site-packages/numpy/core/include \
-D PYTHON3_PACKAGES_PATH=~/anaconda3/envs/yolov8/lib/python3.7/site-packages \
-D PYTHON3_LIBRARY=~/anaconda3/envs/yolov8/lib/libpython3.7m.so \
-D PYTHON_LIBRARIES=~/anaconda3/envs/yolov8/lib/python3.7 ../

-D PYTHON_DEFAULT_EXECUTABLE=$(which python3) 이거는 python(for build) 메뉴가 python2로 설정되어 있어서 입력해주었다.

이러니깐 
-- Configuring done
-- Generating done
-- Build files have been written to: 각자의 경로
이렇게 되었는데 -- Configuring done ㅇ여기 밑에 opecv 패키지와 anaconda의 패키지랑 버전이 달라 waring이 떴다. 검색해봤는데  환경변수 설정에서 anaconda 관련 변수를 다 없애라는 거였다. 20분정도 환경변수도 건들여보고 그랬는데 해결이 안되서 그냥 BUILD하고 실행이 안되면 다시 오류고치기로 하고 그냥 MAKE했다.$ time make -j4
(easyocr을 맨나중에 설치하고 opencv부터 빌드하면 해결됨)

$ sudo make install
$ cat /etc/ld.so.conf.d/*
를 입력해서 /usr/local/lib가 있는지 확인한다. 있으면 $ sudo ldconfig를 해주면 완료입니다.

테스트를 해보니 opencv를 작동시킬 때 cuda와 연동해서 작동이 된다. 그런데 fps는 그대로다. 왜인지 이유를 알기 위해 일주일간 밤새면서 여러가지 테스트를 해보았으나 해결하지 못했다. 연구실 선배님이 말씀하시기로는 dnn에서 하드웨어 출력 가속하는데서 문제가 생긴거 같다고 말씀해주셨다. 결국 cmake옵션중에 뭔가가 이상하다는 말씀이시다. 경로지정이라던가 옵션on,off문제인거 같다. 그래도 아무리 많은 테스트를 해보고 블로그를 찾아봐도 해결되지 않았다. 지금은 시간이 없어서 이까지만 하기로 하고 

yolov8가상환경에서 easyocr을 설치했다.
github에서 zip파일을 받은 다음 easyocr의 requirment.txt의 패키지를 설치해주었다. 여기서 핵심은 opencv-contrib-headless패키지를 제외하고 설치해야한다. 왜냐하면 이미 opencv를 빌드를 했기 때문에 필요가 없다. 만약에 이것도 빌드를 하게된다면 상위 버전으로 설치되기 때문에 어차피 다시 삭제해야한다.

$ pip3 install -r requirements.txt

 그러면 easyocr이 작동이 잘된다. 이제 ros를 깔아보자.

8. ubuntu 18.04 ros melodic 설치

https://brownboard.tistory.com/20

저번에 정리해둔게 있다.

1) Setup your sources.list

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2) Set up your keys

$ sudo apt install curl
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

3) ROS 설치

$ sudo apt update
$ sudo apt install ros-melodic-desktop-full

4) Environment setup

$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

5) Dependencies for building packages

$ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
$ sudo apt install python-rosdep
$ sudo rosdep init
$ rosdep update

9.node 테스트

https://robertchoi.gitbook.io/ros/install

 

 

참고블로그

https://velog.io/@bbirong/Ubuntu-18.04%EC%97%90-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EC%84%A4%EC%B9%98

https://romillion.tistory.com/69

 

 

728x90

'STUDY > YOLO' 카테고리의 다른 글

gpu설치  (0) 2023.01.05
우분투 opencv 정리  (0) 2022.06.04
ubuntu에서 살아남기 yolo_cuda편  (0) 2022.05.30
우분투 그래픽드라이버 cuda cudnn  (0) 2022.05.28
우분투 yolo 환경구축  (0) 2022.05.28

댓글