Всем доброго времени суток. Снова ковыряю веб-камеру на Распберри. На этот раз нужно просто получить картинку, поэтому решил не заморачиваться с openCV, а использовать QtMultimedia и QCamera.
Обнаружилось, что нигде в Интернетах нет нормального гайда, как это устроить. Под Виндой все завелось с полпинка, а вот на Raspbian потею уже недели две. При попытке создать объект QCamera в консоль приложения вываливается следующее:
OKLICK WEBCAM
(cameraTest:24081): GLib-GObject-WARNING **: invalid (NULL) pointer instance
(cameraTest:24081): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(cameraTest:24081): GStreamer-CRITICAL **: gst_object_ref_sink: assertion 'GST_IS_OBJECT (object)' failed
(cameraTest:24081): GStreamer-CRITICAL **: gst_element_get_bus: assertion 'GST_IS_ELEMENT (element)' failed
(cameraTest:24081): GStreamer-CRITICAL **: gst_bus_add_watch_full: assertion 'GST_IS_BUS (bus)' failed
(cameraTest:24081): GStreamer-CRITICAL **: gst_bus_set_sync_handler: assertion 'GST_IS_BUS (bus)' failed
(cameraTest:24081): GStreamer-CRITICAL **: gst_object_ref: assertion 'object != NULL' failed
(cameraTest:24081): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(cameraTest:24081): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(cameraTest:24081): GLib-GObject-CRITICAL **: g_object_get: assertion 'G_IS_OBJECT (object)' failed
xcb_connection_has_error() returned true
xcb_connection_has_error() returned true
xcb_connection_has_error() returned true
(cameraTest:24081): GLib-GObject-CRITICAL **: g_object_get: assertion 'G_IS_OBJECT (object)' failed
Первой строкой выводится название обнаруженной камеры. Соответственно, объект QCamera не работает, никакого файла с картинкой не появляется. Исходники:
main.cpp
#include <QCoreApplication>
#include <iostream>
#include <QtMultimedia/QCamera>
#include <QtMultimedia/QCameraInfo>
#include <QtMultimedia/QCameraImageCapture>
#include <QList>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
for (int i = 0; i < cameras.count(); i++)
{
cout << cameras.at(i).description().toLocal8Bit().data() << endl;
}
if (cameras.count())
{
QCamera *cam = new QCamera();
cam->setCaptureMode(QCamera::CaptureStillImage);
cam->start();
QCameraImageCapture *capture = new QCameraImageCapture(cam);
sudo pture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
cam->searchAndLock();
capture->capture(QCoreApplication::applicationDirPath() + "/image.jpg");
cam->unlock();
}
return 0;
}
cameraTest.pro
#-------------------------------------------------
#
# Project created by QtCreator 2014-03-07T15:42:52
#
#-------------------------------------------------
QT += core multimedia
TARGET = cameraTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
Очень сильно опасаюсь, что проблема в отсутствии каких-то библиотек в системе, но в интернетах везде советуют только установить gstreamer со всеми плагинами, что я первым делом и сделал.
Собственно, вопрос: кто-нибудь вообще владеет полным списком того, что надо иметь в системе для работы QCamera? А то я уже столько хлама в систему поставил за эти две недели, что давно потерялся, что надо, а что нет.