THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Java => Topic started by: ^^DaRk_HunTeR on March 09, 2013, 12:11:21 pm



Title: OCR in Java
Post by: ^^DaRk_HunTeR on March 09, 2013, 12:11:21 pm
Λοιπόν,

Προσπαθώ να κάνω αναγνώριση χαρακτήρων μέσα απο εικόνες που περιέχουν διαγράμματα...
Η γλώσσα που χρησιμοποιώ είναι η Java και το εργαλείο που ως τώρα δοκίμασα και μου φάνηκε πολύ εύκολο να το ενσωματώσω είναι το Asprise OCR v4.0 (http://asprise.com/product/ocr/selector.php)

Δίνω στο εργαλείο συγκεκριμένες περιοχές του διαγράμματος ως εισόδους για να εντωπίσει σε αυτές τους χαρακτήρες, οι εικόνες που προκύπτουν(ROI = regions of interest) φαίνονται σε ενδεικτικά παραδείγματα συνημμένες...

Το θέμα μου είναι ότι προς το παρόν αποτυγχάνει παταγωδώς στον εντοπισμό των χαρακτήρων:
π.χ.
αντί για Activity1 παίρνω ---->
Quote
---- RESULTS: -------
Ac, vih 1.
και
αντί για Activity2 παίρνω ----->
Quote
---- RESULTS: -------
 c vihl

Ελάχιστες φορές παίρνω σχετικά σοβαρά αποτελέσματα και προφανώς αυτό δεν αρκεί...

Απο τη μια σκέφτηκα ότι μπορεί να φταίει το γεγονός πως το κομμάτι της εικόνας που εισάγω κάθε φορά είναι πολύ μικρό... αλλά απο την άλλη δεν γίνεται να μην υπάρχει λύση οπότε προς το παρόν είμαι σε αναζήτηση...

Αν έχετε δοκιμάσει λοιπόν το συγκεκριμένο εργαλείο είτε άλλο στα πλαίσια κώδικα(έστω Java) πείτε γνώμες, προτάσεις, εναλλακτικές... Ψάχνω κάτι με απλή υλοποίηση... (γιατί το OCR είναι ένα πολύ μικρό κομμάτι όσων θέλω να κάνω)

P.S.: Δοκίμασα να μεγαλώσω τους χαρακτήρες (by default είναι 8pt) και τους πήγα μέχρι 14pt αλλά δεν είδα ουσιαστική βελτίωση... και ούτως ή άλλως αυτό είναι ψιλομπακάλικο...


Title: Re: OCR in Java
Post by: antares on March 09, 2013, 13:39:46 pm
Έχω χρησιμοποίησει το FineReader SDK (http://www.abbyy.com/integration_development/) σε σκαναρισμένα (300 dpi) εκτυπωμένα έντυπα... έκανε απίστευτη δουλειά. Είναι επαγγελματική λύση βέβαια και όχι φθηνή. Ίσως να αύξανες την ανάλυση των εικόνων μπας και δεις βελτίωση στα αποτελέσματα.


Title: Re: OCR in Java
Post by: ^^DaRk_HunTeR on March 12, 2013, 12:11:22 pm
Για να καταλάβω...

Ας υποθέσουμε οτι το αγοράζω.... μετά πόσο εύκολο είναι να το χρησιμοποιήσω μέσω έστω του IDE Eclipse στον κώδικα μου για customized OCR?

Π.χ. για το Asprise OCR πρακτικά χρειάζεται μόνο το παρακάτω κομμάτι για να το ενσωματώσει κανείς σε δικό του κώδικα Java...
Code:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.asprise.util.ocr.OCR;

public class Demo {
    public static void main(String[] args) throws IOException {
        BufferedImage image = ImageIO.read(new File("C:/ocr.jpg));
        String s = new OCR().recognizeEverything(image);
        System.out.println("\n---- RESULTS: ------- \n" + s);
    }
}

Κάτι αντίστοιχο σε Demo/Sample για τη χρήση του ABBYY υπάρχει για να πάρω μια ιδέα? Μήπως εσύ έχεις κάτι εύκαιρο...?


Title: Re: OCR in Java
Post by: antares on March 12, 2013, 12:45:30 pm
Αν το βρω κάπου καταχωνιασμένο θα σου το στείλω...  :)
Γενικά πάντως είναι απλό στην χρήση. Θα σου πρότεινα να ξεκινήσεις από εδώ (http://ocrsdk.com) για να δεις αν παίζει (έχει free trial).


Title: Re: OCR in Java
Post by: Issle on March 12, 2013, 21:59:06 pm
Δυστυχώς το FineReader δεν υποστηρίζει Clients. Μπορείς να το χρησιμοποιήσεις ως command line util και να το καλέσεις από την java σαν να εκτελείς command line ( Runtime.exec() ). Για το Web API της cloud υπηρεσίας OCR που δίνουν μπορείς να χρησιμοποιήσεις το πακέτο Java.net για να ανοίξεις http σύνδεση στο server τους ή να χρησιμοποιήσεις κάποιο Java Http Client για να κάνεις τα call που ζητάει. Στη χειρότερη υπάρχει ένα wrapper που χρησιμοποιεί JNI για integration με java http://www.abbyy-developers.eu/en:tech:samples:java-wrapper

Το FineReader γενικά είναι μακράν καλύτερο του ανταγωνισμού του, αλλά δεν είναι και τόσο φιλικό στον Developer  :-[