domingomery / patrones

Curso Reconocimiento de Patrones - UC - Chile
https://domingomery.ing.puc.cl/teaching/patrones/
143 stars 39 forks source link

Tarea - 1 #1

Closed domingomery closed 5 years ago

domingomery commented 5 years ago

Objetivo: Entender e implementar un sistema de reconocimiento de patrones basado en características geométricas.

Enunciado: Hacer un reconocedor automático que diferencie entra las letras 'S' y 'C' mayúsculas de cualquier tamaño de los fonts Times New Roman, Ariel y Courier. El input es una imagen binaria que contiene una 'S' o una 'C'. En la imagen binaria los pixeles del fondo tienen un 0, y los pixeles de la letra tienen un 1. Para probar el algoritmo diseñado usaremos 100 imágenes (50 con la letra 'S' y 50 con la letra 'C') de distinto tamaño y distintos fonts, el programa debe entregar como output un 1 si es 'S' o un 0 si es una 'C'. El índice de desempeño será el número de letras reconocidas correctamete. Para la tarea se requiere escribir un código en Matlab o Python que tenga la siguiente sintaxis:

Y = reconocedorSC(X)

donde X es una matriz que contiene la imagen binaria de una letra, e Y es la salida (1 si es 'S' o un 0 si es una 'C')

No se aceptará el uso de librerías de reconocimiento de patrones, ni de machine learning. Sólo está permitido el uso de librerías de procesamiento de imágenes. No está permitido el uso del comando regionprops de Matlab.

El conjunto de imágenes que usen para diseñar la solución deberá ser creado por ustedes mismos.

baarratia commented 5 years ago

Hola profe, una pregunta:

¿Las imágenes pueden contener letras que presenten algún tipo de rotación, o solo estarán en distintas posiciones y tamaños?

Por ejemplo:

Imagen que según yo si o si puede estar en el conjunto de prueba: b-CCourier2

vs. Imágen que no sé si es factible: Srot

Muchas gracias!

domingomery commented 5 years ago

Las letras pueden estar en cualquier parte de la imagen, no están rotadas y sólo hay una letra por imagen. Saludos. Domingo

baarratia commented 5 years ago

Perfecto, muchas gracias :)

Taeval commented 5 years ago

Las librerías NumPy, Pillow y Matplotlib de Python están permitidas?

domingomery commented 5 years ago

Sí se puede usar las librerías de Python NumPy, Pillow, PIL y Matplotlib. No está permitido usar librerías que extraigan características ni que hagan clasificación de ninguna especie.

yoavnavon commented 5 years ago

Se puede utilizar algún dataset externo para entrenar un modelo?

domingomery commented 5 years ago

se puede hacer uso de un dataset de imágenes externo o bien puedes hacerlo escribiendo letras en powepoint y hacerles un pantallazo... como quieras.

fcorencoret commented 5 years ago

Puedo usar openCV para calcular momentum, perimetro, bounding rectangle etc...?

domingomery commented 5 years ago

La regla general sigue siendo que no se puede usar librerías/comandos que hagan extracción de características y clasificación, es decir, para OpenCV se puede usar los comandos de procesamiento de imágenes (input imagen - output imagen), los comandos de lectura de imágenes, los comandos de visualización, pero no se puede usar los comandos como los que mencionas que hacen extracción de características, ni los comandos que hagan algún tipo de clasificación.

On Tue, Mar 19, 2019 at 3:46 PM fcorencoret notifications@github.com wrote:

Puedo usar openCV para calcular momentum, perimetro, bounding rectangle etc...?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/1#issuecomment-474520916, or mute the thread https://github.com/notifications/unsubscribe-auth/AAewyssErASb-btom8-pNYPrlI8SYDe0ks5vYTCNgaJpZM4b54QY .

jgespinosa10 commented 5 years ago

Profesor, no entiendo muy bien como es la imagen que se recibe como input, podría mandar un ejemplo?

jfcampos1 commented 5 years ago

El fondo de la imagen puede ser siempre el mismo? o la idea es hacer estas letras con colores distinto de fondo?

perojas3 commented 5 years ago

Bien, podria subir un ejemplo de las matrices? Es para evitar el error leer las matrices volteadas.

fgvenegas commented 5 years ago

Tengo una duda, las imagenes binarias que nos daran vendran como matrices directamente o seran imagenes .jpg que tenemos que leer y convertir a matriz nosotros. Si es la primera opcion, las matrices vendran con alguna extension especifica? Y respecto a los labels vendran o podemos asumir cosas como que siempre las 50 primeras seran 'S' y las 50 ultimas 'C'?

domingomery commented 5 years ago

He aclarado todas las últimas preguntas de @jgespinosa10 @jfcampos1 @perojas3 y @fgvenegas en el enunciado de la tarea. Por favor volver a revisarlo.

negutierrez commented 5 years ago

Profesor, el informe puede ser creado utilizando Publish de Matlab?

fgvenegas commented 5 years ago

Muchas gracias @domingomery. Me quedan 2 dudas:

Gracias

domingomery commented 5 years ago

El informe debe ser un PDF de una sola página (Times New Roman, Espacio Simple, Tamaño Carta), se puede hacer en Latex, Word, Publish de Matlab, etc., siempre y cuando cumpla con estas restricciones.

On Mar 20, 2019, 11:37 AM -0300, negutierrez notifications@github.com, wrote:

Profesor, el informe puede ser creado utilizando Publish de Matlab? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

domingomery commented 5 years ago

Para probarlo se ejecutará un código que llame 100 veces a la función 'Y = reconocedorSC(X)’ que ustedes hayan diseñado… cada llamada a la función será con una letra distinta (50 veces una ’S’ y 50 veces una ‘C’). On Mar 20, 2019, 11:41 AM -0300, Freddie Venegas Apablaza notifications@github.com, wrote:

Muchas gracias @domingomery. Me quedan 2 dudas:

• Para probarlo se hara mediante la linea de comandos o se manipulara directamente el codigo para usar el clasificador? • Si mi clasificador se "entrena", se debe guardar y entregar entrenado o lo entrenaran al probarlo (lo que implica que deberia entregar mi set de entrenamiento tambien)?

Gracias — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

fgvenegas commented 5 years ago

Muchas gracias. Y respecto a la segunda pregunta cómo puedo entregarlo para que al revisar no tengan que "entrenar" el modelo nuevamente?

domingomery commented 5 years ago

El clasificador que diseñes debe tener parámetros que has encontrado en la fase de entrenamiento… los parámetros que encontraste en esta fase debes guardarlos en algún archivo , tu función debe leer este archivo. Debes entregar la función y el archivo de parámetros. Otra alternativa, es que los parámetros estén escritos en el mismo código, así no necesitas el archivo adicional. On Mar 20, 2019, 1:47 PM -0300, Freddie Venegas Apablaza notifications@github.com, wrote:

Muchas gracias. Y respecto a la segunda pregunta cómo puedo entregarlo para que al revisar no tengan que "entrenar" el modelo nuevamente? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

fgvenegas commented 5 years ago

Vale gracias!

mesepulveda commented 5 years ago

Profesor, podemos asumir que las imágenes vendrán sin ruido? Es válido que la función llame a un .mat para cargar matrices grandes?

Taeval commented 5 years ago

Las imágenes/arrays con los se prueben los algoritmos creados serán todos de las mismas dimensiones? Por ejemplo el array que usted subió es de 400x280.

MortizDX commented 5 years ago

Profesor, tengo 2 dudas chicas:

  1. El ejemplo del enunciado es un archivo mat ¿eso será el tipo de input que se le dará al programa? (o sea, nunca será una imagen como tal?)
  2. ¿Se puede usar la función bwlabel?
domingomery commented 5 years ago

Mauricio: 1) la entrada a tu programa es una imagen binaria alamacenada en la variable X... no es un archivo mat. 2) bwlabel es de procesamiento de imágenes y sí se puede usar. Saludos On Mar 21, 2019, 12:19 AM -0300, Mauricio Ortiz notifications@github.com, wrote:

Profesor, tengo 2 dudas chicas:

  1. El ejemplo del enunciado es un archivo mat ¿eso será el tipo de input que se le dará al programa? (o sea, nunca será una imagen como tal?)
  2. ¿Se puede usar la función bwlabel?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

domingomery commented 5 years ago

sí, vienen libre de ruido... Saludos On Mar 20, 2019, 7:27 PM -0300, Matías Sepúlveda notifications@github.com, wrote:

Profesor, podemos asumir que las imágenes vendrán sin ruido? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

domingomery commented 5 years ago

por favor leer bien el enunciado y las otras preguntas y respuestas antes de formular una nueva pregunta... gracias! On Mar 20, 2019, 8:23 PM -0300, Taeval notifications@github.com, wrote:

Las imágenes/arrays con los se prueben los algoritmos creados serán todos de las mismas dimensiones? Por ejemplo el array que usted subió es de 400x280. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

Mnfriedl commented 5 years ago

Profesor, en el informe cuando habla de una página, quiere decir una plana o dos planas? Y se pueden agregar imágenes como anexo, sin que cuenten en la página de límite?

domingomery commented 5 years ago

Hola! 1) una página es una plana, dos planas son dos páginas... 2) no incluir anexos, sólo revisaremos una página, o sea una plana. Saludos. Domingo On Mar 24, 2019, 10:14 PM -0300, Mnfriedl notifications@github.com, wrote:

Profesor, en el informe cuando habla de una página, quiere decir una plana o dos planas? Y se pueden agregar imágenes como anexo, sin que cuenten en la página de límite? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

perojas3 commented 5 years ago

Tengo una duda con el Informe. En el enunciado de la parte cuatro dice: 4) Conclusiones: mencionar las conclusiones a las que se llegó.

No entiendo a que se refiere eso. ¿Es lo que aprendi de la tarea? ¿O el resultado de los experimentos?

domingomery commented 5 years ago

En las conclusiones de un trabajo típicamente se escribe, para qué sirve lo que se hizo, si se puede emplear en otros temas, trabajos futuros, qué se desprende de los resultados obtenidos, etc. En el caso de la tarea se puede poner si el método desarrollado serviría para otro tipo de fonts, qué habría que hacer para otras letras, qué mejoras posibles se podrían implementar, etc. No estoy diciendo que hay que colocar todo esto, sólo pongo algunos ejemplos para que te sirvan como guía. Obviamente, puedes incluir otras conclusiones. Saludos. Domingo

On Mon, Mar 25, 2019 at 10:04 AM perojas3 notifications@github.com wrote:

Tengo una duda con el Informe. En el enunciado de la parte cuatro dice: 4) Conclusiones: mencionar las conclusiones a las que se llegó.

No entiendo a que se refiere eso. ¿Es lo que aprendi de la tarea? ¿O el resultado de los experimentos?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/1#issuecomment-476187034, or mute the thread https://github.com/notifications/unsubscribe-auth/AAewyrqMVtMW7dXaHA3_bWdkRW73QNM7ks5vaMlfgaJpZM4b54QY .

flobarrios commented 5 years ago

Hola! me queda una pequeña duda con el formato de entrega del código. Si estoy haciéndolo en python, simplemente tengo que decir donde está la función reconocedorSC y usted la ejecuta de forma manual las 100 veces? O se espera un programa por consola que pida el nombre del archivo que contiene a la imagen?

Mi approach hasta ahora es que por la línea de comandos se llama al archivo y se da como argumento el nombre del archivo con la imagen. Se usa así:

 python3 reconocedorSC.py S01.npy

Esta bien eso? Si no, cual es la forma correcta?

Muchas gracias!

chepo92 commented 5 years ago

@flobarrios lo dice en el enunciado

'Para la tarea se requiere escribir un código en Matlab o Python que tenga la siguiente sintaxis:

Y = reconocedorSC(X)'

flobarrios commented 5 years ago

@chepo92 vi el enunciado! pero creo que está mas pensado en matlab que en python. Mi pregunta era mas para facilitar la corrección.

domingomery commented 5 years ago

La forma correcta está relacionada con la primera alternativa: debes decir donde está la función reconocedorSC y yo la ejecuto en un código que llama tu funcion 100 veces… el input de tu función es una matriz X. Saludos. Domingo On Mar 25, 2019, 3:54 PM -0300, Florencia Barrios notifications@github.com, wrote:

Hola! me queda una pequeña duda con el formato de entrega del código. Si estoy haciéndolo en python, simplemente tengo que decir donde está la función reconocedorSC y usted la ejecuta de forma manual las 100 veces? O se espera un programa por consola que pida el nombre del archivo que contiene a la imagen? Mi approach hasta ahora es que por la línea de comandos se llama al archivo y se da como argumento el nombre del archivo con la imagen. Se usa así: python3 reconocedorSC.py S01.npy

Esta bien eso? Si no, cual es la forma correcta? Muchas gracias! — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

flobarrios commented 5 years ago

@domingomery perfecto! Última duda, debo subir mi dataset?

domingomery commented 5 years ago

Florencia, el enunciado no dice nada del dataset... solo debes entregar lo neceasario para que tu código funcione correctamente. Saludos. Domingo On Mar 25, 2019, 6:22 PM -0300, Florencia Barrios notifications@github.com, wrote:

@domingomery perfecto! Última duda, debo subir mi dataset? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.