- Add OCR-based fallback logic to extract bankTrExternalId in GetLastTransactionsScript when missing.
- Copy required images, trained data, and config files to the build directory during the CMake process.
This commit is contained in:
parent
baa60d008b
commit
73461b93bf
@ -221,6 +221,14 @@ elseif (APPLE)
|
|||||||
tesseract
|
tesseract
|
||||||
leptonica
|
leptonica
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Копирование изображений в директорию сборки
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_include_directories(ARC PRIVATE
|
target_include_directories(ARC PRIVATE
|
||||||
|
|||||||
@ -401,6 +401,38 @@ void GetLastTransactionsScript::scanRecentTransactions(const DeviceInfo &device,
|
|||||||
tx.bankName = m_appCode;
|
tx.bankName = m_appCode;
|
||||||
tx.bankTime = detail.bankTime;
|
tx.bankTime = detail.bankTime;
|
||||||
tx.bankTrExternalId = detail.bankTrExternalId;
|
tx.bankTrExternalId = detail.bankTrExternalId;
|
||||||
|
|
||||||
|
// Если ID не найден в XML — пробуем через "Документы" + OCR
|
||||||
|
if (tx.bankTrExternalId.isEmpty()) {
|
||||||
|
Node docBtn = xmlScreenParser.findButtonNode("Документы", false);
|
||||||
|
if (!docBtn.isEmpty()) {
|
||||||
|
AdbUtils::makeTap(m_deviceId, docBtn.x(), docBtn.y());
|
||||||
|
QThread::msleep(2000);
|
||||||
|
bool docLoaded = false;
|
||||||
|
for (int da = 0; da < 15; ++da) {
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||||
|
if (!xmlScreenParser.findNodeByContentDesc("Поделиться").isEmpty()) {
|
||||||
|
docLoaded = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
QThread::msleep(1500);
|
||||||
|
}
|
||||||
|
if (docLoaded) {
|
||||||
|
QThread::msleep(500);
|
||||||
|
const QByteArray screenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||||
|
if (!screenshot.isEmpty()) {
|
||||||
|
const QString ocrText = recognizeTextFromImage(screenshot);
|
||||||
|
if (!ocrText.isEmpty()) {
|
||||||
|
tx.bankTrExternalId = extractTransactionId(ocrText);
|
||||||
|
qDebug() << "[GetLastTransactions] OCR extracted ID:" << tx.bankTrExternalId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AdbUtils::goBack(m_deviceId);
|
||||||
|
QThread::msleep(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tx.status = TransactionStatus::Complete;
|
tx.status = TransactionStatus::Complete;
|
||||||
tx.timestamp = DateUtils::getUtcNow();
|
tx.timestamp = DateUtils::getUtcNow();
|
||||||
if (!detail.name.isEmpty()) tx.name = detail.name;
|
if (!detail.name.isEmpty()) tx.name = detail.name;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user