diff --git a/android/ozon/GetLastTransactionsScript.cpp b/android/ozon/GetLastTransactionsScript.cpp index 5364d90..9ab65e1 100644 --- a/android/ozon/GetLastTransactionsScript.cpp +++ b/android/ozon/GetLastTransactionsScript.cpp @@ -33,11 +33,24 @@ static QString recognizeTextFromImage(const QByteArray &pngData) { return {}; } - api->SetImage(pix); + // Convert to grayscale for better OCR accuracy + Pix *gray = pixConvertRGBToGray(pix, 0.0f, 0.0f, 0.0f); + pixDestroy(&pix); + if (!gray) { + qWarning() << "[OCR] Failed to convert to grayscale"; + api->End(); + delete api; + return {}; + } + + api->SetImage(gray); + // adb screencap PNGs lack DPI metadata; set 300 DPI so Tesseract + // interprets character sizes correctly + api->SetSourceResolution(300); char *text = api->GetUTF8Text(); QString result = QString::fromUtf8(text).trimmed(); delete[] text; - pixDestroy(&pix); + pixDestroy(&gray); api->End(); delete api; @@ -45,8 +58,9 @@ static QString recognizeTextFromImage(const QByteArray &pngData) { } static QString extractTransactionId(const QString &ocrText) { - // "ID операции A60130542076330K0000040011670301" или "ID операции = Аб60650..." - QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-я0-9]+))"); + // Ищем по слову "операции" — OCR часто искажает "ID" перед ним + // \S{1,3} вместо точного "ID" покрывает любые OCR-ошибки (1О, 1Ю, ID, 10 и т.д.) + QRegularExpression reId(R"(\S{1,3}\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9]+))"); if (auto m = reId.match(ocrText); m.hasMatch()) return m.captured(1); // "№ Ф-2026-25235663" @@ -333,6 +347,8 @@ void GetLastTransactionsScript::doStart() { qDebug() << "[GetLastTransactions] OCR result, txId:" << saved.id << "\n--- OCR TEXT START ---\n" << ocrText << "\n--- OCR TEXT END ---"; + qDebug() << "[GetLastTransactions] OCR hex:" + << ocrText.left(200).toUtf8().toHex(' '); const QString txId = extractTransactionId(ocrText); if (!txId.isEmpty()) { TransactionDAO::updateBankTrExternalId(saved.id, txId); diff --git a/eng.traineddata b/eng.traineddata new file mode 100644 index 0000000..f4744c2 Binary files /dev/null and b/eng.traineddata differ