lunes, 29 de octubre de 2012

Práctica 3 Clasificación/Reconocimiento de Patrones


- Introducción
El tema que escogimos fue "reconocimiento de patrones", el único propósito de este método es el clasificar un grupo de patrones conocido como conjunto de pruebas en dos o mas clases de categorías. Esto es logrado al calcular las categorías del conjunto en prueba comparándolo con un conjunto de entrenamiento (previo) o training set. Un clasificador dado mide la distancia entre varios puntos dados (compara), para saber cuales puntos son mas cercanos a la meta en un modelo parametizado.

- Objetivo
El objetivo es presentar las diferentes tendencias que existen en la actualidad en cuanto al reconocimiento de patrones, estos conocimientos son susceptibles de ser aplicados a un sin número de problemas, sin embargo, se enfocarán las aplicaciones a los problemas del lenguaje natural y del habla y en general a diferentes situaciones que surgen en el desarrollo de nuevas y más eficaces interfaces humano-computador.

- Justificación

Elegimos este tema debido a que queremos aprender sobre el reconocimiento de patrones, tratando de enfatizar las librerías presentes en java, para tratar de implementarlas en el sistema, mejorando nuestra experiencia en java, aprendiendo poco a poco lo que viene siendo este lenguaje tan extenso.

Para que puede ser útil:
- Puede ser utilizado para el reconocimiento de firmas en los bancos.
- En cuestiones de seguridad en ciertas instituciones.

- Investigación




- Desarrollo
La idea al principio estábamos un poco indecisos en que tema queríamos basarnos en este entregable, después de hablar nos decidimos por realizar el de Reconocimiento de Patrones, al principio que empezamos a avanzar tuvimos dificultades para realizarlo en python por falta de experiencia en ese lenguaje, y decidimos retomar nuevamente java como medio para completar el trabajo, al empezar a programar primero decidimos como iba a estar la estructura del programa decidiéndonos por medio de interfaz seccionada en matriz y utilizando las coordenadas, también necesitamos AccionListener así como MouseListener para capturar las acciones realizadas, los puntos marcados, acciones de los dos botones que hemos colocado y así como mas código utilizado, hemos terminado el programa y realiza el Reconocimiento al momento de ingresar varios ejemplos busca entre ellos cual es el mas parecido y muestra el porcentaje y el numero de ronda donde se ubico el ejemplo.

- Código
Clase Tablero
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Tablero extends JPanel {
private static final long serialVersionUID = 1L;
private ImageIcon neutro, tocado;
private boolean tipoTablero;
private Casillas [][] casillas ;
private JButton grabar;
private JButton comprobar;
int ciclo=0,memoria =1, ronda,parmax=0;
int igualdades[]=new int[200];
int guardar[][][]= new int [20][20][20];
int imgfinal[][]= new int [20][20];
 public Tablero() 
    {
        iniciar();
        vaciado();    
  }
    public Tablero(boolean tipo) {
        iniciar();
        int x,y,z=10;
        setLayout(new GridLayout(z, z));
        this.tipoTablero = tipo;
        cargarImagenes();
        casillas = new Casillas[z][z];
        for (int i = 0; i < z; i++){
            for (int j = 0; j < z; j++){
                casillas[i][j] = new Casillas(this); 
                casillas[i][j].setFondo(neutro);
                x = (i * 35)+1;
                y = (j * 35)+1;
                casillas[i][j].setBounds(x, y, 34, 34);
                this.add(casillas[i][j]);
            }
        }
    }
public int[] getCoordenadas(Casillas casilla) {
        int [] coordenadas = new int[2];
        for (int i=0; i < this.casillas.length; i++) {
            for (int j=0; j < this.casillas.length; j++) {
                if (this.casillas[i][j] == casilla) {
                    coordenadas[0] = i;
                    coordenadas[1] = j;
                }
            }
        }
        return coordenadas;
    }
private void iniciar() {
        setLayout(null);
        setBackground(Color.white);
        setPreferredSize(new Dimension(500, 351));
        grabar = new JButton("Grabar");
add(grabar);
grabar.setSize(500,500);
grabar.setBounds(370, 20, 100, 50);
grabar.setVisible(true);
comprobar = new JButton("Comprobar");
add(comprobar);
comprobar.setSize(500,500);
comprobar.setBounds(370,100, 100, 50);
comprobar.setVisible(true);
HandlerClass handler = new HandlerClass();
grabar.addActionListener(handler);
ActionClass Action = new ActionClass();
comprobar.addActionListener(Action);
    }    
Clase Casillas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Casillas extends JPanel implements MouseListener {
    private static final long serialVersionUID = 1L;
    private Tablero tablero;
    private ImageIcon fondo;
    private static int [] casillaMarcada = new int[2];
    public Casillas() {}
    public Casillas(Tablero t) {
        iniciar();        
        this.tablero = t;
        if(this.tablero.getTipoTablero() == true){// tablero responde a clics?
            this.addMouseListener(this);
        }
    }
    public void setFondo(ImageIcon fondo){
        this.fondo = fondo;
    }
    public ImageIcon getFondo(){        
        return this.fondo;
    }                    
    private void iniciar() {
        GroupLayout layout = new GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 161, Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 193, Short.MAX_VALUE));
    }                         
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(fondo.getImage(), 0,0,this.getWidth(),this.getHeight(),this);
    }
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    @SuppressWarnings("static-access")
public void mousePressed(MouseEvent e){
        this.setCasillaMarcada(tablero.getCoordenadas((Casillas)e.getComponent())); 
            this.tablero.pintar(this.getCasillaMarcada()[0],this.getCasillaMarcada()[1]);
    }
Clase Main
import javax.swing.*;
import java.awt.EventQueue;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
public Main() {
        iniciar();     
    }
        private void iniciar() {
        tablero1 = new Tablero(true);//numeros de cuadros
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        GroupLayout tablero1Layout = new GroupLayout(tablero1);
        tablero1.setLayout(tablero1Layout);
        tablero1Layout.setHorizontalGroup(
            tablero1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 349, Short.MAX_VALUE));      tablero1Layout.setVerticalGroup(tablero1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 349, Short.MAX_VALUE));
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);   layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap()
                .addComponent(tablero1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(176, Short.MAX_VALUE)));   layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent
        (tablero1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(13, Short.MAX_VALUE)));
        pack();      
    }
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }
- Resultados
Imágenes tomadas del programa funcionando





- Video de Youtube


- Conclusiones
Hemos Obtenido mucha experiencia al realizar este programa puesto que nos habilito y enseño nuevos métodos o formas de hacerlo, aprendimos también un poco mas de java al encontrar que se pueden meter clases adentro de una clase, así como el modelamiento del área para asignar a las matrices, fue muy buena experiencia.

miércoles, 17 de octubre de 2012

Avance Práctica 3 (Borrador)

  ''Clasificación/ Reconocimiento de Patrones''

- Introducción

El tema que escogimos fue "reconocimiento de patrones", el único propósito de este método es el clasificar un grupo de patrones conocido como conjunto de pruebas en dos o mas clases de categorías. Esto es logrado al calcular las categorías del conjunto en prueba comparándolo con un conjunto de entrenamiento (previo) o training set. Un clasificador dado mide la distancia entre varios puntos dados (compara), para saber cuales puntos son mas cercanos a la meta en un modelo parametizado.

- Objetivo

El objetivo es presentar las diferentes tendencias que existen en la actualidad en cuanto al reconocimiento de patrones, estos conocimientos son susceptibles de ser aplicados a un sin número de problemas, sin embargo, se enfocarán las aplicaciones a los problemas del lenguaje natural y del habla y en general a diferentes situaciones que surgen en el desarrollo de nuevas y más eficaces interfaces humano-computador.


- Justificación
Elegimos este tema debido a que queremos aprender sobre el reconocimiento de patrones, tratando de enfatizar las librerias presentes en java, para tratar de implementarlas en el sistema, mejorando nuestra experiencia en java, aprendiendo poco a poco lo que viene siendo este lenguaje tan extenso.

Para que puede ser útil:
- Puede ser utilizado para el reconocimiento de firmas en los bancos.
- En cuestiones de seguridad en ciertas instituciones.

- Investigación