У меня есть проект Unity, в котором я должен заниматься обработкой изображений. Я решил использовать C ++ Opencv 3.4, поэтому я создал проект Visual Studio C ++, собрал dll Universal Windows Plateform (UWP) и обернул + связал его в моих сценариях C #. Он отлично работает в редакторе Unity со следующей архитектурой Плагин Unity Project
но мне не удается развернуть приложение ни на HoloLens, ни на эмуляторе.
Я собрал 64- и 32-битные версии opencv и моей библиотеки DLL. Я настроил Unity Editor для использования 64-битной версии и платформой WSA для использования 32-битной, как вы можете видеть на следующих скриншотах
Настройки плагина Unity x64 / Настройки плагина Unity x86.
Я собрал проект Unity со следующими настройками Unity build.
Когда я вхожу в Visual Studio и развертываю приложение в HoloLens, я получаю следующие ошибки на каждой пользовательской DLL, которую я добавил в проект
...
Loading opencv_highgui340.dll
Failed to load 'opencv_highgui340.dll', expected x86 architecture, but was Unknown architecture. You must recompile your plugin for x86 architecture.
(Filename: C:\buildslave\unity\build\Runtime/Misc/Plugins.cpp Line: 150)Loading DocDetector.dll
Failed to load 'DocDetector.dll', expected x86 architecture, but was Unknown architecture. You must recompile your plugin for x86 architecture.
В результате чего при развертывании и запуске приложения на HoloLens:
DllNotFoundException: Unable to load DLL 'DocDetector': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Ниже вы найдете скрипт C #, который загружает и вызывает dll (на всякий случай):
// How I import the dll
internal static class OpenCVInterop
{
[DllImport("DocDetector")]
internal unsafe static extern double SimpleDocumentDetection(ref Color32 image, uint width, uint height, ref byte result);
}
// ...
// How I use it
unsafe
{
duration = OpenCVInterop.SimpleDocumentDetection(ref image[0], width, height, ref result[0]);
}
Заранее спасибо 😉
Задача ещё не решена.
Других решений пока нет …