OpenCV 소개
유튜브 강의 영상을 보다 보니 파이썬으로 동영상의 얼굴을 인식하고 얼굴에 캐릭터를 씌우는 걸 설명하는 걸 보았다.
어떻게 영상에서 얼굴을 인식하는지 궁금했는데 OpenCV 를 이용하면 가능하다고 한다.
OpenCV(Open Source Computer Vision)는 실시간 computer vision을 위한 라이브러리로 C/C++로 개발되었고 TensorFlow, Torch/PyTorch 및 Caffe의 deep learning framework를 지원한다고 한다.
OpenCV의 문서를 보면 DNN (Deep Neural Networks)의 Face Detection을 사용한다고 하는데 관련된 tutorial은 다음과 같다.
OpenCV는 다양한 언어에서 사용할 수 있는데 내 경우 java에 익숙해서 순수 java로 OpenCV를 써보고 싶었다.
OpenCV 설치
OpenCV는 C++ 기반 라이브러리여서 maven central repository에서 dependency를 불러오는 형태가 아닌 외부 library 참조 형태로 사용한다.
OpenCV Release 페이지에서 window 버전을 다운로드한다.
다운로드한 파일은 exe 실행파일 형태인데 실행하면 해당 위치에 압축을 푼다. (window 설치 파일이 아니다.)
적당한 위치에 해당 폴더를 설정하면 된다.
Eclipse (STS)에 외부 라이브러리 추가 설정하기
User Library 추가하기
Eclipse (또는 STS)에서 Window -> Preferences의 Java -> User Libraries에 새 User Library를 추가한다.
새 User Library에 Add External JARSs... 메뉴로 설치한 OpenCV 폴더의 build/java/opencv-455.jar를 추가한다.
(OpenCV 폴더 구조는 이전 구 버전과 위치가 조금 달라진 듯하다. 이 글을 작성하는 현재 4.5.5 버전의 경우 위와 같다.)
추가된 jar의 Native library location에 build/java/x64/opencv_java455.dll을 추가해준다.
Project library 추가하기
위 과정에서 추가한 user library를 사용하려는 프로젝트에 추가하면 된다.
Package Explorer에서 대상 프로젝트에서 오른쪽 마우스 -> Properties를 선택하여 나온 설정창에서 Java Build Path -> Library를 선택하여 Classpath에서 Add Library를 선택, User Library에서 추가한 라이브러리를 선택해준다.
OpenCV 사용해보기
이렇게 추가한 후엔 OpenCV를 사용할 수 있게 된다.
github에서 제공하는 java sample을 실행해보면 다음과 같은 응답을 확인할 수 있다.
https://github.com/opencv/opencv/blob/4.x/samples/java/eclipse/HelloCV/src/Main.java
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class Main {
public static void main(String[] args) {
System.out.println("Welcome to OpenCV " + Core.VERSION);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat m = Mat.eye(3, 3, CvType.CV_8UC1);
System.out.println("m = " + m.dump());
}
}
Welcome to OpenCV 4.5.5
m = [ 1, 0, 0;
0, 1, 0;
0, 0, 1]
만약 dependency만 추가하고 native library로 dll 파일을 연결해두지 않았다면 다음처럼 UnsatisfiedLinkError가 발생한다.
java.lang.UnsatisfiedLinkError: no opencv_java455 in java.library.path: ...이하 생략
여기까지 진행이 되었으면 java에서 OpenCV를 사용해볼 수 있는 준비가 되었다.
'Study > Java' 카테고리의 다른 글
JDK 18 New Features (1) | 2022.03.24 |
---|---|
Spring Data JDBC는 현재 쓸 만할까? (0) | 2022.03.17 |
Spring MVC에서 video streaming 하기 (0) | 2022.02.25 |
java에서 OpenCV로 face detection 해보기 (0) | 2022.02.24 |
java project에서 maven으로 asciidoctor-diagram 사용해보기 (0) | 2022.02.19 |
Java SE와 Java EE, Jakrta EE history (2) | 2022.01.25 |
JDK LTS release 2년 주기 전환 및 Spring의 release 정책 (0) | 2022.01.12 |
Spring Boot 2.6 Release Notes (0) | 2021.11.23 |
[troubleshooting] eclipse (STS)에서 빌드 시 throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module 에러 발생 (0) | 2021.11.01 |
[troubleshooting] eclipse(STS)에서 sources and javadoc downdoad 무한 반복 현상 (0) | 2021.10.22 |