とあるサイトを参考にOpenCVSharpでArUcoを用いてARマーカ検出を行いたいです。
エラー内容
DllNotFoundException: OpenCvSharpExtern
OpenCvSharp.Internal.ExceptionHandler.RegisterExceptionCallback () (at <cb74a4a6366740efbebb36987dbd35b9>:0)
OpenCvSharp.Internal.NativeMethods.LoadLibraries (System.Collections.Generic.IEnumerable`1[T] additionalPaths) (at <cb74a4a6366740efbebb36987dbd35b9>:0)
OpenCvSharp.Internal.NativeMethods..cctor () (at <cb74a4a6366740efbebb36987dbd35b9>:0)
Rethrow as TypeInitializationException: The type initializer for 'OpenCvSharp.Internal.NativeMethods' threw an exception.
OpenCvSharp.VideoCapture..ctor (System.Int32 index, OpenCvSharp.VideoCaptureAPIs apiPreference) (at <cb74a4a6366740efbebb36987dbd35b9>:0)
Webcam.Start () (at Assets/Scenes/Script/Webcam.cs:26)
試したこと
NugetをUnityにインポートし、NugetのパッケージからOpenCvSharp4.4.5.3をインストールしました。OpenCvSharpExternのdllがない?と解釈してGithubの方から対応した4.5.3のzipをダウンロードしました。いくつかExtern.dllがありドラッグして入れようとしましたが弾かれてしまいました。
ご教示していただけると助かります。
using System.Collections; using System.Collections.Generic; using UnityEngine; using OpenCvSharp; using OpenCvSharp.Aruco; public class webcam : MonoBehaviour { private int source = 0; //カメラのインデックス private VideoCapture cam; public Mat cam_frame; /* ArUcoの設定 */ //ARマーカ辞書の設定 private const PredefinedDictionaryName dictName = PredefinedDictionaryName.Dict4X4_50; private Dictionary ar_dict; //検出アルゴリズムの設定 private DetectorParameters detect_param; void Start () { cam = new VideoCapture(source); cam.Set(CaptureProperty.ConvertRgb,3); cam_frame = new Mat(); ar_dict = CvAruco.GetPredefinedDictionary(dictName); detect_param = DetectorParameters.Create(); } void Update () { Point2f[][] maker_corners; //ARマーカのカドの座標 int[] maker_ids; //検出されたARマーカのID Point2f[][] reject_points; cam.Read(cam_frame);//フレームの更新 //ARマーカの検出 CvAruco.DetectMarkers(cam_frame, ar_dict, out maker_corners, out maker_ids, detect_param, out reject_points); if(maker_ids.Length > 0){ //検出されたマーカ情報の描画 CvAruco.DrawDetectedMarkers(cam_frame, maker_corners, maker_ids, new Scalar(0, 255, 0)); } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class camtexture_cam : MonoBehaviour { public webcam _webcam; private Texture2D cam_Texture; void Start () { cam_Texture = new Texture2D( 640, //カメラのwidth 480, //カメラのheight TextureFormat.YUY2, //フォーマットを指定 false //ミニマップ設定 ); this.GetComponent<Rendere>().material.mainTexture = cam_Texture; } // Update is called once per frame void Update () { cam_Texture.LoadImage(_webcam.cam_frame.ImEncode()); } }
開発環境
Unity 2020.3020f
OpenCVSharp4.4.5.3
MacBook Pro (13-inch, M1, 2020)
あなたの回答
tips
プレビュー