유니티 안드로이드 OpenCV 개발 고민..180410

일기/개발 일지2018. 4. 10. 18:25

안녕하세요. 개발자 드리머즈입니다.


유니티를 통해 OpenCV를 사용하는 apk를 만드려고 하고 있습니다.

간단해 보이지만 그 과정을 자세히 보면


c++언어로 작성된 OpenCV를 안드로이드 스튜디오나 비주얼 스튜디오를 통해 안드로이드에서 인식 가능한 so 파일 형태의 라이브러리를 먼저 만들어야 합니다.

그리고 이 라이브러리를 유니티에서 플러그인으로 인식시키고 유니티의 C# script에서 그 so파일(플러그인)을 사용하면 됩니다. 

그런데 이렇게 할 경우.. 유니티 자체에서 프로그램을 실행(play?)시키면 so파일을 찾지 못해 테스트를 할 수가 없습니다. 유니티에서 시간이 오래 걸리는 apk를 만들어야하고 이 apk를 다시 안드로이드 단말에 설치해야 합니다. 시간이 너무 오래 걸리는 단점이 있습니다.


그래서 좋은 방법이 없나 생각해봤습니다.


일단 생객한 방법은 

비주얼 스튜디오를 통해 윈도우에서 실행되는 유니티에서 실행 테스트를 할 수 있도록 dll 파일도 추가로 만들어보자 입니다.


비주얼 스튜디오에서 so파일을 만들 때와 dll파일 만들 때 프로젝트의 성격이 달라서 두 프로젝트를 만들어야 합니다.


음.. 아직 모든 게 명확하게 정리되진 않았지만 간단한 테스트를 해보니 잘 되는 것 같습니다.


so파일과 dll파일을 만드는 소스가 정확하게 일치하지는 않지만 핵심 부분은 같은 것으로 보입니다.



dll만드는 cpp소스

1
2
3
4
5
6
7
8
9
10
#include <opencv2\core.hpp> // use OpenCV in this C++ Android Library
 
extern "C"
{
    float __declspec(dllexport) __stdcall Foopluginmethod()
    {
        cv::Mat img(1010, CV_8UC1); // use some OpenCV objects
        return img.rows * 2.0f;     // should return 20.0f
    }
}
cs


so만드는 cpp소스

1
2
3
4
5
6
7
8
9
10
#include <opencv2\core.hpp> // use OpenCV in this C++ Android Library
 
extern "C"
{
    float SharedObject1::Foopluginmethod()
    {
        cv::Mat img(1010, CV_8UC1); // use some OpenCV objects
        return img.rows * 1.0f;     // should return 10.0f
    }
}
cs


so만드는 h파일

1
2
3
4
5
6
7
extern "C"
{
    namespace SharedObject1
    {
        float Foopluginmethod();
    }
}
cs

작성자

Posted by 드리머즈

관련 글

댓글 영역