비젼 공부를 시작해볼까해서 OpenCV기반으로 공부를 하다가 주로 사용하는 C#으로 해보려고 준비하던 중 생각보다 설치가 까다로워서 정리하겠습니다.
OpenCV4를 C#에서 사용할 수 있게 잘 Wrapping해놓은 프로젝트가 있었다.
OpenCVSharp(https://github.com/shimat/opencvsharp)
참 여러무로 shimat이라는 닉네임을 사용하시는 분이 세삼 대단한다. 어떻게 오픈소스를 관리할까요. 나도 꼭 오픈소스하나 관리해보고 싶네요.(시간적 여유가 있다면)
혹시나 동일한 삽질을 하고 계신 분이 있다면 도움이 되길...
dotnet new console -o OpenCvTestProject
dotnet add package OpenCvSharp
dotnet add package OpenCvSharp.runtime.osx.10.15-x64
각자 자신의 환경에 맞는 OpenCvSharp.runtime 라이브러리도 반드시 설치해줘야 정상적으로 동작할 것 입니다.
아무래도 이미지 처리는 Native 함수들을 사용할테니 os마다 다르게 처리해줘야할 바인딩 라이브러리들이 필요할 것 입니다.
반드시 OpenCvSharp.rumtime 라이브러리와 OpenCvSharp 의 버젼은 맞춰주세요.
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실행해보면 끝!
저기 의존성 라이브러리 설치하는데 쫌 걸립니다.(참고)