Координаты символа / слова [приложение OCR] - PullRequest
0 голосов
/ 22 мая 2018

Итак, в основном, я создаю приложение для Android (с использованием tesseract и OpenCV), которое при задании слова после шагов предварительной обработки и сканирования рисует прямоугольник вокруг этого слова - в основном «находит» слово и отмечает его.Однако мне интересно, как получить координаты персонажа?или хотя бы слово?У меня есть координаты каждой строки, но координаты не относятся к «основной картинке», а только к координатам «текстовых блоков», которые у меня есть.Может быть, кто-то знает / знает объяснение / учебник или какую-то информацию о том, как найти координаты слова / символа.Был бы очень признателен.

1 Ответ

0 голосов
/ 22 мая 2018

Этот пример кода, взятый со страницы Wiki примеров API из tesseract, должен помочь: APIExamples

Сосредоточиться на этих двух строках: int x1, y1, x2, y2; ri->BoundingBox(level, &x1, &y1, &x2, &y2);

Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
api->SetImage(image);
api->SetVariable("save_blob_choices", "T");
api->SetRectangle(37, 228, 548, 31);
api->Recognize(NULL);

tesseract::ResultIterator* ri = api->GetIterator();
tesseract::PageIteratorLevel level = tesseract::RIL_SYMBOL;
if(ri != 0) {
  do {
      const char* symbol = ri->GetUTF8Text(level);
      float conf = ri->Confidence(level);
      int x1, y1, x2, y2;
      ri->BoundingBox(level, &x1, &y1, &x2, &y2);
      if(symbol != 0) {
          printf("symbol %s, conf: %f", symbol, conf);
          bool indent = false;
          tesseract::ChoiceIterator ci(*ri);
          do {
              if (indent) printf("\t\t ");
              printf("\t- ");
              const char* choice = ci.GetUTF8Text();
              printf("%s conf: %f\n", choice, ci.Confidence());
              indent = true;
          } while(ci.Next());
      }
      printf("---------------------------------------------\n");
      delete[] symbol;
  } while((ri->Next(level)));
}
...