es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo detectar palabras en una imagen con OpenCV y Tesseract de manera correcta.

Estoy trabajando en una aplicación que lee un archivo de imagen con OpenCV y procesa las palabras en ella con Tesseract.
Con el siguiente código, Tesseract detecta rectángulos adicionales que no contienen texto.

“`C++
void Application::Application::OpenAndProcessImageFile(void)
{
OPENFILENAMEA ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAMEA));

char szFile[260] = { 0 };
// Inicializar los campos restantes de la estructura OPENFILENAMEA
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = mWindow->getHandle();
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "JPG\0<em>.JPG\0PNG\0</em>.PNG\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Abrir el cuadro de diálogo de la imagen y seleccionar la imagen
if (GetOpenFileNameA(&ofn) == TRUE) {
std::string filePath = ofn.lpstrFile;

<pre><code>// Cargar la imagen
mImage = cv::imread(filePath.c_str());

// Procesar la imagen
tesseract::TessBaseAPI ocr = tesseract::TessBaseAPI();

ocr.Init(NULL, "eng");
ocr.SetImage(mImage.data, mImage.cols, mImage.rows, 3, mImage.step);

Boxa* bounds = ocr.GetWords(NULL);
for (int i = 0; i < bounds->n; ++i) {
Box* b = bounds->box[i];
cv::rectangle(mImage, { b->x,b->y,b->w,b->h }, { 0, 255, 0 }, 2);
}

ocr.End();

// Mostrar la imagen
cv::destroyAllWindows();
cv::imshow("İşlenmiş Resim", mImage);
</code></pre>

}

}
“`
Y aquí está la imagen de salida

Como puede ver, Tesseract procesa áreas que no contienen palabras en absoluto.
¿Cómo puedo solucionar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes intentar usar el método SetVariable de la clase TessBaseAPI para establecer la variable tessedit_char_whitelist como una lista de caracteres que esperas encontrar en la imagen. Esto limitará los caracteres que Tesseract intentará reconocer y debería reducir el número de falsos positivos. También puedes intentar establecer la variable tessedit_min_sane_kn_sp como un valor mayor, lo que aumentará el tamaño mínimo de un carácter que Tesseract intentará reconocer.

Comments are closed.