Интеграция OpenCV (EMGUCV-обертка) в Unity - программирование
Подтвердить что ты не робот

Интеграция OpenCV (EMGUCV-обертка) в Unity

Как вы знаете, OpenCV - очень полезная библиотека, которая позволяет вам делать потрясающие и сильные вещи в видении компьютера. Поэтому я хорошо провел время, чтобы понять, как использовать его в Unity3d, у меня было много проблем и поиск в Сети, я нашел несколько предложений, но ни один из них не работал у меня.

  • Я использую Unity Pro 4.0
  • Эта версия Emgu CV (emgucv-windows-universal-gpu 2.4.9.1847)
  • Моя цель для проекта единства: windows, а не веб-плеер.
4b9b3361

Ответ 1

Это то, что я сделал для всех, кто хочет его использовать:

  • Установите эту версию EmguCV, которая создает папку EMGU в C:
  • В этой папке у вас будет одна папка с именем "emgucv-windows-universal-gpu 2.4.9.1847"
  • Перейдите в папку "bin"
  • В папке "bin" вам нужно скопировать все DLL файлы в папку x86 (22 dll), а также те, что находятся в ящике (12 dlls: Emgu.CV, Emgu.CV.UI...). Для целевого объекта X64 вы можете попробовать одно и то же, я думаю, что это сработает, взяв DLL из папки X64.
  • Создайте папку с именем Plugins в проекте Unity (Assets- > Plugins)
  • Вставьте все эти 34 файла dll в папку "Плагины"
  • Из этих 34 DLL файлов скопируйте "npp32_50_35" и "cudart32_50_35" в папку редактора Unity, в моем случае его "C:\Program Files (x86)\Unity\Editor"
  • Вы закончили работу с Dlls.

Вот как это проверить:

  • Создайте небольшой script, который возьмет "picture1.jpg" и изменит цвет первого 200 цветов диагональных пикселей на белый цвет (255,255,255), а затем сохранит новый "picture2.jpg". Это что вы должны положить в script:

    using UnityEngine;
    using System.Collections;    
    using Emgu.CV;    
    using Emgu.CV.Util;    
    using Emgu.CV.UI;           
    using Emgu.CV.CvEnum;    
    using Emgu.CV.Structure;    
    using System.Runtime.InteropServices;    
    using System;    
    using System.Drawing;    
    
    Image<Bgr, byte> picture = new Image<Bgr, byte>("C:\\picture1.jpg");     
    Bgr myWhiteColor = new Bgr(255, 255, 255);    
    For (int i=0; i<200; i++)    
    {picture[i,i]= color;}    
    picture.Save("C:\\picture2.jpg"); 
    
  • Добавив разные библиотеки DLL в папку "Плагины", они автоматически будут указаны в Mono Editor, но, вероятно, у вас будет проблема с библиотекой "System.Drawing", поэтому не забывайте using System.Drawing; а также вам нужно обратиться к нему, перейдя в ваш редактор script.

    Если MonoDevelop-Unity, перейдите в проводник решений слева, щелкните правой кнопкой мыши на Refrences- > Edit reference- > и выполните поиск system.drawing в левом столбце и проверьте его, чтобы увидеть его в правом столбце, затем нажмите ok

  • Также не забудьте изменить настройки сборки в Unity- > file- > build settings следующим образом:

    • ПК Mac и Linux вместо webplayer
    • Target = windows
    • Архитектура = x86
    • Затем нажмите кнопку "Настройки игрока", перейдите к "другим настройкам на новом экране" и установите Apache Compatibility lavel на .NET 2.0 вместо подмножества .NET 2.0

Теперь вы можете протестировать свой script и сделать потрясающую работу с помощью OpenCV

PS: Я не уверен, почему именно "npp32_50_35" и "cudart32_50_35" должны быть в папке "Редактор", но это единственная ситуация, которая сработала для меня.