Net Core App with OpenCV4 in Mac os

jiho·2020년 11월 7일
0

비젼 공부를 시작해볼까해서 OpenCV기반으로 공부를 하다가 주로 사용하는 C#으로 해보려고 준비하던 중 생각보다 설치가 까다로워서 정리하겠습니다.

OpenCV4를 C#에서 사용할 수 있게 잘 Wrapping해놓은 프로젝트가 있었다.
OpenCVSharp(https://github.com/shimat/opencvsharp)
참 여러무로 shimat이라는 닉네임을 사용하시는 분이 세삼 대단한다. 어떻게 오픈소스를 관리할까요. 나도 꼭 오픈소스하나 관리해보고 싶네요.(시간적 여유가 있다면)

혹시나 동일한 삽질을 하고 계신 분이 있다면 도움이 되길...

  1. 처음으로 할 일은 dotnet new console로 어플리케이션을 하나 만드는 것입니다.
dotnet new console -o OpenCvTestProject
  1. 자! 이제 OpenCvSharp 라이브러리를 받아 봅시다.
dotnet add package OpenCvSharp
dotnet add package OpenCvSharp.runtime.osx.10.15-x64

각자 자신의 환경에 맞는 OpenCvSharp.runtime 라이브러리도 반드시 설치해줘야 정상적으로 동작할 것 입니다.

아무래도 이미지 처리는 Native 함수들을 사용할테니 os마다 다르게 처리해줘야할 바인딩 라이브러리들이 필요할 것 입니다.

반드시 OpenCvSharp.rumtime 라이브러리와 OpenCvSharp 의 버젼은 맞춰주세요.

  1. 이렇게 라이브러리를 모두 받고 간단한 코드 스니핏을 추가 해봅시다.
using System;
using OpenCvSharp; // add

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Cv2.GetVersionString()); // print version
        }
    }
}

이렇게 하고 dotnet run 을 해보면 아마 아래와 같은 Error가 발생할 것 입니다.

Unhandled exception. System.TypeInitializationException: The type initializer for 'OpenCvSharp.NativeMethods' threw an exception.
 ---> System.DllNotFoundException: Unable to load shared library 'OpenCvSharpExtern' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable: dlopen(libOpenCvSharpExtern, 1): image not found
   at OpenCvSharp.NativeMethods.redirectError(CvErrorCallback errCallback, IntPtr userdata, IntPtr& prevUserdata)
   at OpenCvSharp.ExceptionHandler.RegisterExceptionCallback()
   at OpenCvSharp.NativeMethods.LoadLibraries(IEnumerable`1 additionalPaths)
   at OpenCvSharp.NativeMethods..cctor()
   --- End of inner exception stack trace ---
   at OpenCvSharp.NativeMethods.core_getVersionString(StringBuilder buf, Int32 maxLength)
   at OpenCvSharp.Cv2.GetVersionString()
   at test.Program.Main(String[] args) in /Users/user/Workspace/OpenCVSharp/Program.cs:line 9

System.DllNotFoundException: Unable to load shared library 'OpenCvSharpExtern' or one of its dependencies

OpenCvSharpExtern 라는 동적 라이브러리를 못찾거나 해당 동적라이브러리와 의존성있는 라이브러리들이 현재 환경에 설치가 안되서 그런거다라고 생각하면 될 것 같네요.

찾아보니 설치는 잘된 것 같은데 dotnet core 앱이 해당 라이브러리를 못찾나 싶어서 실행파일과 같은 경로에 둬도 똑같은 에러를 발생시키네요.

그럼 나머지는 다른 의존성있는 라이브러리들이 있다는건데...

해당 프로젝트 repo에서 mac os 관련 issue를 찾아보면

https://github.com/shimat/opencvsharp/issues/1041#issuecomment-706532493

아래와 같이 의존성 라이브러리들이 많네요. brew를 이용해 모두 설치해봅시다... 혹시나 brew가 권한에 의해 설치가 계속 멈춘다면

sudo chown -R [mac user name] /usr/local/lib

을 실행해서 해결해주면 됩니다.

위와 같이 의존성 라이브러리들 모두 설치해주고 다시 App실행해보면 끝!

저기 의존성 라이브러리 설치하는데 쫌 걸립니다.(참고)

profile
Scratch, Under the hood, Initial version analysis

0개의 댓글