From 2619c53fb7327693d40c7a3a8d605cd4a9e779bc Mon Sep 17 00:00:00 2001 From: Robertkill Date: Tue, 4 Mar 2025 14:37:58 +0800 Subject: [PATCH] feat: Upgrade to QT6 as title log: as title pms: TASK-374223 --- debian/control | 15 ++++----- debian/rules | 5 +-- drivermanger.cpp | 2 -- workmodule.cpp | 85 ++++++++++++++++++++---------------------------- workmodule.h | 20 +++++++----- 5 files changed, 56 insertions(+), 71 deletions(-) diff --git a/debian/control b/debian/control index 4c6345b..181d084 100644 --- a/debian/control +++ b/debian/control @@ -4,9 +4,9 @@ Priority: optional Maintainer: Deepin Sysdev Build-Depends: debhelper (>= 8.0.0), pkg-config, - qt5-qmake, - qtbase5-dev, - libdtkcore-dev, + qmake6, + qt6-base-dev, + libdtk6core-dev, seetaface-boxes, seetaface-landmarker, seetaface-anti-spoofing-x, @@ -16,9 +16,9 @@ Build-Depends: debhelper (>= 8.0.0), seetaface-pose-estimation, seetaface-authorize, seetaface-tennis, - libdtkwidget-dev, - libdtkcore5-bin, - qtmultimedia5-dev + libdtk6widget-dev, + libdtk6core-bin, + qt6-multimedia-dev Standards-Version: 4.5.1 Homepage: https://github.com/linuxdeepin/deepin-face @@ -36,7 +36,6 @@ Depends: ${shlibs:Depends}, seetaface-authorize, seetaface-tennis, seetaface-models, - libqt5multimedia5-plugins, - gstreamer1.0-plugins-bad + libqt6multimedia6, Description: Face recognition service deepin-face is a face recognition service implemented by the open source face recognition engine seetaface diff --git a/debian/rules b/debian/rules index 14c732d..9a967bb 100755 --- a/debian/rules +++ b/debian/rules @@ -2,8 +2,6 @@ # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. export DH_VERBOSE = 1 -export QT_SELECT=5 - # see FEATURE AREAS in dpkg-buildflags(1) export DEB_BUILD_MAINT_OPTIONS = hardening=+all @@ -16,8 +14,7 @@ export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: - dh $@ - + dh $@ --buildsystem qmake6 override_dh_auto_install: dh_auto_install -- prefix=/usr diff --git a/drivermanger.cpp b/drivermanger.cpp index 17aaa0a..720d168 100644 --- a/drivermanger.cpp +++ b/drivermanger.cpp @@ -91,7 +91,6 @@ QDBusUnixFileDescriptor DriverManger::enrollStart(QString chara, QMetaObject::invokeMethod(m_spErollthread.data(), "Start", Qt::QueuedConnection, - QGenericReturnArgument(), Q_ARG(QString, actionId), Q_ARG(int, fd[1])); @@ -153,7 +152,6 @@ QDBusUnixFileDescriptor DriverManger::verifyStart(QStringList charas, QMetaObject::invokeMethod(m_spVerifyThread.data(), "Start", Qt::QueuedConnection, - QGenericReturnArgument(), Q_ARG(QString, actionId), Q_ARG(QVector, faceCharas)); return QDBusUnixFileDescriptor(0); diff --git a/workmodule.cpp b/workmodule.cpp index 6bad37e..b46aa6c 100644 --- a/workmodule.cpp +++ b/workmodule.cpp @@ -5,7 +5,7 @@ #include "workmodule.h" #include "modelmanger.h" -#include +#include #include #include #include @@ -34,44 +34,40 @@ void ErollThread::Start(QString actionId, int socket) void ErollThread::run() { m_camera.reset(); - auto cameras = QCameraInfo::availableCameras(); - for (const auto &obj : qAsConst(cameras)) { + auto cameras = QMediaDevices::videoInputs(); + for (const QCameraDevice &obj : cameras) { m_camera.reset(new QCamera(obj)); if (m_camera->isAvailable()) break; } - if (m_camera.isNull()) { qDebug() << "open camera fail"; Q_EMIT processStatus(m_actionId, FaceEnrollException); return; } - m_camera->setCaptureMode(QCamera::CaptureStillImage); - m_imageCapture.reset(new QCameraImageCapture(m_camera.data())); - m_imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer); - QList supportedResolutions = m_imageCapture->supportedResolutions(); + m_captureSession.reset(new QMediaCaptureSession); + m_captureSession->setCamera(m_camera.data()); + m_imageCapture.reset(new QImageCapture); + m_captureSession->setImageCapture(m_imageCapture.data()); + QList supportedResolutions = m_camera->cameraDevice().photoResolutions(); if (supportedResolutions.contains(QSize(800, 600))) { - auto settings = m_imageCapture->encodingSettings(); - settings.setResolution(QSize(800, 600)); - m_imageCapture->setEncodingSettings(settings); + m_imageCapture->setResolution(QSize(800, 600)); } - connect(m_camera.data(), &QCamera::stateChanged, this, &ErollThread::updateCameraState); - connect(m_imageCapture.data(), &QCameraImageCapture::readyForCaptureChanged, this, &ErollThread::readyForCapture); - connect(m_imageCapture.data(), &QCameraImageCapture::imageCaptured, this, &ErollThread::processCapturedImage); - connect(m_imageCapture.data(), QOverload::of(&QCameraImageCapture::error), + connect(m_imageCapture.data(), &QImageCapture::readyForCaptureChanged, this, &ErollThread::readyForCapture); + connect(m_imageCapture.data(), &QImageCapture::imageCaptured, this, &ErollThread::processCapturedImage); + connect(m_imageCapture.data(), QOverload::of(&QImageCapture::errorOccurred), this, &ErollThread::captureError); m_camera->start(); + m_imageCapture->capture(); } void ErollThread::Stop() { qDebug() << "ErollThread::Stop thread:" << QThread::currentThreadId(); - m_imageCapture->cancelCapture(); m_stopCapture = true; m_camera->stop(); - m_camera->unload(); m_camera.reset(); close(m_fileSocket); } @@ -116,11 +112,6 @@ void ErollThread::sendCapture(QImage &img) free(buf); } -void ErollThread::updateCameraState(QCamera::State state) -{ - qInfo() << "updateCameraState" << state; -} - void ErollThread::readyForCapture(bool ready) { if (m_imageCapture && ready) { @@ -129,10 +120,12 @@ void ErollThread::readyForCapture(bool ready) } } -void ErollThread::captureError(int, QCameraImageCapture::Error, const QString &errorString) +void ErollThread::captureError(int err, QImageCapture::Error, const QString &errorString) { - qDebug() << "read camera fail:" << errorString; - Q_EMIT processStatus(m_actionId, FaceEnrollException); + if (err > 0) { + qDebug() << "read camera fail:" << errorString; + Q_EMIT processStatus(m_actionId, FaceEnrollException); + } return; } @@ -298,41 +291,35 @@ void VerifyThread::run() { qDebug() << "Verify run"; m_camera.reset(); - auto cameras = QCameraInfo::availableCameras(); - for (const auto &obj : qAsConst(cameras)) { + auto cameras = QMediaDevices::videoInputs(); + for (const QCameraDevice &obj : cameras) { m_camera.reset(new QCamera(obj)); if (m_camera->isAvailable()) break; } + if (m_camera.isNull()) { qDebug() << "open camera fail"; Q_EMIT processStatus(m_actionId, FaceEnrollException); return; } - m_camera->setCaptureMode(QCamera::CaptureStillImage); - m_imageCapture.reset(new QCameraImageCapture(m_camera.data())); - m_imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer); - QList supportedResolutions = m_imageCapture->supportedResolutions(); + m_captureSession.reset(new QMediaCaptureSession); + m_captureSession->setCamera(m_camera.data()); + m_imageCapture.reset(new QImageCapture); + m_captureSession->setImageCapture(m_imageCapture.data()); + QList supportedResolutions = m_camera->cameraDevice().photoResolutions(); if (supportedResolutions.contains(QSize(800, 600))) { - auto settings = m_imageCapture->encodingSettings(); - settings.setResolution(QSize(800, 600)); - m_imageCapture->setEncodingSettings(settings); + m_imageCapture->setResolution(QSize(800, 600)); } - connect(m_camera.data(), &QCamera::stateChanged, this, &VerifyThread::updateCameraState); - connect(m_imageCapture.data(), &QCameraImageCapture::readyForCaptureChanged, this, &VerifyThread::readyForCapture); - connect(m_imageCapture.data(), &QCameraImageCapture::imageCaptured, this, &VerifyThread::processCapturedImage); - connect(m_imageCapture.data(), QOverload::of(&QCameraImageCapture::error), + connect(m_imageCapture.data(), &QImageCapture::readyForCaptureChanged, this, &VerifyThread::readyForCapture); + connect(m_imageCapture.data(), &QImageCapture::imageCaptured, this, &VerifyThread::processCapturedImage); + connect(m_imageCapture.data(), QOverload::of(&QImageCapture::errorOccurred), this, &VerifyThread::captureError); m_camera->start(); } -void VerifyThread::updateCameraState(QCamera::State state) -{ - qDebug() << "updateCameraState" << state; -} - void VerifyThread::readyForCapture(bool ready) { if (m_imageCapture && ready) { @@ -341,10 +328,12 @@ void VerifyThread::readyForCapture(bool ready) } } -void VerifyThread::captureError(int, QCameraImageCapture::Error, const QString &errorString) +void VerifyThread::captureError(int err, QImageCapture::Error, const QString &errorString) { - qDebug() << "read camera fail:" << errorString; - Q_EMIT processStatus(m_actionId, FaceEnrollException); + if (err > 0) { + qDebug() << "read camera fail:" << errorString; + Q_EMIT processStatus(m_actionId, FaceEnrollException); + } return; } @@ -467,11 +456,9 @@ void VerifyThread::Stop() { qDebug() << "VerifyThread::Stop thread:" << QThread::currentThreadId(); - m_imageCapture->cancelCapture(); // 当关闭相机后, 会取消图片的抓取, 此时不需要去处理抓取的图片 - disconnect(m_imageCapture.data(), &QCameraImageCapture::imageCaptured, this, &VerifyThread::processCapturedImage); + disconnect(m_imageCapture.data(), &QImageCapture::imageCaptured, this, &VerifyThread::processCapturedImage); m_camera->stop(); - m_camera->unload(); for (int i = 0; i < m_charaDatas.size(); i++) { if (m_charaDatas[i] != nullptr) { free(m_charaDatas[i]); diff --git a/workmodule.h b/workmodule.h index be3a7a3..3dc5873 100644 --- a/workmodule.h +++ b/workmodule.h @@ -5,20 +5,22 @@ #ifndef WORKMODULE_H #define WORKMODULE_H -#include "qcamera.h" +#include #include #include #include #include #include #include -#include +#include +#include QT_BEGIN_NAMESPACE class QMutex; QT_END_NAMESPACE class DriverManger; +class QMediaCaptureSession; class ErollThread : public QObject { Q_OBJECT @@ -39,14 +41,15 @@ public Q_SLOTS: private Q_SLOTS: - void updateCameraState(QCamera::State state); + // void updateCameraState(QCamera::State state); void readyForCapture(bool ready); - void captureError(int, QCameraImageCapture::Error, const QString &errorString); + void captureError(int err, QImageCapture::Error, const QString &errorString); void processCapturedImage(int id, const QImage &preview); private: QScopedPointer m_camera; - QScopedPointer m_imageCapture; + QScopedPointer m_imageCapture; + QScopedPointer m_captureSession; QString m_actionId; int m_fileSocket; bool m_bFirst; @@ -72,14 +75,15 @@ public Q_SLOTS: void run(); private Q_SLOTS: - void updateCameraState(QCamera::State state); + // void updateCameraState(QCamera::State state); void readyForCapture(bool ready); - void captureError(int, QCameraImageCapture::Error, const QString &errorString); + void captureError(int err, QImageCapture::Error, const QString &errorString); void processCapturedImage(int id, const QImage &preview); private: QScopedPointer m_camera; - QScopedPointer m_imageCapture; + QScopedPointer m_imageCapture; + QScopedPointer m_captureSession; QString m_actionId; QVector m_charaDatas; };