Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 字符/单词的坐标[OCR应用程序]_Android_Opencv_Ocr_Tess Two - Fatal编程技术网

Android 字符/单词的坐标[OCR应用程序]

Android 字符/单词的坐标[OCR应用程序],android,opencv,ocr,tess-two,Android,Opencv,Ocr,Tess Two,因此,基本上,我正在创建一个android应用程序(使用tesseract和OpenCV),当经过预处理和扫描步骤后给出一个单词时,它会在该单词周围绘制一个矩形-基本上是“找到”该单词并对其进行标记。但是我想知道如何得到一个字符的坐标?或者至少一个字?我有每一行的坐标,但坐标不是相对于“主图片”,而是我拥有的“文本块”的坐标。也许有人已经/知道关于如何找到单词/字符坐标的解释/教程或某种信息。非常感谢。此示例代码取自tesseract的API示例Wiki页面,应该有助于: 关注这两条线: in

因此,基本上,我正在创建一个android应用程序(使用tesseract和OpenCV),当经过预处理和扫描步骤后给出一个单词时,它会在该单词周围绘制一个矩形-基本上是“找到”该单词并对其进行标记。但是我想知道如何得到一个字符的坐标?或者至少一个字?我有每一行的坐标,但坐标不是相对于“主图片”,而是我拥有的“文本块”的坐标。也许有人已经/知道关于如何找到单词/字符坐标的解释/教程或某种信息。非常感谢。

此示例代码取自tesseract的API示例Wiki页面,应该有助于:

关注这两条线:
intx1,y1,x2,y2;
ri->边界框(标高,&x1,&y1,&x2,&y2)


此示例代码取自tesseract的API示例Wiki页面,有助于:

关注这两条线:
intx1,y1,x2,y2;
ri->边界框(标高,&x1,&y1,&x2,&y2)


我一直在试图理解我得到答案的格式,因为“ri.getBoundingBox-只有一个参数(级别),如文档所示:(resultIterator->getBoundingBox)。使用int[]box=ri.getBoundingBox(TessBaseAPI.PageIteratorLevel.RIL_WORD)后,我得到的结果是这种格式的:[I@bf79a99 [I@4dda15e [I@6a317e0Ok.很抱歉,我对TySeAct的java包装了解不多。我只使用Android上的C++接口。如果你尝试TestBaseP.PaGeIdActualLeal.RiLi符号作为级别,你应该从理论上得到角色坐标,我一直在尝试以什么样的格式来理解答案,因为ri.getBoundingBox-只有一个参数(级别),如文档所示:(resultIterator->getBoundingBox)。使用int[]box=ri.getBoundingBox(TessBaseAPI.PageIteratorLevel.RIL_WORD)后,我将以这种格式获得结果:[I@bf79a99 [I@4dda15e [I@6a317e0Ok.对不起,我对TySeAct的java包装了解不多。我只使用Android上的C++接口。如果你尝试TestBaseP.PaGeIdActualLeal.RiLi符号作为级别,你应该从理论上得到字符坐标。
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)));
}