Boa noite,
Se alguém puder nos ajudar agradecemos, precisamos concluir um trabalho da faculdade, onde após abrir uma imagem o usuário deverá clicar em classificar. Uma vez clicado no botão classificar o código deve selecionar as características(ex. cor do cabelo, cor da roupa) dessa imagem com base num arquivo .arff e mostrar em campos jtext
Segue abaixo o codigo, caso alguém posso nos alguma umas dicas de como fazer.
public class TelaResultados extends javax.swing.JFrame {
private static NaiveBayes NaiveBayes;
private Component btnAddImagem;
/**
* Creates new form TelaResultados
*/
public TelaResultados() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
txtCaminho = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
jLabelImagem = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
txtNaiveBayes = new javax.swing.JTextField();
txtJ48 = new javax.swing.JTextField();
txtIbk1 = new javax.swing.JTextField();
txtIbk3 = new javax.swing.JTextField();
txtRedesNeurais = new javax.swing.JTextField();
btnClassificar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Projeto OpenCV - Thedy Nelson Lipinski");
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel2.setText("Selecione a imagem :");
jButton1.setText("...");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
jPanel3.setToolTipText("Imagem");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabelImagem)
.addContainerGap(392, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabelImagem)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
jPanel2.setToolTipText("Resultados");
jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel4.setText("Resultados:");
jPanel2.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, -1, -1));
jLabel5.setText("Naive Bayes:");
jPanel2.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 60, -1, -1));
jLabel6.setText("J48:");
jPanel2.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 90, -1, -1));
jLabel7.setText("IBK K=1 :");
jPanel2.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 120, -1, -1));
jLabel8.setText("IBK K=3:");
jPanel2.add(jLabel8, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, -1, -1));
jLabel9.setText("Redes Neurais:");
jPanel2.add(jLabel9, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 180, -1, -1));
txtNaiveBayes.setEnabled(false);
jPanel2.add(txtNaiveBayes, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 50, 71, -1));
txtJ48.setEnabled(false);
jPanel2.add(txtJ48, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 80, 70, -1));
txtIbk1.setEnabled(false);
jPanel2.add(txtIbk1, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 110, 70, -1));
txtIbk3.setEnabled(false);
jPanel2.add(txtIbk3, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 140, 70, -1));
txtRedesNeurais.setEnabled(false);
jPanel2.add(txtRedesNeurais, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 170, 70, -1));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCaminho)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addGap(20, 20, 20))))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(txtCaminho, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE)
.addContainerGap())
.addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
);
btnClassificar.setText("Classificar");
btnClassificar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnClassificarActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(btnClassificar)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnClassificar)
.addContainerGap())
);
pack();
}// </editor-fold>
private void btnClassificarActionPerformed(java.awt.event.ActionEvent evt) {
int tecla, red, green, blue, classe, altura;
ByteBuffer buf;
String dir = "src\\imagens";
String textoGravar = "";
File diretorio = new File(dir);
File[] arquivos = diretorio.listFiles();
float[][] caracteristicas = new float[1][5]; //numero de imagens e numero de caracteristicas
float jarrycorpo; // caracteristicas
float jarryorelha; // caracteristicas
float minioncorpo; // caracteristicas
float minionroupa; // caracteristicas
for (int i = 0; i < arquivos.length; i++) { try { //for percore imagem por imagem
jarrycorpo = 0;
jarryorelha = 0;
minioncorpo = 0;
minionroupa = 0;
opencv_core.IplImage imagemOriginal = new opencv_core.IplImage(); //codido do opencv
imagemOriginal = cvLoadImage(diretorio.getAbsolutePath() + "\\" + arquivos[i].getName()); //carregando imagem
buf = imagemOriginal.getByteBuffer();
//System.out.println(diretorio.getAbsolutePath() + "\\" + arquivos[i].getName());
// Classe - Jarry ou Minion
if (arquivos[i].getName().charAt(0) == 'j') { //informar ao algoritmo quem é quem pegando pelo nome do arquivo
classe = 0;
} else {
classe = 1;
}
for (altura = 0; altura < imagemOriginal.height(); altura++) { //for para percorrer a imagem inteira
for (int largura = 0; largura < imagemOriginal.width(); largura++) {
blue = buf.get(altura * imagemOriginal.width() * 3 + largura) & 0xFF;
green = buf.get(altura * imagemOriginal.width() * 3 + largura + 1) & 0xFF;
red = buf.get(altura * imagemOriginal.width() * 3 + largura + 2) & 0xFF;
// Corpo Jarry
if (blue >= 3 && blue <= 64
&& green >= 128 && green <= 148
&& red >= 194 && red <= 209) {
jarrycorpo++;
}
// Orelha Jarry
if (blue >= 155 && blue <= 170
&& green >= 169 && green <= 184
&& red >= 232 && red <= 251) {
jarryorelha++;
}
// Minion Corpo
if (altura > (imagemOriginal.height() / 2)) {
if (blue >= 64 && blue <= 114
&& green >= 163 && green <= 235
&& red >= 221 && red <= 255) {
minioncorpo++;
}
}
//Minion Roupa
if (altura > (imagemOriginal.height() / 2)) {
if (blue >= 98 && blue <= 165
&& green >= 63 && green <= 131
&& red >= 30 && red <= 61) {
minionroupa++;
}
}
}
}
// Normaliza as características pelo número de pixels totais da imagem
jarrycorpo = (jarrycorpo / (imagemOriginal.height()
* imagemOriginal.width()) * 100);
jarryorelha = (jarryorelha / (imagemOriginal.height()
* imagemOriginal.width()) * 100);
minioncorpo = (minioncorpo / imagemOriginal.height()
* imagemOriginal.width()) * 100;
minionroupa = (minionroupa / imagemOriginal.height()
* imagemOriginal.width()) * 100;
// Escreve as características no vetor de características
caracteristicas[i][0] = jarrycorpo;
caracteristicas[i][1] = jarryorelha;
caracteristicas[i][2] = minioncorpo;
caracteristicas[i][3] = minionroupa;
caracteristicas[i][4] = classe;
/* System.out.println("Vermelho: " + caracteristicas[i][0] + " Amarelo: " + caracteristicas[i][1] + " Verde: " + caracteristicas[i][2] + " Azul: " + caracteristicas[i][3] + " Classe: " + classe);
textoGravar += System.getProperty("line.separator");
textoGravar += caracteristicas[i][0] + "," + caracteristicas[i][1] + "," + caracteristicas[i][2] + "," + caracteristicas[i][3] + "," + classe;
cvShowImage("Imagem original", imagemOriginal);
tecla = cvWaitKey();*/
File arquivo = new File("caracteristicas.arff");
FileOutputStream f = null;
try {
f = new FileOutputStream(arquivo);
} catch (FileNotFoundException ex) {
Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
}
f.write (textoGravar.getBytes());
f.close ();
//carregar a base de dados
ConverterUtils.DataSource ds;
ds = new ConverterUtils.DataSource("src\\imagens\\caracteristicas.arff");
Instances in;
in = ds.getDataSet();
System.out.println(in.toString());
//indica a classe
in.setClassIndex(3);
NaiveBayes nb = new NaiveBayes();
//Cria a tabela de probabilidade
nb.buildClassifier(in);
System.out.println(nb.toString());
Instance caracteristica;
caracteristica = new DenseInstance(6);
caracteristica.setDataset(in);
caracteristica.setValue(0,jarryorelha);
caracteristica.setValue(1,jarrycorpo);
caracteristica.setValue(2, minioncorpo);
caracteristica.setValue(3, minionroupa);
caracteristica.setValue(4,classe);
double[] prob;
prob = nb.distributionForInstance(caracteristica);
System.out.println("Jerry "+ prob[0]);
System.out.println("Minion: "+ prob[1]);
} catch (IOException ex) {
Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
JFileChooser busca_foto = new JFileChooser();
busca_foto.setCurrentDirectory(new File ("C:\\Projeto\\OpenCV\\src\\imagens"));
busca_foto.setDialogTitle("Carregar Imagem - Projeto OpenCV");
busca_foto.showOpenDialog(this);
String foto = ""+busca_foto.getSelectedFile().getName();
txtCaminho.setText(foto);
jLabelImagem.setIcon(new ImageIcon("C:\\Projeto\\OpenCV\\src\\imagens\\"+txtCaminho.getText()));
}catch(Exception erro){
JOptionPane.showMessageDialog(null, "Não foi possivel carregar a imagem.");
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TelaResultados().setVisible(true);
}
});
}