2023년 8월 10일

코딩 - M1 환경에서 OpenCV 설치하기

◼︎ 환경
  • Model : MacBook Pro (14-inch, 2021)
  • CPU : Apple M1 Pro
  • MENORY : 16GB
  • DISK : 512 GB SSD
  • OS : macOS 13.2.4 (22F66)
  • TOOLS : Visual Studio Code, Java 11, Gradle, Docker
  • Version Control : GitHub
  • Programming Language : Java
  • Framework : Spring Boot 2.7.12
  • DBMS : MySql 8.0.33

M1 환경에서 OpenCV 을 컴파일하고 설치하는 것은 아래와 같은 순서로 진행한다.
  • Step 1: Homebrew and Xcode Command Line Tools Installation
  • Step 2: Install Miniforge
  • Step 3: Create a virtual environment with python3.8
  • Step 4: Install necessary dependencies
  • Step 5: Compile and Build OpenCV
 

Step 1: Homebrew and Xcode Command Line Tools Installation

❶ 다음 명령을 터미널에서 입력하여 brew 설치 여부를 확인한다.

brew --version

설치되어 있지 않는 경우 다음 명령을 터미널에 붙여넣기하여 설치를 진행한다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


❷ brew 가 준비되면 wget (다운로드 유틸리티) , cmake (크로스 플랫폼 빌드 도구) 를 설치한다.

brew install wget cmake 


❸ 맥에서 지원하는 XCode Command Line 도구를 설치한다.

xcode-select --install


Step2: Install Miniforge

Miniforge는 가상 환경에서 Python 패키지 관리를 지원하는 Conda 설치을 위한 프로그램을 제공하고 있다. miniforge GitHub 에서 arm64(Apple Silicon) 용 버전을 설치한다. 




❶ 스크립트를 다운로드 하고 아래와 같이 bash 명령을 사용하여 터미널에서 설치를 진행한다.

bash Miniforge3-MacOSX-arm64.sh




❷ 설치가 완료되면 가이드에 따라 Conda 에서 제공하는 디폴트 환경을 비활성화 한다. 

conda config --set auto_activate_base false


Step3: Create a virtual environment with python3.8

❶ testcv 이름으로 python 3.8 버전의 가상 환경을 생성한다.

conda create --name testcv python=3.8

% conda create --name testcv python=3.8

Collecting package metadata (current_repodata.json): done

Solving environment: done



==> WARNING: A newer version of conda exists. <==

  current version: 23.1.0

  latest version: 23.7.2


Please update conda by running


    $ conda update -n base -c conda-forge conda


Or to minimize the number of packages updated during conda update use


     conda install conda=23.7.2




## Package Plan ##


  environment location: /miniforge3/envs/testcv


  added / updated specs:

    - python=3.8



The following packages will be downloaded:


    package                    |            build

    ---------------------------|-----------------

    ca-certificates-2023.7.22  |       hf0a4a13_0         146 KB  conda-forge

    openssl-3.1.2              |       h53f4e23_0         2.1 MB  conda-forge

    pip-23.2.1                 |     pyhd8ed1ab_0         1.3 MB  conda-forge

    python-3.8.17              |h3ba56d0_0_cpython        13.1 MB  conda-forge

    wheel-0.41.1               |     pyhd8ed1ab_0          56 KB  conda-forge

    ------------------------------------------------------------

                                           Total:        16.8 MB


The following NEW packages will be INSTALLED:


  bzip2              conda-forge/osx-arm64::bzip2-1.0.8-h3422bc3_4 

  ca-certificates    conda-forge/osx-arm64::ca-certificates-2023.7.22-hf0a4a13_0 

  libffi             conda-forge/osx-arm64::libffi-3.4.2-h3422bc3_5 

  libsqlite          conda-forge/osx-arm64::libsqlite-3.42.0-hb31c410_0 

  libzlib            conda-forge/osx-arm64::libzlib-1.2.13-h53f4e23_5 

  ncurses            conda-forge/osx-arm64::ncurses-6.4-h7ea286d_0 

  openssl            conda-forge/osx-arm64::openssl-3.1.2-h53f4e23_0 

  pip                conda-forge/noarch::pip-23.2.1-pyhd8ed1ab_0 

  python             conda-forge/osx-arm64::python-3.8.17-h3ba56d0_0_cpython 

  readline           conda-forge/osx-arm64::readline-8.2-h92ec313_1 

  setuptools         conda-forge/noarch::setuptools-68.0.0-pyhd8ed1ab_0 

  tk                 conda-forge/osx-arm64::tk-8.6.12-he1e0b03_0 

  wheel              conda-forge/noarch::wheel-0.41.1-pyhd8ed1ab_0 

  xz                 conda-forge/osx-arm64::xz-5.2.6-h57fd34a_0 



Proceed ([y]/n)? 



❷ 가상환경 생성이 완료되면 생성시 사용한 이름을 사용하여 가상환경을 활성화 한다.

conda activate testcv


info 옵션을 사용하여 활성화된 가상환경을 확인할 수 있다.

conda info 


Step4: Install necessary dependencies

OpenCV를 설치하려면 Apple에서 M1용으로 제공하는 호환 가능한 버전의 Numpy를 설치해야 한다. 
터미널에서 다음 명령을 실행하여 Numpy 및 기타 종속 요소를 설치한다.

conda install -c apple tensorflow-deps

Step5: Compile and Build OpenCV

❶ OpenCV 와 OpenCV Contrib 소스를 먼저 다운로드 한다. (여기에서는 opencv 폴더를 생성하고 다우로드 및 빌드 작업을 진행했다.)

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

❷ 다운로드한 소스 압축을 푼다.

unzip opencv.zip && unzip opencv_contrib.zip

❸ opencv 소스 폴더에 build 폴더를 생성하고 이동한다.

cd opencv-4.8.0/
mkdir build && cd build


❹ cmake 을 실행하여 소스를 빌드한다.  실행 옵션은 아래와 같다.




Cmake 를 실행하면 아래와 같은 화면이 보여진다. 컴파일에는 그리 많은 시간이 소요되지 않는다.



❺ make 명령 사용 CMake가 생성한 Makefile을 기반으로 빌드 실행한다. 여기서 M1 맥의 경우 8코어 CPU 이기 때문에 j8은 옵션을 사용하여 make를 실행했다. 

make -j8


make 과정에서  다양한 어려움이 발생되었다. 

⑴ No rule to make target 'zlib'. 

make[2]: *** No rule to make target `zlib', needed by `lib/libopencv_imgcodecs.4.8.0.dylib'.  Stop


zlib 을 설치하였지만 문제가 해결되지 않았다

brew install zlib

brew 때문에 발생하는 것이라는 글이 있어 삭제 후 다시 설치 해보았으나 문제가 해결되지 않았다.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install wget cmake 


⑵ fatal error: 'ft2build.h' file not found


텍스트 렌터링 오픈 소스 halfbuzz 를 설치.

brew install halfbuzz 

설치 결과물을 보면 java 부분이 누락되었는데 확인을 위하여 cmake 결과를 확인해보니 java 부분 설정이 일반적이지 않는 것을 확인했다.



아래 명령을 입력하여 설치된 자바 경로를 확인하였다.

/usr/libexec/java_home --verbose

확인 된 자바 위치 정보를 사용하여 JAVA_HOME, JRE_HOME 경로를 설정해준다.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
export JRE_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home


누락된 ant 빌드 도구를 설치하였다.

brew install ant 

여기에서는  M1 을 지원하는 자바 버전 설치를 위하여 https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html  방문하여 맥용 (macOS aarch64) 설치파일을 다운로드 하여 설치하였다. 

% /usr/libexec/java_home --verbose

Matching Java Virtual Machines (2):

    17.0.8 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home

    11.0.11 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home


export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
export JRE_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home

다시 cmake 를 실행하면 JAVA 항목은 NO 로 표기되고 있지만 정상적으로 빌드가 된다. 


make -j8
sudo make install

/usr/loca/share/java/opencv 경로에 자바 라이브러리가 생성됨을 확인

댓글 없음:

댓글 쓰기