L@MER 6 Report post Posted January 23, 2015 Здравствуйте форумчане! Планирую применить в своей разработке промышленные видеокамеры (JAI GO или BASLER асе) с интерфейсами USB3Vision со стандартом передачи данных GenIcam (см.вложенный PDF файл). Для данных видеокамер производитель предусматривает собственные SDK, так в инструкции для SDK JAI написано: The JAI SDK consists of two APIs (Application Programming Interfaces): 1. Jai_Factory.dll: Windows DLL with “Plain” C-interface and C/C++ header file with all functions and parameter types defined. This makes it possible to use JAI SDK in almost any programming language available for the Windows platform. 2. Jai_FactoryDotNET.dll: Managed Windows DLL (.NET Framework 2.0). This DLL exposes the “Plain” function interface PLUS an “object-oriented” API. The object-oriented API encapsulates the “standard use” of the “plain” C-interface API. Далее там-же описаны примеры интеграции в проекты, написанные на Microsoft Visual Studio 2005 C/C++, С# и т.п. (см.вложенный PDF файл). В проекте своем планирую применить библиотеку OpenCV, так как имею опыт работы с ней и данная библиотека меня всем устраивает. До этого с данной библиотекой создавал приложения, работающие со стандартными вебкамерами по интерфейсу USB2.0. Там все понятно. В данном случае же прошу консультации есть ли возможность подружить видеокамеры, описанные мною выше с OpenCV (связка USB3Vision+Genicam+OpenCV). Есть ли успешно реализованные проекты на основе OpenCV и USB3Vision+GenIcam? Какие возможны подводные камни при получении изображения в OpenCV с таких камер. P.S. Не хотелось бы ошибиться и купить камеру, которую невозможно потом будет привязать к OpenCV, т.к.данные камеры не дешевые. Заранее благодарен за внимание к теме! JAI-SDK-Getting-Started-Guide_revK.pdfgenicam_basler.pdf Share this post Link to post Share on other sites
BeS 53 Report post Posted January 23, 2015 Ну, если через их API можно получить сырые данные с камеры, то в чем проблема руками конвертировать в понятный OpenCV формат? А вообще я с промышленными камерами сталкивался только в ethernet исполнении. Там оно подключалось через модуль camera_aravis для ROS. Камеры от basler/continental вроде как через него работают. Советую поискать по ROS'овскому стеку подходящий для вашего кейса модуль. з.ы. а можно поинтересоваться, под какие задачи вы эти камеры собираетесь использовать? Это ведь сильно не бюджетный вариант, с ценниками от 500$... Share this post Link to post Share on other sites
L@MER 6 Report post Posted January 23, 2015 з.ы. а можно поинтересоваться, под какие задачи вы эти камеры собираетесь использовать? Это ведь сильно не бюджетный вариант, с ценниками от 500$... Распознавание профиля изделий в тяжелой промышленности в процессе формовки. Там серьезные требования к применяемым камерам. Использоваться будут две камеры (каждая в районе 1000 евро) и генераторы лазерной линии для формирования изображения профиля. Share this post Link to post Share on other sites
BeS 53 Report post Posted January 24, 2015 Кстати, раз зашел разговор о промышленных камерых. Может кто-нибудь посоветует камеру с низким разрешением (1.3Mp за глаза) но приличным качеством? А то все варианты, какие я встречал что у basler, что у continental идут с 5Mp, и переплачивать за неиспользуемое разрешение как-то не оченб хочется. Share this post Link to post Share on other sites
L@MER 6 Report post Posted January 24, 2015 Кстати, раз зашел разговор о промышленных камерых. Может кто-нибудь посоветует камеру с низким разрешением (1.3Mp за глаза) но приличным качеством? А то все варианты, какие я встречал что у basler, что у continental идут с 5Mp, и переплачивать за неиспользуемое разрешение как-то не оченб хочется. Вот например у BASLER: http://www.baslerweb.com/ru/produkty/matrichnye-kamery/ace/aca1300-30uc Share this post Link to post Share on other sites
L@MER 6 Report post Posted January 29, 2015 В общем, прошла неделя консультаций и писем от поставщиков и интеграторов камер Basler и JAI. Результат - обе эти камеры (точнее их ПО) могут взаимодействовать с OpenCV. И там и там есть реализованные проекты с OpenCV. В программном пакете JAI SDK имеется три примера интеграции на C++. ПО Basler к тому-же поддерживает DirectShow. В общем, может быть кому-нибуть данная веточка и информация пригодится. 1 Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 1, 2015 Как показала практика BASLER асе с интерфейсами USB3Vision прекрасно находится через VideoCapture cap(). А вот через CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY) нет. Это на заметку! Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 21, 2015 В проекте используются две камеры USB3.0. Обе висят на одном хост-контроллере на двух USB3.0 портах ноутбука. Открываю видеопоток: VideoCapture cap_1(1); // Открываем камеру (1) VideoCapture cap_2(2); // Открываем камеру (2) При этом в программе видно изображение только одной из камер. Если вместо одной из USB3.0 камер подключаю USB2.0 камеру, то все хорошо - транслируется картинка и с USB3.0 и c USB2.0 камеры. Вначале грешил, что при разрешении в 5МП хост USB3.0 не протягивает две камеры. Так нет, запускаю программу тестовую, что шла с USB3.0 камерами - две картинки с двух камер без тормозов на полном разрешении. Уменьшал разрешение камер - пофиг, через OpenCV все-равно затык...видится только одна. В каком направлении думать? Ощущение что OpenCV не нравится, что они на одном хосте сидят...походу придется внешний хост покупать....Или может у кого похожая ситуация была...кто как решал? Share this post Link to post Share on other sites
Smorodov 544 Report post Posted April 21, 2015 Камеры открываются обе? Я имею ввиду метод isOpen() что выдает? Если открыты, можно попробовать по одному кадру с каждой по очереди тянуть попробовать (по нажатию кнопки). Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 21, 2015 Нет, вторую камеру он не открывает вообще. Открывает только VideoCapture cap_1(1). VideoCapture cap_2(2) - не открывает. При этом, провел эксперимент. Подключил встроенную вебкамеру ноута, внешнюю вебкамеру USB2.0 и внешнюю камеру USB3.0 - все ОК. VideoCapture cap_0(0) - встроенная камера ноута VideoCapture cap_1(1) - USB2.0 VideoCapture cap_2(2) - USB3.0 Короче засада именно в параллельной работе USB3.0 камер, точнее в их открытии... Share this post Link to post Share on other sites
Nuzhny 229 Report post Posted April 22, 2015 А ОС какая? Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 22, 2015 А ОС какая? Windows 7 Professional 64 bit. Пробовал на двух ноутах. На обоих есть пара USB3.0. Та-же картина. USB2.0 камер хоть четыре работают. А из двух подключенных USB3.0 работает только одна. При этом средствами Basler SDK запускаю пару USB3.0 камер совместно на ура. Share this post Link to post Share on other sites
Nuzhny 229 Report post Posted April 22, 2015 А посмотри какие dll подгружает Basler SDK, а какие твоя программа про проигрывании видео (можно с помощью ProcessExplorer от Руссиновича). Так можно узнать с помощью чего осуществляется захват с камеры. Ищется что-то типа dshowxxx.dll, но лучше выложи полные списки. Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 22, 2015 А посмотри какие dll подгружает Basler SDK, а какие твоя программа про проигрывании видео (можно с помощью ProcessExplorer от Руссиновича). Так можно узнать с помощью чего осуществляется захват с камеры. Ищется что-то типа dshowxxx.dll, но лучше выложи полные списки. Вот что подгружает Basler SDK: Basler SDK.txt Вот что подгружает моя прога на OpenCV: OpenCV.txt С ходу посмотрел, что и та и та программы подгружают одинаковые dll от Basler. По dll от данного производителя различие только в двух компонентах, программа от Basler подгружает еще вот это: PylonGUI_MD_VC100.dll pylonGUI Module Basler C:\Program Files\Basler\pylon 4\pylon\bin\x64\PylonGUI_MD_VC100.dll PylonUtility_MD_VC100.dll Их вызов обеспечивается в начале Basler SDK: // Include files to use the PYLON API. #include <pylon/PylonIncludes.h> #include <pylon/PylonGUI.h> // Namespace for using pylon objects. using namespace Pylon; int main(int argc, char* argv[]) { CTlFactory& tlFactory = CTlFactory::GetInstance(); // Get all attached devices and exit application if no device is found. DeviceInfoList_t devices; if (tlFactory.EnumerateDevices(devices) == 0) { throw RUNTIME_EXCEPTION("No camera present."); } // Create an instant camera object with the camera device 0. CInstantCamera camera_1(tlFactory.CreateDevice(devices[0])); CInstantCamera camera_2(tlFactory.CreateDevice(devices[1])); // Start the grabbing camera_1.StartGrabbing(); camera_2.StartGrabbing(); // This smart pointer will receive the grab result data. CGrabResultPtr ptrGrabResult_1; CGrabResultPtr ptrGrabResult_2; while (1) { // Wait for an image and then retrieve it. A timeout of 5000 ms is used. camera_1.RetrieveResult(5000, ptrGrabResult_1, TimeoutHandling_ThrowException); camera_2.RetrieveResult(5000, ptrGrabResult_2, TimeoutHandling_ThrowException); // Display the grabbed image. Pylon::DisplayImage(1, ptrGrabResult_1); Pylon::DisplayImage(2, ptrGrabResult_2); } } Share this post Link to post Share on other sites
L@MER 6 Report post Posted April 27, 2015 В общем, в процессе экспериментов выявлено, что средствами OpenCV одновременно открыть потоки с двух промышленных камер Basler USB3.0 не получается никакими танцами с бубном или без оного. Проблему решил совместив открытие потоков и захват при помощи Basler Pylon SDK (см.код выше) и дальнейшую обработку и вывод на форму средствами OpenCV. При этом открытие потоков и захват реализованы в одном потоке. Попытки вначале распаралелить открытие и захват на два потока привело к конфликтам и ошибкам. Совмещение в одном потоке обеспечило стабильную работу. P.S. Как показала практика при захвате и обработка одного цветного изображений разрешением 2590х1940 13 fps средствами OpenCV отьедает приблизительно 120-130 Мб оперативной памяти. При захвате цветного изображения разрешением 2590х1940 13 fps средствами Basler SDK и обработке средствами OpenCV отъедает только 60-80 Мб оперативной памяти. Загрузка процессора Core i5 в обоих случаях составляет от 85-96%. При этом изображение на форме достаточно плавное. При включении фильтра Гаусса с одним изображением получаю тормоза, с двумя изображениями такого формата и разрешения на форме - супертормоза. Принял решение в дальнейшем перейти на mono8, благо задача позволяет и использовать ROI, т.к. усреднять ВСЕ изображение такого разрешения нецелесообразно с точки зрения использования ресурсов компьютера. Share this post Link to post Share on other sites
Андрей_Андрей 0 Report post Posted February 9, 2016 Здравствуйте, для JAI - одной камеры нет похожего рабочего примера? Share this post Link to post Share on other sites
iskees 32 Report post Posted February 9, 2016 "Core i5 в обоих случаях составляет от 85-96%" что-то сильно много, у нас на full-hd 25fps с селеронами загрузка была на уроне 15%. Может у вас 85% это с учетом вывода изображения уже. Share this post Link to post Share on other sites
DmitryK 0 Report post Posted September 27 Здравствуйте, форумчане. Занимаюсь изучением интерфейса GenIсam. В связи с этим у меня имеется масса вопросов. Не могли бы Вы ответить на часть из них? Все мои вопросы находятся в прикреплённом файле.Question1_Forum.pdf Share this post Link to post Share on other sites