Как получить изображения с камер GigE в Linux с помощью Plain C
Есть ли библиотека, которую я могу использовать для получения изображений с камеры GigE с простым C в Linux? Если быть более точным, у меня установлена камера Basler GigE и установлено программное обеспечение пилона. Существует также пример кода на C++. Но я хочу и должен использовать C (в моей работе это на самом деле правильно, чтобы использовать C). Было бы здорово, если бы для GigE было что-то полезное, например libdc1394.
3 ответа
"GigE Vision" на самом деле является стандартом для камер компьютерного зрения, и большинство камер также используют стандарт Genicam для настройки параметров. По крайней мере, такова теория - у меня есть высокоскоростная камера GigE, которую Pylon или AVT не обнаружили по неизвестной причине (официально она поддерживается только eBus из Pleora). Возможно, вы сможете получить спецификации для этих стандартов, но я не уверен, что они свободно доступны.
Что касается библиотеки, я только что попробовал Aravis под Ubuntu12.04, и она работала для моей камеры (потоковая передача 512x512 пикселей при 190 кадрах в секунду). Это написано на C, насколько я могу судить. Как подсказка, чтобы скомпилировать включенный Viewer, вы должны установить все пакеты gstreamer-dev, включая libgstreamer-plugins-base0.10-dev.
В большинстве реализаций будет использоваться C++, и в лучшем случае они будут основаны на построении c-api, поскольку GenICam - очень сложная для реализации вещь, а эталонная реализация работает, является бесплатной и используется почти всеми поставщиками SDK. Вы можете реализовать большую часть приобретения без особых усилий в C, но очень трудно исключить GenICam из цикла - это потому, что производители использовали документы GenICam XML как своего рода язык / среду программирования, специфичные для предметной области - усилия сопоставимы с реализация веб-браузера с нуля.
Aravis действительно существует, но зависит от gstreamer и, по-видимому, в основном на C, но он пойдет только на сложную поддержку XML, необходимую для многих камер. Я бы никогда не использовал gstreamer в критически важных условиях или в тех случаях, когда требуется надежная работа в дополнение к высокой производительности или высокой эффективности. Я считаю, что лучшим вариантом на рынке является SDK FYI от Pleora - никакого отношения. Сказав это - я написал такую библиотеку (с C++:-), которой я не могу поделиться для решения упомянутых проблем.
Стандарт GigE не очень удобен для открытого исходного кода - вы должны платить ежегодную лицензионную плату организации по стандартизации, поэтому большая часть программного обеспечения, использующего GigE Vision, стоит значительных денег. Группа компаний собралась вместе, чтобы разработать стандарт, и вряд ли они опубликуют его в ближайшее время.
Итак, вот некоторые из ваших вариантов (о которых я могу думать)...
1) Обратный инжиниринг протокола самостоятельно. Это довольно сложно, так что это будет большой проект.
2) Может быть, вам повезет и вы найдете компанию, у которой есть C-версия SDK, которую они могут продать вам?
3) Используйте C++:-) (jk...)
4) Оплатите организацию по стандартизации, чтобы предоставить вам доступ или партнер с компанией, которая в ней работает.
5) Используйте проекты с открытым исходным кодом, которые пытаются пересмотреть стандарт. (Я не знаю, каковы правила законности на этом). Примеры: Aravis и OpenGigEVision. Эти решения, вероятно, будут неполными некоторое время, но они должны, по крайней мере, поддерживать основы.
Я думаю, что № 5 - ваш лучший выбор, если у вас нет времени и денег.