Всем доброго времени суток. Снова ковыряю веб-камеру на Распберри. На этот раз нужно просто получить картинку, поэтому решил не заморачиваться с 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
#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;
}
#-------------------------------------------------
#
# Project created by QtCreator 2014-03-07T15:42:52
#
#-------------------------------------------------
QT += core multimedia
TARGET = cameraTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
Привет ! Я тоже "сижу" на RPi 2 и судя по тому что по твоим словам под виндой завелось, в системе видимо не описано устройство, хотя оно и найдено системой. У меня такое было когда "игрался" с USB-сканером ШК и кассовым аппаратом. Покопайся в направлении /etc/udev/rules.d ! Когда я там прописал свй сканер и КА, они чудным образом начали работать, хотя до этого точно так-же находились системой и не фурычили. Правда драйвера им, я писал отдельно на базе libusb, и все "шаманства" делал через него. Если есть под руками USB камера - можно попробовать аналогично проверить её ...
Удачи !
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)