#ifndef INTERACTIVEFACE_H #define INTERACTIVEFACE_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "template_singleton.h" #include "sdk/hrsdk/inc/amcomdef.h" #include "sdk/hrsdk/inc/arcsoft_face_sdk.h" #include "sdk/hrsdk/inc/asvloffscreen.h" #include "sdk/hrsdk/inc/merror.h" #include "user/filelogger.h" #define INTERACTIVE_FACE_IMAGE_URL "InteractiveFaceImage" class InteractiveFace : public QQuickImageProvider { SINGLETON_DEFINE(InteractiveFace) // 定义为单例类 Q_OBJECT private: InteractiveFace(QObject *parent = nullptr); ~InteractiveFace(); // 获取图像url QString getImageUrl(); public: // 设置图像采集回调 Q_INVOKABLE void setCameraImageGatherCallBack(QJSValue callback); // 设置发现人脸回调 Q_INVOKABLE void setCameraImageAppearCallBack(QJSValue callback); // 设置人脸停留回调(5s) Q_INVOKABLE void setCameraImageRemainCallBack(QJSValue callback); // 回调函数设置 Q_INVOKABLE void setCameraImageCallBack(QJSValue gatherCallback, QJSValue appearCallback, QJSValue remainCallback); // 发现人脸状态 Q_INVOKABLE void setCallBackFaceStatus(QJSValue isAppearCallback); // 相机图像播放 (采集) Q_INVOKABLE void cameraImagePlay(); // 相机图像停止 (采集) Q_INVOKABLE void cameraImageStop(); // 获取图像 QImage getImage(); protected: QImage requestImage(const QString &, QSize *, const QSize &); void timerEvent(QTimerEvent *event); private: // 初始化虹软人脸识别 void initEngine(); // 销毁虹软人脸识别 void destroyEngine(); // 初始化相机 void initCamera(); // 销毁相机 void destroyCamera(); // 判断电脑上是否存在摄像头 bool hasCamera(); void cameraPlay(); void cameraStop(); public: QMutex m_mutex; private: int m_timerId; // 当前定时器ID int m_FrameId; // 帧过滤 QImage m_image; // 图像 MHandle m_engine; // 虹软引擎 QCamera m_camera; // 照相机 QVideoSink m_videoSink; // 视频接收器 QMediaCaptureSession m_session; // 媒体连接器 // 记录信息 qint32 m_laseCount = 0; qint64 m_laseEpoch = 0; QJSValue m_imageGatherCallback; // 图像采集回调 QJSValue m_imageAppearCallback; // 发现人脸回调 QJSValue m_imageRemainCallback; // 人脸停留回调 QJSValue m_isAppearCallback; }; #endif // INTERACTIVEFACE_H