Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
40c60193d1 |
@ -58,13 +58,12 @@ void Application::onNewEnrollResult(uint16_t userid) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::onNewVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed) {
|
void Application::onNewVerifyResult(uint16_t userid, const QString &username) {
|
||||||
m_palmUsername = username;
|
m_palmUsername = username;
|
||||||
m_palmId = userid;
|
m_palmId = userid;
|
||||||
QTimer::singleShot(0, this, [this, userid, username, elapsed]() {
|
QTimer::singleShot(0, this, [this, userid, username]() {
|
||||||
emit newStatusTip(Info, QString("%1,识别耗时: %2ms")
|
emit newStatusTip(Info,
|
||||||
.arg(userid == ModuleCommunication::InvalidUserId ? "未录入用户" : username)
|
QString("%1").arg(userid == ModuleCommunication::InvalidUserId ? "未录入用户" : username));
|
||||||
.arg(elapsed));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,24 +191,19 @@ void Application::closeUVC() {
|
|||||||
emit uvcOpenedChanged();
|
emit uvcOpenedChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::verify(bool captureImage, uint8_t timeout) {
|
void Application::verify(uint8_t timeout) {
|
||||||
if (m_communication->currentMessageId() != ModuleCommunication::Idle) {
|
if (m_communication->currentMessageId() != ModuleCommunication::Idle) {
|
||||||
m_communication->reset();
|
m_communication->reset();
|
||||||
}
|
}
|
||||||
if (captureImage) {
|
|
||||||
m_communication->verifyExtended(captureImage, timeout);
|
|
||||||
} else {
|
|
||||||
m_communication->verify(timeout);
|
m_communication->verify(timeout);
|
||||||
}
|
|
||||||
m_verifyExtendedMode = captureImage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::enroll(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
void Application::enroll(const QString &username, uint8_t timeout) {
|
||||||
uint8_t timeout) {
|
|
||||||
if (m_communication->currentMessageId() != ModuleCommunication::Idle) {
|
if (m_communication->currentMessageId() != ModuleCommunication::Idle) {
|
||||||
m_communication->reset();
|
m_communication->reset();
|
||||||
}
|
}
|
||||||
m_communication->enroll(username.toStdString(), strictMode, excludeMode, persistence, timeout);
|
m_communication->enroll(username.toStdString(), timeout);
|
||||||
m_palmUsername = username;
|
m_palmUsername = username;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,15 +221,6 @@ void Application::deleteAll() {
|
|||||||
m_communication->deleteAll();
|
m_communication->deleteAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::enrollExtended(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
|
||||||
uint8_t timeout) {
|
|
||||||
if (m_communication->currentMessageId() != ModuleCommunication::Idle) {
|
|
||||||
m_communication->reset();
|
|
||||||
}
|
|
||||||
m_communication->enrollExtended(username.toStdString(), strictMode, excludeMode, persistence, timeout);
|
|
||||||
m_palmUsername = username;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::uploadImage(const QString &path, const QString &username, int operation) {
|
void Application::uploadImage(const QString &path, const QString &username, int operation) {
|
||||||
m_uploadImageSendedSize = 0;
|
m_uploadImageSendedSize = 0;
|
||||||
ModuleCommunication::UploadImageInformation request;
|
ModuleCommunication::UploadImageInformation request;
|
||||||
@ -453,11 +438,7 @@ void Application::onCommandFinished(ModuleCommunication::MessageId messageId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Application::onVerifyTimeout() {
|
void Application::onVerifyTimeout() {
|
||||||
if (m_verifyExtendedMode) {
|
|
||||||
m_communication->verifyExtended(m_verifyExtendedMode, 120);
|
|
||||||
} else {
|
|
||||||
m_communication->verify(120);
|
m_communication->verify(120);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Application::startOta(const QString &path) {
|
bool Application::startOta(const QString &path) {
|
||||||
|
@ -51,11 +51,8 @@ public:
|
|||||||
Q_INVOKABLE void close();
|
Q_INVOKABLE void close();
|
||||||
Q_INVOKABLE void closeUVC();
|
Q_INVOKABLE void closeUVC();
|
||||||
Q_INVOKABLE bool startOta(const QString &path);
|
Q_INVOKABLE bool startOta(const QString &path);
|
||||||
Q_INVOKABLE void verify(bool captureImage, uint8_t timeout);
|
Q_INVOKABLE void verify(uint8_t timeout);
|
||||||
Q_INVOKABLE void enroll(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
Q_INVOKABLE void enroll(const QString &username, uint8_t timeout);
|
||||||
uint8_t timeout);
|
|
||||||
Q_INVOKABLE void enrollExtended(const QString &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
|
||||||
uint8_t timeout);
|
|
||||||
Q_INVOKABLE void deleteUser(uint16_t userid);
|
Q_INVOKABLE void deleteUser(uint16_t userid);
|
||||||
Q_INVOKABLE void deleteAll();
|
Q_INVOKABLE void deleteAll();
|
||||||
Q_INVOKABLE void uploadImage(const QString &path, const QString &username, int operation);
|
Q_INVOKABLE void uploadImage(const QString &path, const QString &username, int operation);
|
||||||
@ -88,7 +85,7 @@ signals:
|
|||||||
protected:
|
protected:
|
||||||
Application(int &argc, char **argv);
|
Application(int &argc, char **argv);
|
||||||
void onNewEnrollResult(uint16_t userid);
|
void onNewEnrollResult(uint16_t userid);
|
||||||
void onNewVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed);
|
void onNewVerifyResult(uint16_t userid, const QString &username);
|
||||||
void onNewPalmFeature(const PalmFeature &feature);
|
void onNewPalmFeature(const PalmFeature &feature);
|
||||||
void onErrorOccurred(ModuleCommunication::NoteId note, const QString &error, const QString &detailMessage);
|
void onErrorOccurred(ModuleCommunication::NoteId note, const QString &error, const QString &detailMessage);
|
||||||
void onNewImageInfo(ModuleCommunication::MessageId messageId, uint32_t size, const uint8_t *md5);
|
void onNewImageInfo(ModuleCommunication::MessageId messageId, uint32_t size, const uint8_t *md5);
|
||||||
@ -106,7 +103,6 @@ private:
|
|||||||
std::shared_ptr<Database> m_database;
|
std::shared_ptr<Database> m_database;
|
||||||
|
|
||||||
bool m_persistenceMode = true; // 模组持续识别
|
bool m_persistenceMode = true; // 模组持续识别
|
||||||
bool m_verifyExtendedMode = false;
|
|
||||||
bool m_persistenceModeStarted = false;
|
bool m_persistenceModeStarted = false;
|
||||||
int m_persistenceVerifyInterval = 1;
|
int m_persistenceVerifyInterval = 1;
|
||||||
QTimer *m_verifyTimer = nullptr;
|
QTimer *m_verifyTimer = nullptr;
|
||||||
|
@ -52,18 +52,6 @@ void ModuleCommunication::verify(uint8_t timeout) {
|
|||||||
LOG_CAT(info, GUI) << Separator;
|
LOG_CAT(info, GUI) << Separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleCommunication::verifyExtended(bool captureImage, uint8_t timeout) {
|
|
||||||
VerifyRequest data = {0};
|
|
||||||
data.timeout = timeout;
|
|
||||||
data.save_image = captureImage ? 0x01 : 0x00;
|
|
||||||
auto [frameData, frameSize] = generateFrame(VerifyExtended, reinterpret_cast<const uint8_t *>(&data), sizeof(data));
|
|
||||||
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
|
||||||
setCurrentMessageIdStatus(VerifyExtended);
|
|
||||||
|
|
||||||
LOG_CAT(info, GUI) << "发送扩展识别指令: " << protocolDataFormatString(frameData, frameSize);
|
|
||||||
LOG_CAT(info, GUI) << Separator;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModuleCommunication::reset() {
|
void ModuleCommunication::reset() {
|
||||||
auto [frameData, frameSize] = generateFrame(Reset);
|
auto [frameData, frameSize] = generateFrame(Reset);
|
||||||
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
||||||
@ -72,13 +60,9 @@ void ModuleCommunication::reset() {
|
|||||||
LOG_CAT(info, GUI) << Separator;
|
LOG_CAT(info, GUI) << Separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleCommunication::enroll(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
void ModuleCommunication::enroll(const std::string &username, uint8_t timeout) {
|
||||||
uint8_t timeout) {
|
|
||||||
EnrollRequest data = {0};
|
EnrollRequest data = {0};
|
||||||
data.strictMode = strictMode ? 1 : 0;
|
|
||||||
data.excludeMode = excludeMode;
|
|
||||||
data.timeout = timeout;
|
data.timeout = timeout;
|
||||||
data.skipSave = persistence ? 0 : 1;
|
|
||||||
strncpy(reinterpret_cast<char *>(data.username), username.c_str(), sizeof(data.username));
|
strncpy(reinterpret_cast<char *>(data.username), username.c_str(), sizeof(data.username));
|
||||||
auto [frameData, frameSize] = generateFrame(EnrollSingle, reinterpret_cast<const uint8_t *>(&data), sizeof(data));
|
auto [frameData, frameSize] = generateFrame(EnrollSingle, reinterpret_cast<const uint8_t *>(&data), sizeof(data));
|
||||||
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
||||||
@ -89,22 +73,6 @@ void ModuleCommunication::enroll(const std::string &username, bool strictMode, u
|
|||||||
LOG_CAT(info, GUI) << Separator;
|
LOG_CAT(info, GUI) << Separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleCommunication::enrollExtended(const std::string &username, bool strictMode, uint8_t excludeMode,
|
|
||||||
bool persistence, uint8_t timeout) {
|
|
||||||
EnrollRequest data = {};
|
|
||||||
data.strictMode = strictMode ? 1 : 0;
|
|
||||||
data.excludeMode = excludeMode;
|
|
||||||
data.timeout = timeout;
|
|
||||||
data.skipSave = persistence ? 0 : 1;
|
|
||||||
strncpy(reinterpret_cast<char *>(data.username), username.c_str(), sizeof(data.username));
|
|
||||||
auto [frameData, frameSize] = generateFrame(EnrollExtended, reinterpret_cast<const uint8_t *>(&data), sizeof(data));
|
|
||||||
m_serialPort->write(reinterpret_cast<const char *>(frameData), frameSize);
|
|
||||||
setCurrentMessageIdStatus(EnrollExtended);
|
|
||||||
LOG_CAT(info, GUI) << "发送获取注册照片指令: " << protocolDataFormatString(frameData, frameSize);
|
|
||||||
LOG_CAT(info, GUI) << "用户名: " << username << ", 超时时间: " << static_cast<int>(timeout) << "s";
|
|
||||||
LOG_CAT(info, GUI) << Separator;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModuleCommunication::deleteUser(uint16_t userid) {
|
void ModuleCommunication::deleteUser(uint16_t userid) {
|
||||||
uint16_t n = htons(userid);
|
uint16_t n = htons(userid);
|
||||||
auto [frameData, frameSize] = generateFrame(DeleteUser, reinterpret_cast<const uint8_t *>(&n), sizeof(n));
|
auto [frameData, frameSize] = generateFrame(DeleteUser, reinterpret_cast<const uint8_t *>(&n), sizeof(n));
|
||||||
@ -216,25 +184,21 @@ void ModuleCommunication::processPackage(const uint8_t *data, uint16_t size) {
|
|||||||
if (result == Success) {
|
if (result == Success) {
|
||||||
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
||||||
uint16_t userid = ntohs(info->userid);
|
uint16_t userid = ntohs(info->userid);
|
||||||
uint16_t elapsed = ntohs(info->elapsed);
|
|
||||||
LOG_CAT(info, GUI) << "用户ID: " << userid
|
LOG_CAT(info, GUI) << "用户ID: " << userid
|
||||||
<< ", 用户名: " << std::string_view(reinterpret_cast<const char *>(info->username))
|
<< ", 用户名: " << std::string_view(reinterpret_cast<const char *>(info->username));
|
||||||
<< ", 耗时: " << elapsed << "ms";
|
emit newVerifyResult(userid, reinterpret_cast<const char *>(info->username));
|
||||||
emit newVerifyResult(userid, reinterpret_cast<const char *>(info->username), elapsed);
|
|
||||||
} else if (result == Failed4Timeout) {
|
} else if (result == Failed4Timeout) {
|
||||||
LOG_CAT(info, GUI) << "识别超时。";
|
LOG_CAT(info, GUI) << "识别超时。";
|
||||||
} else if (result == Rejected) {
|
} else if (result == Rejected) {
|
||||||
LOG_CAT(info, GUI) << "模组拒绝该命令。";
|
LOG_CAT(info, GUI) << "模组拒绝该命令。";
|
||||||
} else if (result == Failed4UnknownUser) {
|
} else if (result == Failed4UnknownUser) {
|
||||||
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
||||||
uint16_t elapsed = ntohs(info->elapsed);
|
emit newVerifyResult(InvalidUserId, "");
|
||||||
emit newVerifyResult(InvalidUserId, "", elapsed);
|
LOG_CAT(info, GUI) << "未录入用户";
|
||||||
LOG_CAT(info, GUI) << "未录入用户, 耗时: " << elapsed << "ms";
|
|
||||||
} else if (result == Failed4UnknownReason) {
|
} else if (result == Failed4UnknownReason) {
|
||||||
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
auto info = reinterpret_cast<const VerifyReply *>(data + 7);
|
||||||
uint16_t elapsed = ntohs(info->elapsed);
|
emit newVerifyResult(InvalidUserId, "");
|
||||||
emit newVerifyResult(InvalidUserId, "", elapsed);
|
LOG_CAT(info, GUI) << "未知错误";
|
||||||
LOG_CAT(info, GUI) << "未知错误, 耗时: " << elapsed << "ms";
|
|
||||||
} else {
|
} else {
|
||||||
LOG_CAT(info, GUI) << "未知错误(" << static_cast<int>(result) << ")。";
|
LOG_CAT(info, GUI) << "未知错误(" << static_cast<int>(result) << ")。";
|
||||||
}
|
}
|
||||||
@ -324,27 +288,6 @@ void ModuleCommunication::processPackage(const uint8_t *data, uint16_t size) {
|
|||||||
case UploadImageInfo: {
|
case UploadImageInfo: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case UploadImageData: {
|
|
||||||
auto info = reinterpret_cast<const UploadImageReply *>(data + 7);
|
|
||||||
if (result == Success) {
|
|
||||||
if (info->operation == 0) {
|
|
||||||
LOG_CAT(info, GUI) << "图片下发注册成功,用户ID: " << ntohs(info->userid);
|
|
||||||
} else if (info->operation == 1) {
|
|
||||||
auto result = reinterpret_cast<const UploadImageVerifyReply *>(info);
|
|
||||||
LOG_CAT(info, GUI) << "图片下发识别成功,用户ID: " << ntohs(result->userid) << ", 用户名: "
|
|
||||||
<< std::string_view(reinterpret_cast<const char *>(result->result.username))
|
|
||||||
<< ", 耗时: " << ntohs(result->result.elapsed) << "ms";
|
|
||||||
} else {
|
|
||||||
LOG(warning) << "unknown upload image operation: " << info->operation;
|
|
||||||
}
|
|
||||||
LOG_CAT(info, GUI) << Separator;
|
|
||||||
} else if (result == Needmore) {
|
|
||||||
} else {
|
|
||||||
LOG(info) << "upload image failed, operation: " << static_cast<uint16_t>(info->operation)
|
|
||||||
<< ", status: " << static_cast<uint16_t>(result);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GetCurrentStatus: {
|
case GetCurrentStatus: {
|
||||||
LOG_CAT(info, GUI) << "模组: " << protocolDataFormatString(data, size);
|
LOG_CAT(info, GUI) << "模组: " << protocolDataFormatString(data, size);
|
||||||
LOG_CAT(info, GUI) << "模组当前状态: " << static_cast<int>(data[7]);
|
LOG_CAT(info, GUI) << "模组当前状态: " << static_cast<int>(data[7]);
|
||||||
|
@ -87,8 +87,8 @@ public:
|
|||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
struct VerifyRequest {
|
struct VerifyRequest {
|
||||||
uint8_t save_image;
|
uint8_t reserved;
|
||||||
uint8_t timeout; // timeout, unit second, default 10s
|
uint8_t timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PalmStateNote {
|
struct PalmStateNote {
|
||||||
@ -102,16 +102,14 @@ public:
|
|||||||
|
|
||||||
struct EnrollRequest {
|
struct EnrollRequest {
|
||||||
uint8_t username[32];
|
uint8_t username[32];
|
||||||
uint8_t strictMode = 0;
|
uint8_t reserved1[3];
|
||||||
uint8_t excludeMode = 0; // 掌静脉库里面是否已经存在 0:不进行验证 1:只进行比对 2:如果存在,则现在不予录入
|
|
||||||
uint8_t skipSave = 0;
|
|
||||||
uint8_t timeout;
|
uint8_t timeout;
|
||||||
uint8_t reserved[4];
|
uint8_t reserved2[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EnrollReply {
|
struct EnrollReply {
|
||||||
uint16_t userid;
|
uint16_t userid;
|
||||||
uint8_t operation;
|
uint8_t reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PalmVeinInformation {
|
struct PalmVeinInformation {
|
||||||
@ -148,7 +146,7 @@ public:
|
|||||||
struct VerifyReply {
|
struct VerifyReply {
|
||||||
uint16_t userid;
|
uint16_t userid;
|
||||||
uint8_t username[UsernameSize]; // 32Bytes
|
uint8_t username[UsernameSize]; // 32Bytes
|
||||||
uint16_t elapsed; // 此时识别耗时时间
|
uint8_t reserved[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VerifyExtendReply : public VerifyReply {
|
struct VerifyExtendReply : public VerifyReply {
|
||||||
@ -195,12 +193,9 @@ public:
|
|||||||
explicit ModuleCommunication(QObject *parent = nullptr);
|
explicit ModuleCommunication(QObject *parent = nullptr);
|
||||||
bool open(const QString &portName, int baudRate);
|
bool open(const QString &portName, int baudRate);
|
||||||
void verify(uint8_t timeout);
|
void verify(uint8_t timeout);
|
||||||
void verifyExtended(bool captureImage, uint8_t timeout);
|
|
||||||
Q_INVOKABLE void reset();
|
Q_INVOKABLE void reset();
|
||||||
|
|
||||||
void enroll(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence, uint8_t timeout);
|
void enroll(const std::string &username, uint8_t timeout);
|
||||||
void enrollExtended(const std::string &username, bool strictMode, uint8_t excludeMode, bool persistence,
|
|
||||||
uint8_t timeout);
|
|
||||||
Q_INVOKABLE void deleteUser(uint16_t userid);
|
Q_INVOKABLE void deleteUser(uint16_t userid);
|
||||||
Q_INVOKABLE void deleteAll();
|
Q_INVOKABLE void deleteAll();
|
||||||
Q_INVOKABLE void requestUniqueId();
|
Q_INVOKABLE void requestUniqueId();
|
||||||
@ -222,7 +217,7 @@ signals:
|
|||||||
* @param username
|
* @param username
|
||||||
* @param elapsed ms毫秒
|
* @param elapsed ms毫秒
|
||||||
*/
|
*/
|
||||||
void newVerifyResult(uint16_t userid, const QString &username, uint16_t elapsed);
|
void newVerifyResult(uint16_t userid, const QString &username);
|
||||||
void newEnrollResult(uint16_t userid);
|
void newEnrollResult(uint16_t userid);
|
||||||
void newPalmFeature(const PalmFeature &feature);
|
void newPalmFeature(const PalmFeature &feature);
|
||||||
void newImageInfo(MessageId id, uint32_t size, const uint8_t *md5);
|
void newImageInfo(MessageId id, uint32_t size, const uint8_t *md5);
|
||||||
|
@ -16,19 +16,6 @@ RowLayout {
|
|||||||
id: enrollName
|
id: enrollName
|
||||||
implicitWidth: 100
|
implicitWidth: 100
|
||||||
}
|
}
|
||||||
Label {
|
|
||||||
text: qsTr("严格模式")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
id: strictMode
|
|
||||||
}
|
|
||||||
Label {
|
|
||||||
text: qsTr("互斥模式")
|
|
||||||
}
|
|
||||||
ComboBox {
|
|
||||||
id: excludeMode
|
|
||||||
model: ["无", "仅比对", "互斥"]
|
|
||||||
}
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("超时时间")
|
text: qsTr("超时时间")
|
||||||
}
|
}
|
||||||
@ -38,21 +25,6 @@ RowLayout {
|
|||||||
text: "30"
|
text: "30"
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("持久化")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
id: persistence
|
|
||||||
checked: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("保存图片")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
id: extendedMode
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
property bool enrolling: App.module ? (App.module.currentMessageId
|
property bool enrolling: App.module ? (App.module.currentMessageId
|
||||||
=== ModuleCommunication.EnrollSingle)
|
=== ModuleCommunication.EnrollSingle)
|
||||||
@ -61,16 +33,8 @@ RowLayout {
|
|||||||
onClicked: {
|
onClicked: {
|
||||||
if (enrolling) {
|
if (enrolling) {
|
||||||
App.module.reset()
|
App.module.reset()
|
||||||
} else if (extendedMode.checked) {
|
|
||||||
App.enrollExtended(enrollName.text, strictMode.checked,
|
|
||||||
excludeMode.currentIndex,
|
|
||||||
persistence.checked,
|
|
||||||
parseInt(enrollTimeout.text))
|
|
||||||
} else {
|
} else {
|
||||||
App.enroll(enrollName.text, strictMode.checked,
|
App.enroll(enrollName.text, parseInt(enrollTimeout.text))
|
||||||
excludeMode.currentIndex,
|
|
||||||
persistence.checked,
|
|
||||||
parseInt(enrollTimeout.text))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,12 +60,6 @@ RowLayout {
|
|||||||
checked: App.persistenceMode
|
checked: App.persistenceMode
|
||||||
onToggled: App.persistenceMode = !App.persistenceMode
|
onToggled: App.persistenceMode = !App.persistenceMode
|
||||||
}
|
}
|
||||||
Label {
|
|
||||||
text: qsTr("保存图片")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
id: extendedVerifyMode
|
|
||||||
}
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("识别间隔(s)")
|
text: qsTr("识别间隔(s)")
|
||||||
}
|
}
|
||||||
@ -118,7 +76,7 @@ RowLayout {
|
|||||||
App.module.reset()
|
App.module.reset()
|
||||||
} else {
|
} else {
|
||||||
App.persistenceVerifyInterval = parseInt(verifyIntetval.text)
|
App.persistenceVerifyInterval = parseInt(verifyIntetval.text)
|
||||||
App.verify(extendedVerifyMode.checked, parseInt(verifyTimeout.text))
|
App.verify(parseInt(verifyTimeout.text))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,57 +52,6 @@ Item {
|
|||||||
text: "OTA升级"
|
text: "OTA升级"
|
||||||
onClicked: loader.active = true
|
onClicked: loader.active = true
|
||||||
}
|
}
|
||||||
Row {
|
|
||||||
Label {
|
|
||||||
text: qsTr("日志")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
id: debugMode
|
|
||||||
onToggled: App.module.setDebugEnabled(debugMode.checked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupBox {
|
|
||||||
title: "图片注册"
|
|
||||||
visible: true
|
|
||||||
GridLayout {
|
|
||||||
columns: 2
|
|
||||||
TextField {
|
|
||||||
id: imagePath
|
|
||||||
Layout.columnSpan: 2
|
|
||||||
implicitWidth: 200
|
|
||||||
placeholderText: "请选择图片"
|
|
||||||
onPressed: {
|
|
||||||
fileDialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Label {
|
|
||||||
text: qsTr("用户姓名")
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: imageEnrollName
|
|
||||||
implicitWidth: 100
|
|
||||||
text: "测试下发"
|
|
||||||
}
|
|
||||||
Label {
|
|
||||||
text: qsTr("循环")
|
|
||||||
}
|
|
||||||
Switch {
|
|
||||||
checked: App.imageUploadPersistenceMode
|
|
||||||
onToggled: {
|
|
||||||
App.imageUploadPersistenceMode = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
text: "注册"
|
|
||||||
onClicked: App.uploadImage(imagePath.text, imageEnrollName.text, 0)
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
text: "识别"
|
|
||||||
onClicked: App.uploadImage(imagePath.text, imageEnrollName.text, 1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user