검색

레이블이 OpenCV인 게시물을 표시합니다. 모든 게시물 표시
레이블이 OpenCV인 게시물을 표시합니다. 모든 게시물 표시

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 경로에 자바 라이브러리가 생성됨을 확인

2022년 3월 18일

자바 환경에서 OpenCV 를 이용한 이미지 필터 구현하기

OpenCV 관련하여 많은 자료들이 Python 기준으로 되어 있어 자바에서 사용하는 부분에는 어려움이 있었다.

 ◼︎ 작업환경

  • Model : MacBook Pro (16-inch, 2019)
  • CPU : 2.3 GHz 8코어 Intel Core i9
  • GPU : AMD Radeon Pro 5500M 4 GB
  • MENORY : 16GB
  • DISK : 1TB SSD
  • OS : macOS Monterey 12.2.1
◼︎ 테스트 서버 
  • DEVICE : Oracle Cloud VM (Free)
  • OS : CentOS Linux release 7.9.2009 (Core) 
  • JAVA : OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12, mixed mode, sharing)
  • OpenCV : 4.5.5

프로그램은 간단하게 웹 브라우저에서 이미지를 업로드하면 서버(Tomcat) 는  요청하는 이미지 효과를 수행하고 결과 이미지를 리턴하는 방식이다. 


❶ 이미지가 업로드 되었다고 가정하고 이미지 아이디와 원하는 필터를 지정하여 요청한다.


❷ 이미지가 효과 서비스를 호출하여 이미지를 변환화고 변환된 이미지를 리턴한다.




다음은 비교적 큰 사이즈의 이미지(6.7MB)를 여러 필터로 변환하는 예시이다. 변환 테스트는 라스베리파이 4 와 오라클 클라우드 무료 VM 환경에서 진행해 보았는데 라스베리파이는 CPU 파워 부족 오라클 클라우드 VM 은 메모리 부족을 체감하였다.  

참고자료

  1. Creating Instagram like Filters With Opencv!
  2. Cartoon Effect on Image using Python and OpenCV

Ubuntu 20.04.4 LTS 환경에 OpenCV 설치하기

◼︎ 작업환경

  • Model : MacBook Pro (16-inch, 2019)
  • CPU : 2.3 GHz 8코어 Intel Core i9
  • GPU : AMD Radeon Pro 5500M 4 GB
  • MENORY : 16GB
  • DISK : 1TB SSD
  • OS : macOS Monterey 12.2.1
◼︎ 기기
  • DEVICE : Raspberry Pi 4 (4G RAM)
  • DISK : 128GB SD Card 
  • 모니터 암에 고정하여 사용


1.자바 설치하기

자바 환경에서 실해아는 것이 목적이기 때문에 먼저 최신 자바를 설치한다. (작업 당시에 자바버전은 11.013 이었다.)
  

sudo apt update
sudo apt install default-jdk

2. OpenCV 설치

먼저 컴파일을 위한 소프트웨어 패키지들을 설치한다. CentOS와는 차이가 있었다. 

sudo apt install cmake build-essential

다음 패키지들은 반듯이 설치가 필요한 것은 아니다. 

sudo apt-get install pkg-config

sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev

sudo apt-get install ffmpeg 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 


원하는 버전의 OpenCV 소스 파일을 다운로드 한다. 다운로드는 /home/pi 경로을 사용했다.

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

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


unzip 명령을 사용하여 압축을 풀고 빌드를 위하여 build 폴더를 생성한다음 build 경로로 이동한다.
  

unzip opencv.zip
unzip opencv_contrib.zip 
mkdir build
cd build


이제 cmake 명령을 실행하여 컴파일을 위한 설정을 수행한다.


컴파일을 위한 설정 과정에서 JAVA 을 인식하지 못하는 문제가 발생되었다.  이부분을 해결하는 과정에 어려움이 있었는데 아래와 같이계정 프로파일에  매뉴얼하게 경로를 지정해주는 방법으로 해결했다. 

이미 최신 자바 버전이 설치되었지만 호환성을 고려하여 JDK 1.8 과 ant 를 설치한다. 이는 cmake 실행 옵션에 자바 버전을 명시한 경우에 맥 환경에서는 동작하였지만 CentOS 환경에서는 효과가 없어 이번에도 컴파일시에는 1.8 자바를 사용하고 이후에 높은 버전의 자바로 변경하여 사용하였다. 
sudo apt install ant openjdk-8-jdk 

.profile 파일을 아래와 같이 수정하여 수동으로 홈 경로를 지정해준다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
export JRE_HOME=/usr/lib/jvm/java-8-openjdk-arm64/jre
export ANT_HOME=/usr/share/ant
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

다시 cmake를 실행한다. 이때 사용한 옵션은 아래와 같다.
 
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON  \
-D INSTALL_PYTHON_EXAMPLES=ON  \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_opencv_ximgproc=ON \
-D BUILD_SHARED_LIBS=OFF \
-D OPENCV_JAVA_TARGET_VERSION=1.8 \
-D BUILD_EXAMPLES=ON ../opencv-4.5.5

처음과는 다르게 JAVA 항목이 인식됨을 확인할 수 있다.



이제 빌드 및 설치를 진행한다. 컴파일 작업은 많은 시간이 소요되기 때문에 실행 후 다른 볼일을 보는 것이 좋을 것 같다. 프로세스 수를 2정도로 하고 실행을 했는데 nmon 도구를 사용하여 프로세스 사용량을 모니터링 해보면 옵션 값을 3 또는 4 을 적용해도 될 것 같다는 생각이 된다. 실재로 -j4 값을 주고 컴파일을 해보면 4개의 cc1plus 인스턴스가 96% 정도 CPU 자원을 사용하는 것으로 모니터링 된다.
 
make -j2
sudo make install
-j2 옵션을 사용한 경우


-j4 옵션을 사용한 경우
 

2021년 6월 19일

이미지/영상 프로세싱을 위하여 자바를 지원하는 환경으로 OpenCV 설치하기

자바 기반 웹 프로그램에 이미지/영상 프로세싱 처리를 구현하기 위하여 OpenCV (Open Source Computer Vision) 설치하려고 한다.

설치는 대상은 아래와 같다. 

Development
  • JAVA 1.8.x
  • Eclipse 4.17.0
  • Tomcat 8.x 
  • HW : MacBook Pro 2019 
    • macOS Big Sur 11.4
    • 2.3Ghz 8Core Intel Corei9 
    • 16GB 2667 Mhz DDR4
    • SSD 1TB 
Server 
  • Tomcat 8.5.58.0
  • Open JDK 1.8.0_292-b10
  • Oracle Cloud : VM.Standard.E2.1.Micro 
    • CentOS Linux release 7.9.2009 (Core)
    • 1 OCPU, 1GB MEMORY, 50GB Block Volume
    • 1Network 0.48 Gbps

맥북에 설치하기

설치는 Homebrew 을 사용한다. (Homebrew 는 이미 설치된것으로 가정)


그림1. The Missing Package Manager for macOS (or Linux)


① XCode & Apple Command Line Tools 설치

XCoce 는 앱스토어(App Store)를 통하여 설치한다.


그림2. App Store

또한 최신 make , gcc 등과 같은 도구 설치를 위하여 콘솔에 아래 명령을 입력한다.

   
sudo xcode-select --install

② 자바 빌드 도구인 Apache Ant 를 설치한다.
     
brew update
brew install ant

③ OpenCV 설치
다음 명령을 사용하여 homebrew 에서 제공하는  버전을 확인해보면 2.x, 3.x 버전만 지원하고 있다. 최신 버전 설치를 위하여 아래와 같이 소스를 빌드하여 설치한다.

  
  brew search opencv

자바 지원을 위하여 Opencv 패키지 설정에서 아래와 같이 수정한다. (Homebrew 에서 패키지는 Formula 라  부른다 )

  
  brew edit opencv

-DBUILD_opencv_java=OFF  을  -DBUILD_opencv_java=ON  으로 변경




만일 빌드과정에서 특정 자바 버전을 지정할 필요가 있다면 brew formula 의 cmake 파트에  -DOPENCV_JAVA_TARGET_VERSION=1.8 값을 추가해줘야 한다. 
  
  args = std_cmake_args + %W[
      -DCMAKE_OSX_DEPLOYMENT_TARGET=
      -DBUILD_JASPER=OFF
      -DBUILD_JPEG=OFF
      -DBUILD_OPENEXR=OFF
      -DBUILD_PERF_TESTS=OFF
      -DBUILD_PNG=OFF
      -DBUILD_PROTOBUF=OFF
      -DBUILD_TESTS=OFF 
      -DOPENCV_JAVA_TARGET_VERSION=1.8

다음 명령을 실행하여 설치를 시작한다.
  
  brew install --build-from-source opencv

소스에서 빌드하여 설치하는 것은 많은 자원이 소요된다.


약 17분 정도가 소요되었다.


 /usr/local/Cellar/opencv/4.x.x/share/java/opencv4/.

자바에서 사용하기 위해서  jar 파일과 오브젝트 파일이 필요하다. (설치경로 확인 필수)

오라클 클라우드 리눅스에 설치하기

① 빌드를 위한 도구들을 설치한다.

  
  sudo yum install cmake3 gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools 
  gimp-help-browser zlib-devel libtiff-devel libjpeg-devel libpng-devel 
  gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel 
  jasper-devel jasper-utils swig python libtool nasm build-essential ant
  

② OpenCV 홈페이지에서 최신 소스를 다운로드한다. 빌드를 위한 opencv 디렉토리를 생성하고 해당 폴더 아래에 다운로드한 소스파일 압축을 푼다. 이제 빌드를 위하여 opencv 폴더로 이동한다.

  

wget https://github.com/opencv/opencv/archive/4.5.2.zip
mkdir opencv
unzip 4.5.2.zip -D ./opencv
cd opencv

③ 아래 명령을 입력하여 빌드를 시작한다.  

  

    cmake3 -D CMAKE_BUILD_TYPE=RELEASE 
    -D CMAKE_INSTALL_PREFIX=/usr/local 
    -D INSTALL_C_EXAMPLES=ON 
    -D INSTALL_PYTHON_EXAMPLES=ON 
    -D OPENCV_GENERATE_PKGCONFIG=ON 
    -D BUILD_EXAMPLES=ON opencv-4.5.2/


make 명령시 -j 옵션은 병렬 처리를 위한 코어 수를 의미하며 코어 수는 nproc 명령을 사용하면 알 수 있다.
오라클 클라우스 서버의 경우 빌드에  많은 시간이 소요되었다. (1 시간 이상)

       
      make -j2



설치 역시 많은 시간이 소요된다.
  
      sudo make install

라이브러리 설치 위치 : /usr/local/share/java/opencv4

④ 정상 동작 확인을 위하여 간단 예제를 사용하였다.

 
    import org.opencv.core.Core;
    import org.opencv.core.CvType;
    import org.opencv.core.Mat;
    
    public class Hello {
    
    	public static void main( String[] args ){
    		System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
    		Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
            System.out.println( "mat = " + mat.dump() );
    	}
    }
    

테스트는 아래와 같이 소스를 컴파일하여 실행한다.

 
javac -cp /usr/local/share/java/opencv4/opencv-452.jar Hello.java

java -Djava.library.path=/usr/local/share/java/opencv4 -cp /usr/local/share/java/opencv4/opencv-452.jar:. Hello


⑤ Tomcat 환경에서 사용할 예정이기 때문에 아래와 같이 .bash_profile 파일에 네이티브 라이브러리 경로 추가한다. opencv-452.jar 은 사용하는 웹 프로그램의 WEB-INF/lib 복사해준다. 한가지 아쉬운 점은 무료로 사용하는 Oracle VM 의 성능이 MacBook Pro 와 너무 차이가 크다.

 

CATALINA_OPTS=' -Djava.library.path=/usr/local/share/java/opencv4 '
export CATALINA_OPTS ;


위와 같이 설치된 리눅스에서는 org.opencv.xphoto.Xphoto 패키지가 포함되지 않았다. 추가 모듈 설치가 필요한 부분으로 예상하고 git 에서 opencv_contrib 을 다운로드 하고 아래와 같은 방법으로 다시 빌드를 진행하였다. (처음에는 opencv 소스 역시 git 에서 다운하여 빌드를 하였으나 오류가 해결되지 않아 opencv_contrib 만 git 에 소스를 사용하는 방법을 사용했다.)

  
wget https://github.com/opencv/opencv/archive/4.5.5.zip
unzip 4.5.5.zip
git clone https://github.com/opencv/opencv_contrib.git
mkdir build 
cd build

cmake3 -D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH=/home/opc/src/opencv_contrib/modules \ 
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON  \
-D INSTALL_PYTHON_EXAMPLES=ON  \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_opencv_ximgproc=ON \
-D BUILD_EXAMPLES=ON /home/opc/src/opencv-4.5.5
 
make -j2
sudo make install 

참고자료