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