Detectar texto y posición en imágenes

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Detectar texto y posición en imágenes

Mensaje por Jonny »

Hola,

¡Pensaba que ya no iría más el foro!: intenté entrar varios días, pero no había manera ;)

Necesito hacer algo, de lo que más o menos tengo la idea pero no sé exactamente como hacerlo. Se me antoja más complicado de lo que me parece ...

Como trabajo con la electrónica, he de consultar frecuentemente diagramas.

Y quisiera con AutoIT, detectar el texto que contenga un diagrama, y modificarlo: para cambiar el texto, quitarlo o lo que sea.

Sé que hacer un OCR con AutoIT no es tan difícil, pues hay muchos ejemplos de como hacerlo con librerías externas como Tesseract u otras DLL's.

Pero con eso hasta donde sé, no es posible saber en qué posición exacta se encuentra el texto.

Para eso supongo que hay que usar las funciones pixel de AutoIt, y/o la librería GDI (que no domino en absoluto).

Me interesaría detectar texto (que pueden ser letras sueltas o palabras) en una imagen de un diagrama como el que adjunto de ejemplo, y además de poder saber qué pone, conocer la posición exacta, para poder como decía, modificar el texto, eliminarlo o cambiarlo por cualquier cosa en su lugar.

En el diagrama que os pongo de ejemplo hay texto en distintas direcciones... Esto creo que aún lo hará más difícil ¿verdad?.

A ver si alguien sabe hecharme un cable con esto, nunca he trabajado con el tratamiento de imágenes en programación, ni con OCR.
Adjuntos
Diagrama.jpg
Diagrama.jpg (29.68 KiB) Visto 6557 veces
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Detectar texto y posición en imágenes

Mensaje por BasicOs »

Hola,
disculpa que había cambio de servidor y se quedó caido, ya está otra vez.
Si es como dices, probar las librerias, e ir ajustando la busqueda de las letras con las del OCR.
Puedes mirar las funciones pixel.
y probar a ver.
Salu2:)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Detectar texto y posición en imágenes

Mensaje por Jonny »

Hola:

Pero no entiendo como conocer la posición del texto con una librería externa. Al menos yo no conozco ninguna librería OCR que dé esa información.

Se me ocurre que puedo pasar un OCR a la imagen, y obtener el texto. Luego, con las funciones Pixel buscarlo. Pero ¿qué pasa si el mismo texto aparece dos veces?.

Además, la idea era hacer esto sin que se viera la imagen en pantalla; procesando el archivo. Aunque eso daría un poco igual, si es necesario hacerlo viéndose la imagen en pantalla.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Detectar texto y posición en imágenes

Mensaje por Dany »

Hola. Me parece muy interesante tu proyecto. Mis sugerencias.

La fácil:
-Primero la imagen que quieres procesar es difícil incluso para cualquier OCR.
-Contiene unas letras muy pequeñas que son difíciles de detectar.
-Si quisieras detectar las letras mas grandes probablemente tendrías que hacer algún procesamiento para evitar las letras que son muy pequeñas etc.
-Por lo que he leído tesseract (command line version) no provee la información extendida para obtener la posición. Quizás usando el SDK sea posible pero requiere programar algo mas.
-Quizás quieras usar esta Web API que funciona muy bien y te da información muy relevante de las posiciones de los textos. Puedes ver en la consola la respuesta en formato Json que muestra el texto y la posición de la caja, pero como te digo en la imagen que provees es muy difícil capturas los textos correctamente.

Código: Seleccionar todo

_GetMethodTest()
Func _GetMethodTest()
    Local Const $sAPIKey = '8f1e0a750088957'
    Local $sReturn = InetRead('https://api.ocr.space/parse/imageurl?apikey=' & $sAPIKey & '&isOverlayRequired=true&url=http://emesn.com/autoitforum/download/file.php?id=576', 1) ;1=$INET_FORCERELOAD
    $sReturn = BinaryToString($sReturn)
    ConsoleWrite($sReturn & @CRLF)
EndFunc   ;==>_GetMethodTest

Opción no tan fácil:
Seria usando OpenCV básicamente seria obtener los cuadros de texto con algún método (en la web hay muchos) Almacenar las posiciones. obtener los recuadros y guardas las imágenes pasar el OCR detectar el texto y luego remplazarlo con las coordenadas obtenidas al principio.


Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Detectar texto y posición en imágenes

Mensaje por Jonny »

Me suponía que no iba a ser tan sencillo xd

La idea es no sólo usar la imagen que puse, sino cualquier diagrama. Así que imagino que podría encontrarme de todo en cuanto a los textos.

Creo que con lo que has sugerido podría hacerse algo que más o menos funcionara.

Sabía que existe una versión de línea de comandos de Tesseract, pero no que devolviera la posición del texto.

Sobre el WEB API que pones, es muy interesante. probaré el ejemplo que pones, pero me gustaría ver documentación sobre el API, porque seguro que pueden hacerse otras cosas, y eso me interesa. Aunque prefiero una solución offline.

De todas formas, no tengo ni idea de Json... No sé si eso será un problema para usar este API.

Conocía OpenCV, porque lo encontré hace tiempo buscando cosas sobre tratamiento de imágenes, visión artificial... Pero me parece muy muy muy complejo.

Seguro que en el foro inglés de AutoIt o incluso en este, hay códigos para usarlo, pero no sé si para lo que quiero hacer. Y estudiar esa API como dices, no es tan fácil.

Sobre el tamaño del texto: ¿no podría solucionarse ampliando el texto?. No sé si bastaría con ampliar la imagen simplemente, o sería más complicado que eso.

Y luego queda la otra parte de la consulta inicial: modificar el texto.
Una vez identificado y obtenida la posición (que precisamente la quería para luego poder modificar el texto) ¿Cómo podría hacerlo?.

Por cierto: ¿Tesseract o el WEB API que comentas, pueden detectar el texto en vertical?.

Porque puede aparecer texto en vertical, cuyas letras sean independientes, pero puede que no lo sean, y formen una palabra ETC; y de modificarse, habría que hacerlo todo.

Por ejemplo, si en un diagrama aparece Vin en vertical, significa "voltaje de entrada". Aquí, habría no sólo que modificar "V", "i" o "n", sino todo entero: "Vin".

Esto en vertical ¡me parece aún más complicado!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Detectar texto y posición en imágenes

Mensaje por Dany »

Hola. Si la verdad es complicado por lo que comentas de que las imágenes y el texto pueden variar.

Si la solución online no te va deberías buscar una offline aunque no creo que exista alguna gratis que cumpla tus requerimientos.

Lo de json no es nada difícil solo es un formato de texto.

La verdad no se si detecte texto en vertical tendrías que probar.

Bueno nada esperar a ver que haces y comentes como te va. que la verdad es complicado pero interesante tu proyecto.



Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
Responder