После обнаружения объектов мне нужно прочитать текст в этом месте, поскольку он будет использоваться в качестве имени объекта. /> < /p>
Мне удалось обнаружить объекты, я использовал OpenCV для предварительного обработки изображения и хочу использовать Tesseract для чтения текста из изображения. Кроме того, я играл с разными режимами сегментации страниц, например, psm_single_word и psm_single_block. Первое изображение возвращает «t2, t3 \ n» с использованием psm_single_word (не используя psm_single_block, это возвращает «12,13 \ n»). Однако в большинстве случаев он не возвращает правильный текст. < /P>
предварительно обработанные изображения для справки:
Код: Выделить всё
1st:
Word: "T2,T3\n"
Block: "12,13\n"
Expected: “T2,T3\n”
2nd:
Word: "T2,T3,TAR3\n"
Block: "12,13, 1T AR3\n"
Expected: “T2,T3,TAR3\n”
3rd:
Word: "TA8\n"
Block: "TAR8\n"
Expected: “TAR8\n”
4th:
Word: "T2TT\n"
Block: "12,13,14,\nTAR35TAR4\n"
Expected: “T2,T3,T4,\nTAR3,TAR4”
5th:
Word: "TTT2AA,RRT333A,,\n"
Block: "12,13,\nTAR35\nTA34\n"
Expected: “T2,T3,\nTAR3,\nTAR34\n”
6th:
Word: "T15\n"
Block: "TAR15\n"
Expected: “TAR15\n”
7th:
Word: "T\n"
Block: "111\n"
Expected: “T11\n”
< /code>
Как вы можете видеть, иногда psm_single_word возвращает лучшие результаты, иногда делает psm_single_block, а иногда и ни один из них не возвращает правильный результат. Проблема.Pix* pixImage = pixCreate(eroded.cols, eroded.rows, 8);
for (int y = 0; y < eroded.rows; y++) {
for (int x = 0; x < eroded.cols; x++) {
pixSetPixel(pixImage, x, y, eroded.at(y, x));
}
}
QString dataDir = qApp->applicationDirPath() + QStringLiteral("/tessdata");
QString d = QDir::toNativeSeparators(dataDir);
tesseract::TessBaseAPI tess;
QString result;
// First pass: PSM_SINGLE_WORD
if (tess.Init(d.toLatin1(), "eng", tesseract::OEM_DEFAULT) == 0) {
tess.SetPageSegMode(tesseract::PSM_SINGLE_WORD);
tess.SetVariable("tessedit_char_whitelist", "TAR0123456789, ");
tess.SetVariable("user_words_file", "wordList.txt");
tess.SetVariable("user_patterns_file", "patterns.txt");
tess.SetVariable("load_system_dawg", "0");
tess.SetVariable("load_freq_dawg", "0");
tess.SetVariable("wordrec_enable_assoc", "0");
tess.SetVariable("use_only_my_words", "1");
tess.SetImage(pixImage);
QString wordResult = QString::fromUtf8(tess.GetUTF8Text());
qDebug()
Подробнее здесь: [url]https://stackoverflow.com/questions/79561683/improving-ocr-detection-using-tesseract[/url]