2016-07-12 7 views
1

Ich benutze Encog und ich lief das Ocr-Beispiel. Es funktioniert gut. Ich möchte jedoch eine Bilddatei (png, jpg, ...) als Parameter übergeben. Dieses Bild enthält den zu erkennenden Text. Dann sollte das System eine Zeichenfolge mit dem "gleichen" Text zurückgeben.Handschrifterkennung von Bild zu Zeichenfolge

Hat jemand schon etwas Ähnliches gemacht? Wie soll ich anfangen?

Danke!

+0

Was haben Sie versucht? Haben Sie die API-Dokumentation für Encog gelesen oder haben Sie anhand der Quellen und Beispiele nachgesehen, wie Sie sie verwenden können? – copeg

+0

Ja, ich habe es versucht. Es gibt ein Beispiel, in dem wir Buchstaben zeichnen und als Trainingssatz verwenden können. Dann können wir Buchstaben in einem sekundären Panel zeichnen und sehen, ob das System sie erkennt. Ich habe gesehen, dass es auch eine Klasse SampleData hat, wahrscheinlich können wir dort die Bilder weitergeben, aber ich habe es noch nicht versucht und ich habe immer noch nicht gesehen, wie wir Inhalte aus Bildern extrahieren können. – Jas

Antwort

2

Schritt 1: In GUI Dateieingabe erstellen und nehmen Datei von Benutzer

JFileChooser fc; 
JButton b, b1; 
JTextField tf; 
FileInputStream in; 
Socket s; 
DataOutputStream dout; 
DataInputStream din; 
int i; 

public void actionPerformed(ActionEvent e) { 
try { 
    if (e.getSource() == b) { 
     int x = fc.showOpenDialog(null); 
     if (x == JFileChooser.APPROVE_OPTION) { 
      fileToBeSent = fc.getSelectedFile(); 
      tf.setText(f1.getAbsolutePath()); 
      b1.setEnabled(true); 
     } else { 
      fileToBeSent = null; 
      tf.setText(null;); 
      b1.setEnabled(false); 
     } 
    } 
    if (e.getSource() == b1) { 
     send(); 
    } 
} catch (Exception ex) { 
} 
} 

public void copy() throws IOException { 
    File f1 = fc.getSelectedFile(); 
    tf.setText(f1.getAbsolutePath()); 
    in = new FileInputStream(f1.getAbsolutePath()); 
    while ((i = in.read()) != -1) { 
     System.out.print(i); 
    } 
} 

public void send() throws IOException { 
    dout.write(i); 
    dout.flush(); 

} 

Schritt 2: Verkleinerungs es

private void processNetwork() throws IOException { 
    System.out.println("Downsampling images..."); 

    for (final ImagePair pair : this.imageList) { 
     final MLData ideal = new BasicMLData(this.outputCount); 
     final int idx = pair.getIdentity(); 
     for (int i = 0; i < this.outputCount; i++) { 
      if (i == idx) { 
       ideal.setData(i, 1); 
      } else { 
       ideal.setData(i, -1); 
      } 
     } 

     final Image img = ImageIO.read(fc.getFile()); 
     final ImageMLData data = new ImageMLData(img); 
     this.training.add(data, ideal); 
    } 

    final String strHidden1 = getArg("hidden1"); 
    final String strHidden2 = getArg("hidden2"); 

    this.training.downsample(this.downsampleHeight, this.downsampleWidth); 

    final int hidden1 = Integer.parseInt(strHidden1); 
    final int hidden2 = Integer.parseInt(strHidden2); 

    this.network = EncogUtility.simpleFeedForward(this.training 
      .getInputSize(), hidden1, hidden2, 
      this.training.getIdealSize(), true); 
    System.out.println("Created network: " + this.network.toString()); 
} 

Schritt 3: Beginnen Sie das Training mit Trainingssatz

private void processTrain() throws IOException { 
    final String strMode = getArg("mode"); 
    final String strMinutes = getArg("minutes"); 
    final String strStrategyError = getArg("strategyerror"); 
    final String strStrategyCycles = getArg("strategycycles"); 

    System.out.println("Training Beginning... Output patterns=" 
      + this.outputCount); 

    final double strategyError = Double.parseDouble(strStrategyError); 
    final int strategyCycles = Integer.parseInt(strStrategyCycles); 

    final ResilientPropagation train = new ResilientPropagation(this.network, this.training); 
    train.addStrategy(new ResetStrategy(strategyError, strategyCycles)); 

    if (strMode.equalsIgnoreCase("gui")) { 
     TrainingDialog.trainDialog(train, this.network, this.training); 
    } else { 
     final int minutes = Integer.parseInt(strMinutes); 
     EncogUtility.trainConsole(train, this.network, this.training, 
       minutes); 
    } 
    System.out.println("Training Stopped..."); 
} 

Schritt 4: Geben Sie unten abgetastete Datei auf neuronale Netz

public void processWhatIs() throws IOException { 
    final String filename = getArg("image"); 
    final File file = new File(filename); 
    final Image img = ImageIO.read(file); 
    final ImageMLData input = new ImageMLData(img); 
    input.downsample(this.downsample, false, this.downsampleHeight, 
      this.downsampleWidth, 1, -1); 
    final int winner = this.network.winner(input); 
    System.out.println("What is: " + filename + ", it seems to be: " 
      + this.neuron2identity.get(winner)); 
} 

Schritt 5: Ergebnis der Prüfung

+0

In Schritt 1, was meinst du mit GUI? Es ist eine Datei im Paket "org.encog.examples.neural.gui.ocr" zu ändern oder ich muss dort eine neue erstellen? – Jas

Verwandte Themen