검색

레이블이 리눅스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 리눅스인 게시물을 표시합니다. 모든 게시물 표시

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 옵션을 사용한 경우