0. 프롤로그
       필자는 지인의 부탁으로 Jetson Nano를 이용하여 Video Streamer를 만들어보고자 한다.  처음에는 단순 영상 스트리머가 될 것이며, 향후에는 이것저것 A.I 요소를 붙이는 목적으로 사용될 수 있을 거라 생각한다. 

      OpenCV를 포팅하기 위해 가이드가 있음에도 빌드시 오류를 만나서 이틀이라는 귀한 퇴근이후 시간을 빼앗겼다. 그리고 여러가지 시행착오 (딱히 필자 잘못은 아님)를 마치고 정상적으로 import(load, incluse등등..) 되는 것을 확인 하였다. 이후에는 뭐 이런저런 opencv 예제를 만드는데 써야되니까.

      필자가 CUDA를 포함한 이유는 당연히 일반적인 영상이아닌 yolo라던지 기타등등 기능을 포함해야되는 요청이 있었기 때문이며, 현재로서는 Jet Pack 4.5.1과 Opencv 4.5.2 컴비네이션으로 설정을 완료하고 기록을 남긴다. 

      필요한 독자가 있으면 참고하기 바란다. 물론, 필자도 외국의 사이트의 가이드를 보고 진행하였다는 것을 먼저 알려둔다. 해당 사이트는 본게시물 말미에 별도로 표기하였다.


    1. OpenCV 설치전에...
       본 블로그에 jetpack 4.5.1을 설치하는 방법이 작성되어있으니 참고하여 준비한다. 필자가 4.5.1을 선택한 이유는 Jetpack 4.6(Opencv 빌드시 오류발생), 4.5(부팅안됨), 4.4.1(업데이트하고 난다음 먹통) 이후 마지막으로 4.5.1을 선택하였다. 그 사이 oepncv 버전도 에러 현상의 원인을 찾기 위해 어려버전을 테스트 하였지만, 기존에 썼던 opencv 버전으로 진행하였다. 버전별로 큰 차이는 없다고 하니, 독자들께서는 원하시는 버전으로 해보시길 바란다. 

    1.1. 기존 OpenCV 제거
      우선 기존에 설치되어있는 OpenCV를 살제하도록 하자. 본 블로그 게시물의 Jetson State를 실행하면, 6번 메뉴에서 기본 설치된 OpenCV 버전이 표시되며, CUDA를 사용하지 않는다고 되어있다. 독자들도 앞으로 영상에 기반한 AI관련 추론결과를 이용 하려면 CUDA를 이용하는 OpenCV를 써야 한다. 따라서 기존에 디폴트로 설치된 opencv는 삭제하도록 하자. 

    1) Jetson에 설치되어있는 opencv 라이브러리로 추정할 수 있는 모든 라이브러를 삭제
       $ sudo apt-get remove libopencv*

    2) 관련(의존)된 항목들도 있으면 같이 제거될 수 있도록 처리
       $ sudo apt-get autoremove

    3) 혹시 남아있는 찌꺼기들이 있다면 제거
        $ sudo find /usr/local/ -name "*opencv*" -exec rm {} \;


    1.2. 추가가 필요한 패키지 설치
      기존에 개발관련된 라이브러리를 추가해서 개발을 하고 있었다면 큰 문제가 없겠지만, 처음 부터 opencv를 변경하려는 독자들은 시스템을 사용하거나 빌드를 하기 위한 몇가지 도구를 다운로드 받아야 한다.

      $ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev v4l-utils  libxvidcore-dev libx264-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk-3-dev mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev libatlas-base-dev gfortran libeigen3-dev



    1.3. 편집도구 설치
     xwindow의 gedit를 사용해도 되고, 터미널이 더 편한경우 nano 또는 vim을 설치한다. 

    1) nano 설치
      터미널의 텍스트 에디터 환경이 아직 거슬린다면..
      $ sudo apt-get install nano

    2) vim 설치
      조-금 전문가 스럽게 보이고 싶다면..
      $ sudo apt-get install nano

    여기까지는 개발용 보드의 기본적인 설치는 완료되었다. 다음으로는 OpenCV를 설치한다.

     


    2. OpenCV with CUDA 설치
    2.1. OpenCV 설치를 위한 설정 변경
    1) 저장소 업데이트 
      필자는 업그레이드를 추천하지 않는다. 업데이트까지 해주는 선에서... 
      $ sudo apt-get update

    2) 패키지 업그레이드 
      아래의 업그레이드를 해볼 독자들은 해도 좋다. 필자는 일단 추천하지 않는다.
      $ sudo apt-get upgrade

     


     2.2. 스왑 메모리 설정
      스왑(swap)메모리는 windows에서는 가상메모리라고 불리는 녀석이다. 물리적인 메모리가 부족한 경우 부족한 부분을 저장장치의 일부 영역을 이용하여 사용한다. OpenCV를 빌드할 때 많은 메모리를 요구하기 때문에 멀티 코어를 이용하여 빌드하는경우 메모리 부족현상에 빠질 수 있고, 이는 빌드 중단이라는 치명적인 결과를 가져오기도 한다. 그렇다고 싱클 코어로 빌드하면 시간이 엄청나게 걸릴 수 밖에 없을 테니, 빌드를 위해서 Swap 메모리를 지정한다. 

      젯슨나노에는 기본적으로 2GB의 스왑메모리를 사용하고 있는데, 추가로 4GB를 더해서 약 6GB정도로 설정해 둔다.  swap메모리를 만드는 방법은 몇가지가 있는데, dd와 swapon을 이용하여 설정하고 fstab 파일을 이용해서 만들기도한다. 여기에서는 dphys-swapfile을 이용하는 방식으로 생성한다.

    1) 관련 패키지 설치
      $ sudo apt-get install dphys-swapfile

    2) 설정파일을 수정한다.
      $ sudo nano /sbin/dphys-swapfile
      $ sudo nano /etc/dphys-swapfile

      위의 두 파일 모두 아래의 설정과 동일하게 설정(일부 주석처리 되어있음)하고 해당 라인의 맨 앞에 주석(#)으로 처리되어있다면 주석정의 문(#)을 삭제하고 저장한다. 
      CONF_SWAPSIZE=4096
      CONF_SWAPFACTOR=2
      CONF_MAXSWAP=4096

    3) 설정이 완료되었으면 적용을 위해 리부팅
      $ sudo reboot

      리부팅 후, top 또는 free -m 명령을 이용하여 설정된 스왑 메모리 크기를 확인해 보자.  정상적으로 설정 되었다면 6074 MB로 표시된다.


    2.3. OpenCV 설치 (스크립트 이용)
      OpenCV를 설치하는 방법은 아래의 링크에 표시되어있다. JetPack 4.5.1에서 테스트 해보니 약간 군더더기는 있지만 정상적으로 빌드됨을 확인하였다. 

       https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html

    1) 스크립트 다운로드
      아래의 경로에서 빌드스크립트를 다운로드 한다. 그리고 실행 가능하도록 소유권 조정을 해주자. 작업의 공통성을 위해서 사용하 홈디렉터리에 다운로드 후 실행한다.
      $ cd ~
      $ wget https://github.com/Qengineering/Install-OpenCV-Jetson-Nano/raw/main/OpenCV-4-5-2.sh
      $ sudo chmod 755 ./OpenCV-4-5-5.sh

    2) 스크립트 실행
      빌드 스크립트를 실행한다. 특정 파일 삭제 오류가 표시되는데 무시해도 된다. 무시가 하기가 어려운 독자는 해당 메시지를 보고 스크립트를 열어서 진행 상태를 봐도 되고, 스크립트를 열어서 에디터에 붙힌다음 하나씩 실행 해 봐도 된다.
      $ ./OpenCV-4-5-2.sh

    3) 스크립트 삭제
      $ rm OpenCV-4-5-5.sh

    4) 스왑메모리 삭제

      OpenCV를 빌드할 때 이외에 큰 메모리가 필요하지 않으니 스왑메모리는 이제 삭제하면 되겠다.
      $ sudo /etc/init.d/dphys-swapfile stop
      $ sudo apt-get remove --purge dphys-swapfile

    5) 저장 메모리 공간 확보
      사이즈가 큰 MicroSD카드를 사용하지 않는다면, 소스는 이제 필요없으니 삭제하도록 한다. 
      $ sudo rm -rf ~/opencv
      $ sudo rm -rf ~/opencv_contrib

    * 주의 : 혹시 동일한 패키지가 필요한 상황이 발생될 수 도 있으므로, 빌드에 성공하였다면 지금까지 작업한 모든 파일들은 별도로 보관하는 것을 추천한다.  간혹 JetPack이나 패키지 버전이 업그레이드되어 문제되는 경우가 있을수 있으니 말이다. 아니면 dd로 SD메모리를 덤프해 두던가..


    3. 테스트
      설치가 완료되었다면 이제 테스트를 해보면 된다.  테스트에는 파이선을 사한다. 
    1) 실행
      $ python3

    2) 입력할 내용
      opencv를 import하여 opencv 버전을 출력한다. 

     

    >>> import cv2
    >> cv2.__version__
    '4.5.2'
    >> exit()

    정상적으로 설치되었다면 '4.5.2'와 같은 형식으로 opencv 버전이 출력된다. 

    4. 에필로그

      앞서 언급한바와 같이 필자는 Jetpack 4.5.1을 이용하였고, 업그레이드는 안했고 OpenCV는 4.5.2를 이용하여 설치하였다. JetPack 버전의 문제로 초반에 시간을 너무 소비했다. 시간이 지나면 최신 버전에서도 사용상 문제가 발생되지 않을테니 먼저 최신버전으로 진행하고 잘 되지 않으면 참고하기 바란다.  OpenCV 버전은 지인이 사용하는 버전이라하여 4.5.2를 사용했지만, 이후 버전을 사용하더라도 큰 차이는 없을거라 생각된다. 

     

    ... 이상 Jetson에 OpenCV(CUDA) 설치..

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기