Использование камеры на рабочем столе Linux в Qt Quick - PullRequest
1 голос
/ 12 мая 2019

У меня есть простой проект в Qt Quick, в котором мне нужно обработать вывод с камеры. Проект должен работать на Android, Windows и Linux. Пока что мне удается подключиться к камере на Android, но не на Linux.

Моя настройка следующая:

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

main.qml

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtMultimedia 5.9

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("EyeGaze")

    SwipeView {
        id: swipeView
        anchors.fill: parent
        currentIndex: tabBar.currentIndex

        CameraViewForm {}

        AboutForm {}
    }

    footer: TabBar {
        id: tabBar
        currentIndex: swipeView.currentIndex

        TabButton {
            text: qsTr("Main")
        }
        TabButton {
            text: qsTr("About")
        }
    }
}

CameraViewForm.qml

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtMultimedia 5.9

Page {
    width: 600
    height: 400

    header: Label {
        text: qsTr("Camera View")
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: Qt.application.font.pixelSize * 2
        padding: 10
    }

    Camera {
           id: camera
           position: Camera.FrontFace
       }

       VideoOutput {
           source: camera
           anchors.fill: parent
           focus: visible // to receive focus and capture key events when visible
       }
}

Я получаю CameraBin error: "Could not read from resource." и пустой экран в окне камеры.

Я попытался проверить доступность камеры с помощью кода C ++ (используя QCameraInfo::availableCameras()) и обнаружил, что на моем ноутбуке действительно есть веб-камера на /dev/video0, к которой программа, похоже, имеет доступ.

Я неправильно получаю доступ к камере? Должен ли я сделать это из кода C ++, а не QML?

1 Ответ

1 голос
/ 14 мая 2019

На самом деле, ваш код должен работать (по крайней мере, он работает на моей стороне). Вот несколько подсказок.

Прежде всего, проверьте, если что-то уже использует вашу веб-камеру:

lsof /dev/video0

и

fuser /dev/video0

Если нет выходных - отлично, продолжайте. В противном случае проверьте, что происходит с вашей веб-камерой и кто на самом деле ее использует.


Проверьте, какие разрешения для веб-камеры:

ls -la /dev/video0

Это может быть что-то вроде:

crw-rw----+ 1 root video 81, 0 тра 10 13:38 /dev/video0

Проверьте, входит ли ваш пользователь в группу video, в противном случае добавьте его с помощью

adduser YOUR_USER video

Надеюсь, это поможет!

...