Использование OpenCV в приложении Windows Store с Visual C ++

Я пытаюсь использовать библиотеку OpenCV для некоторой обработки изображений в моем приложении для Windows 8 Store с использованием C ++/CX. Я могу построить библиотеку OpenCV с помощью Visual C ++ 2012, но когда я упакую свое приложение и запустил Комплект сертификации приложений Windows , я получаю несколько ошибок, говорящих, что DLL OpenCV использует некоторые неподдерживаемые Windows API. Как исправить эти ошибки?

2
добавлено отредактировано
Просмотры: 2
nl ja de
Теперь, похоже, есть полуофициальный порт Windows RT OpenCV: code.opencv.org/проекты/OpenCV/вики/WindowsRT
добавлено автор Raman Sharma, источник

4 ответы

Мне удалось создать подмножество OpenCV для ARM.

Я начал с получения подмножества, которое мне было интересно создать для приложений Windows Store в x86. После указания CMake в исходной загрузке OpenCV я использовал генератор Visual Studio 11 для настройки проекта x86. Я добавил новый вариант сборки в CMake под названием TARGET_METRO и использовал его для дальнейшей настройки других проектов.

Это позволило мне отключить несколько сторонних компонентов, которые я не хотел создавать, например:

OCV_OPTION(BUILD_PERF_TESTS   "Build performance tests"  ON  IF (NOT iOS AND NOT TARGET_METRO) )

Я отключил WITH_VIDEOINPUT, BUILD_PERF_TESTS и BUILD_TESTS таким образом. Я также добавил определения, упомянутые Raman, когда TARGET_METRO был включен:

if(TARGET_METRO)
    add_definitions(-DWINAPI_FAMILY=WINAPI_FAMILY_APP)
    add_definitions(-D_UNICODE)
endif()

Затем я начал генерировать версию проекта x86 (Visual Studio 11) с помощью CMake и начал пытаться построить проект. Вы столкнетесь с рядом проблем, большинство из которых связаны с отсутствием API в WinRT. Большинство из них - механические изменения (например, замена InitializeCriticalSection для InitializeCriticalSectionEx ). Я заключил эти изменения в #if WINAPI_FAMILY == WINAPI_FAMILY_APP , чтобы он не повлиял на сборку без TARGET_METRO.

Когда пришло время строить для ARM, я сделал запуск CMake и использовал генератор Visual Studio 11 для создания нового проекта (под каталогом с именем «ARM»), а затем начал вручную редактировать результирующие файлы проекта.

Основные изменения, которые вам необходимо внести:

  • Change all 'Win32' to 'ARM' in all vcxproj files (3rdparty\IlmImf includes filenames which contain 'Win32', be careful to change those instances back)
  • For all projects, add true to the Globals propertygroup
  • For the ZERO_CHECK project, change ConfigurationType to "DynamicLibrary" instead of "Utility" (as the Utility type will fail to build)
  • Add the following at the project level (for each project you want to build for ARM):

    
      
        false
      
      <link>
        Console
        false
        false
      </link>
    
    
  • Remove "/machine:X86 " from Link: Additional Options (if it is in there)

  • Remove gdi32.lib, winspool.lib, shell32.lib, and comdlg32.lib from additional dependencies (these libs do not exist for ARM)
8
добавлено
Можно ли запустить его на x86, а не на ARM-процессоре?
добавлено автор Vinicius Rocha, источник
Да, на самом деле вам нужно сделать меньше работы, чтобы сделать это на x86. Вероятно, вы можете просто следовать всем шагам, пока я не расскажу о дополнительном хаке, который я сделал, чтобы заставить его работать для ARM.
добавлено автор Andy Rich, источник

OpenCV использует CMake для создания своих источников. После того, как вы загрузили источники OpenCV, в корневой папке отредактируйте файл CMakeLists.txt, содержащий следующие две строки:

add_definitions (-DWINAPI_FAMILY = WINAPI_FAMILY_APP)   add_definitions (-D_UNICODE)

в следующем блоке #if:

если (WIN32 И НЕ MINGW)

Делая это, ваша библиотека будет иметь доступ только к API, который поддерживается для приложений Windows Store. Это может означать, что вам придется исправить некоторые ошибки сборки (их было не так много, когда я пробовал на прошлой неделе), но в конечном итоге ваши двоичные файлы будут WACK чистыми.

Но вышеприведенные шаги будут успешными только для сборки x86 и x64 OpenCV. Средство CMake, которое используется OpenCV, пока не поддерживает проекты Visual C ++ 2012 для архитектуры ARM. Эта проблема отслеживается этой ошибкой .

Обновить

There is now a port of CMake that support building Windows Store and Phone apps (both 8.0 and 8.1). See details here: http://cmakems.codeplex.com/

Second Обновить

The below video shows OpenCV working in a Windows 10 Universal app written using C++: http://channel9.msdn.com/Events/Build/2015/3-82

4
добавлено
Мне бы очень хотелось, если бы вы могли оставить комментарий, если в проекте C ++ 2012 для части ARM будет достигнут какой-либо прогресс. Я собираюсь создать проект видения, ориентированный на Windows 8 (x86 и ARM).
добавлено автор Poul K. Sørensen, источник
Я только что видел сборку видео, создав приложения для Windows 8 Metro с Visual C ++ 2012, в какой-то момент в видео он использует «OpenKV на базе WinRT SDK для FaceDetection». Я не нашел это из google, но мне интересно, есть ли там какой-то механизм opencv.
добавлено автор Poul K. Sørensen, источник
Хорошо, у меня создалось впечатление, что Windows RT является частью ARM, а Windows 8 - x86. Но, основываясь на вашем комментарии, я могу заключить, что ошибся. Благодарю.
добавлено автор Poul K. Sørensen, источник
Хорошо, спасибо, что разъяснил это.
добавлено автор Poul K. Sørensen, источник
Если другие пытаются это сделать, упоминается ошибка Raman: pastebin.com/9kQj1mZw
добавлено автор Poul K. Sørensen, источник
вы видели это: stackoverflow.com/questions/11151474/… и есть ли у вас какие-либо комментарии к обсуждаемой части подписи?
добавлено автор Poul K. Sørensen, источник
Хорошо. О, хорошо, это не то место, но было бы хорошо с местом, где люди могли бы обсудить/решить эту проблему. Невозможность получить OpenCV-сборку для моего Windows-телефона сейчас расстраивает :)
добавлено автор Poul K. Sørensen, источник
Конечно, я могу это сделать. Пока я просто смотрю эту ошибку: cmake.org/Bug/view.php ? ID = 13511
добавлено автор Raman Sharma, источник
Я знаю этого парня. Он использовал x86-сборку OpenCV для своей демонстрации. В основном он создал тонкую оболочку WinRT с использованием C ++/CX поверх API OpenCV. Он еще не смог построить библиотеку для ARM.
добавлено автор Raman Sharma, источник
Вы правы, эта терминология сбивает с толку. Windows RT является частью ARM. Но когда люди говорят Windows Runtime API, они ссылаются на новый стиль API, который открыла Windows 8, те, которые могут быть вызваны с любого языка: C ++, C# JavaScript. Этот парень, когда он сказал компонент WinRT, имел в виду последний, а не ARM
добавлено автор Raman Sharma, источник
@ s093294 это отдельная проблема. это не возможность создавать и запуска настольных приложений на ARM. Здесь мы пытаемся не создавать OpenCV для приложений магазина ARM, что в идеале должно быть возможным.
добавлено автор Raman Sharma, источник
Как только мы получим поддержку ARM для CMake, я думаю, она должна работать как для Windows RT, так и для Windows Phone, я думаю, с небольшими изменениями. Даже до появления поддержки CMake ARM, возможно, вы можете скопировать настройку проекта с x86 и создать конфигурацию ARM и попробовать исправление ошибок по мере их появления.
добавлено автор Raman Sharma, источник

Отказ от ответственности: я на 100% новичок в OpenCV в качестве библиотеки и только начал изучать это сегодня, когда нашел некоторые примеры приложений, использующих OpenCV вокруг образцов Azure Cognitive Vision.

Моя единственная цель состояла в том, чтобы даже увидеть, поддерживается ли OpenCV в UWP и работает с ARM. Я прочитал кучу сообщений и блогов, которые были вокруг с 2015 года, и они заставляли меня думать, что работать не удалось.

Then I found this sample: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraOpenCV

And can confirm it works for my basic test, you can see my video here of ARM Pi 2 running UWP app, using the OpenCV library: https://twitter.com/LyalinDotCom/status/982830053355470848

не говоря, что это означает, что все OpenCV будет работать, но по крайней мере этот тест был хорошим знаком, и я хотел поделиться своими ранними результатами здесь.

0
добавлено
Еще одно заявление об отказе от ответственности: я работаю в Microsoft в качестве менеджера продуктов для VSTS, но все это всего лишь мое боковое увлечение изучением различных интересных проектов, ни одна из них не является моей дневной работой, и я не представляю команду UWP или этот образец. Я нашел его, как любой другой пользователь, в Интернете
добавлено автор Dmitry Lyalin, источник

Мы работаем над тем, чтобы включить OpenCV с новой конструкцией CMake в Phone and Store. Тем временем вы просмотрели http://github.com/msopentech/openCV . У этого есть инструкции по созданию OpenCV для WinRT.

0
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest