Search in sources :

Example 1 with DocumentObserver

use of com.joliciel.jochre.doc.DocumentObserver in project jochre by urieli.

the class JochreCorpusImageProcessor method process.

public void process() {
    this.initialiseStream();
    JochreDocument currentDoc = null;
    JochrePage currentPage = null;
    for (JochreImage image : this.getImages()) {
        if (!image.getPage().equals(currentPage)) {
            if (currentPage != null) {
                for (DocumentObserver observer : observers) {
                    observer.onPageComplete(currentPage);
                }
                LOG.debug("completed page: " + currentPage);
            }
        }
        if (!image.getPage().getDocument().equals(currentDoc)) {
            if (currentDoc != null) {
                for (DocumentObserver observer : observers) {
                    observer.onDocumentComplete(currentDoc);
                }
                LOG.debug("completed doc: " + currentDoc);
            }
            currentDoc = image.getPage().getDocument();
            LOG.debug("next doc: " + currentDoc);
            for (DocumentObserver observer : observers) {
                observer.onDocumentStart(currentDoc);
            }
        }
        if (!image.getPage().equals(currentPage)) {
            currentPage = image.getPage();
            LOG.debug("next page: " + currentPage);
            for (DocumentObserver observer : observers) {
                observer.onPageStart(currentPage);
            }
        }
        LOG.debug("next image: " + image);
        for (DocumentObserver observer : observers) {
            observer.onImageStart(image);
        }
        for (DocumentObserver observer : observers) {
            observer.onImageComplete(image);
        }
        LOG.debug("completed image: " + image);
        image.clearMemory();
    }
    if (currentPage != null) {
        for (DocumentObserver observer : observers) {
            observer.onPageComplete(currentPage);
        }
        LOG.debug("completed page: " + currentPage);
    }
    if (currentDoc != null) {
        for (DocumentObserver observer : observers) {
            observer.onDocumentComplete(currentDoc);
        }
        LOG.debug("completed doc: " + currentDoc);
    }
    for (DocumentObserver observer : observers) {
        observer.onAnalysisComplete();
    }
}
Also used : DocumentObserver(com.joliciel.jochre.doc.DocumentObserver) JochreDocument(com.joliciel.jochre.doc.JochreDocument) JochrePage(com.joliciel.jochre.doc.JochrePage)

Example 2 with DocumentObserver

use of com.joliciel.jochre.doc.DocumentObserver in project jochre by urieli.

the class TextController method onTimer$startRenderTimer.

@Listen("onTimer = #startRenderTimer")
public void onTimer$startRenderTimer(Event event) {
    try {
        progressBox.setVisible(true);
        if (currentImage != null) {
            Html html = new Html();
            StringWriter out = new StringWriter();
            DocumentObserver textGetter = new TextGetter(out, TextFormat.XHTML);
            textGetter.onImageComplete(currentImage);
            html.setContent(out.toString());
            htmlContent.appendChild(html);
            progressMeter1.setValue(100);
        // progressBox.setVisible(false);
        } else {
            if (currentPageIndex < currentDoc.getPages().size()) {
                JochrePage page = currentDoc.getPages().get(currentPageIndex);
                for (JochreImage image : page.getImages()) {
                    Html html = new Html();
                    StringWriter out = new StringWriter();
                    DocumentObserver textGetter = new TextGetter(out, TextFormat.XHTML);
                    textGetter.onImageComplete(image);
                    out.append("<HR/>");
                    html.setContent(out.toString());
                    htmlContent.appendChild(html);
                }
                page.clearMemory();
                currentPageIndex++;
                double percentComplete = ((double) currentPageIndex / (double) currentDoc.getPages().size()) * 100;
                progressMeter1.setValue(new Double(percentComplete).intValue());
                startRenderTimer.setRunning(true);
            } else {
                progressMeter1.setValue(100);
            // progressBox.setVisible(false);
            }
        }
    } catch (Exception e) {
        LOG.error("Failure in onTimer$startRenderTimer", e);
        throw new RuntimeException(e);
    }
}
Also used : JochreImage(com.joliciel.jochre.graphics.JochreImage) StringWriter(java.io.StringWriter) DocumentObserver(com.joliciel.jochre.doc.DocumentObserver) Html(org.zkoss.zul.Html) JochrePage(com.joliciel.jochre.doc.JochrePage) TextGetter(com.joliciel.jochre.output.TextGetter) Listen(org.zkoss.zk.ui.select.annotation.Listen)

Example 3 with DocumentObserver

use of com.joliciel.jochre.doc.DocumentObserver in project jochre by urieli.

the class Jochre method doCommandEvaluateFull.

/**
 * Evaluate a suite of split/merge models and letter guessing model.
 *  @param criteria
 *          for selecting the evaluation corpus
 * @param save
 *          whether or not the letter guesses should be saved
 */
public void doCommandEvaluateFull(CorpusSelectionCriteria criteria, boolean save, File outputDir, MostLikelyWordChooser wordChooser, String suffix, List<DocumentObserver> observers) throws IOException {
    String baseName = jochreSession.getLetterModelPath().substring(0, jochreSession.getLetterModelPath().indexOf("."));
    if (baseName.lastIndexOf("/") > 0)
        baseName = baseName.substring(baseName.lastIndexOf("/") + 1);
    ClassificationModel letterModel = jochreSession.getLetterModel();
    List<String> letterFeatureDescriptors = letterModel.getFeatureDescriptors();
    LetterFeatureParser letterFeatureParser = new LetterFeatureParser();
    Set<LetterFeature<?>> letterFeatures = letterFeatureParser.getLetterFeatureSet(letterFeatureDescriptors);
    LetterGuesser letterGuesser = new LetterGuesser(letterFeatures, letterModel.getDecisionMaker());
    ClassificationModel splitModel = jochreSession.getSplitModel();
    if (splitModel == null)
        throw new IllegalArgumentException("Missing parameter: jochre.image-analyser.split-model");
    List<String> splitFeatureDescriptors = splitModel.getFeatureDescriptors();
    SplitFeatureParser splitFeatureParser = new SplitFeatureParser();
    Set<SplitFeature<?>> splitFeatures = splitFeatureParser.getSplitFeatureSet(splitFeatureDescriptors);
    SplitCandidateFinder splitCandidateFinder = new SplitCandidateFinder(jochreSession);
    splitCandidateFinder.setMinDistanceBetweenSplits(5);
    ShapeSplitter shapeSplitter = new RecursiveShapeSplitter(splitCandidateFinder, splitFeatures, splitModel.getDecisionMaker(), jochreSession);
    ClassificationModel mergeModel = jochreSession.getMergeModel();
    if (mergeModel == null)
        throw new IllegalArgumentException("Missing parameter: jochre.image-analyser.merge-model");
    List<String> mergeFeatureDescriptors = mergeModel.getFeatureDescriptors();
    MergeFeatureParser mergeFeatureParser = new MergeFeatureParser();
    Set<MergeFeature<?>> mergeFeatures = mergeFeatureParser.getMergeFeatureSet(mergeFeatureDescriptors);
    ShapeMerger shapeMerger = new ShapeMerger(mergeFeatures, mergeModel.getDecisionMaker());
    BoundaryDetector boundaryDetector = null;
    String boundaryDetectorTypeName = jochreSession.getConfig().getConfig("jochre.boundaries").getString("boundary-detector-type");
    BoundaryDetectorType boundaryDetectorType = BoundaryDetectorType.valueOf(boundaryDetectorTypeName);
    switch(boundaryDetectorType) {
        case LetterByLetter:
            boundaryDetector = new LetterByLetterBoundaryDetector(shapeSplitter, shapeMerger, jochreSession);
            break;
        case Deterministic:
            boundaryDetector = new DeterministicBoundaryDetector(shapeSplitter, shapeMerger, jochreSession);
            break;
    }
    ImageAnalyser imageAnalyser = new BeamSearchImageAnalyser(boundaryDetector, letterGuesser, wordChooser, jochreSession);
    LetterValidator letterValidator = new ComponentCharacterValidator(jochreSession);
    OriginalShapeLetterAssigner shapeLetterAssigner = new OriginalShapeLetterAssigner();
    shapeLetterAssigner.setEvaluate(true);
    shapeLetterAssigner.setSave(save);
    shapeLetterAssigner.setLetterValidator(letterValidator);
    shapeLetterAssigner.setSingleLetterMethod(false);
    imageAnalyser.addObserver(shapeLetterAssigner);
    ErrorLogger errorLogger = new ErrorLogger(jochreSession);
    Writer errorWriter = null;
    File errorFile = new File(outputDir, baseName + suffix + "errors.txt");
    errorFile.delete();
    errorWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(errorFile, true), "UTF8"));
    errorLogger.setErrorWriter(errorWriter);
    imageAnalyser.addObserver(errorLogger);
    JochreCorpusImageProcessor imageProcessor = new JochreCorpusImageProcessor(criteria, jochreSession);
    imageProcessor.addObserver(imageAnalyser);
    for (DocumentObserver observer : observers) imageProcessor.addObserver(observer);
    imageProcessor.process();
    LOG.debug("F-score for " + jochreSession.getLetterModelPath() + ": " + shapeLetterAssigner.getFScoreCalculator().getTotalFScore());
    String modelFileName = baseName + suffix + "_full";
    File fscoreFile = new File(outputDir, modelFileName + "_fscores.csv");
    Writer fscoreWriter = errorWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fscoreFile, true), jochreSession.getCsvEncoding()));
    shapeLetterAssigner.getFScoreCalculator().writeScoresToCSV(fscoreWriter);
}
Also used : LetterByLetterBoundaryDetector(com.joliciel.jochre.boundaries.LetterByLetterBoundaryDetector) RecursiveShapeSplitter(com.joliciel.jochre.boundaries.RecursiveShapeSplitter) OriginalShapeLetterAssigner(com.joliciel.jochre.analyser.OriginalShapeLetterAssigner) BeamSearchImageAnalyser(com.joliciel.jochre.analyser.BeamSearchImageAnalyser) ImageAnalyser(com.joliciel.jochre.analyser.ImageAnalyser) DeterministicBoundaryDetector(com.joliciel.jochre.boundaries.DeterministicBoundaryDetector) SplitFeature(com.joliciel.jochre.boundaries.features.SplitFeature) BufferedWriter(java.io.BufferedWriter) MergeFeatureParser(com.joliciel.jochre.boundaries.features.MergeFeatureParser) LetterValidator(com.joliciel.jochre.letterGuesser.LetterValidator) JochreCorpusImageProcessor(com.joliciel.jochre.graphics.JochreCorpusImageProcessor) LetterFeature(com.joliciel.jochre.letterGuesser.features.LetterFeature) LetterFeatureParser(com.joliciel.jochre.letterGuesser.features.LetterFeatureParser) RecursiveShapeSplitter(com.joliciel.jochre.boundaries.RecursiveShapeSplitter) TrainingCorpusShapeSplitter(com.joliciel.jochre.boundaries.TrainingCorpusShapeSplitter) ShapeSplitter(com.joliciel.jochre.boundaries.ShapeSplitter) SplitCandidateFinder(com.joliciel.jochre.boundaries.SplitCandidateFinder) MergeFeature(com.joliciel.jochre.boundaries.features.MergeFeature) OriginalBoundaryDetector(com.joliciel.jochre.boundaries.OriginalBoundaryDetector) BoundaryDetector(com.joliciel.jochre.boundaries.BoundaryDetector) LetterByLetterBoundaryDetector(com.joliciel.jochre.boundaries.LetterByLetterBoundaryDetector) DeterministicBoundaryDetector(com.joliciel.jochre.boundaries.DeterministicBoundaryDetector) DocumentObserver(com.joliciel.jochre.doc.DocumentObserver) SplitFeatureParser(com.joliciel.jochre.boundaries.features.SplitFeatureParser) LetterGuesser(com.joliciel.jochre.letterGuesser.LetterGuesser) ErrorLogger(com.joliciel.jochre.analyser.ErrorLogger) TrainingCorpusShapeMerger(com.joliciel.jochre.boundaries.TrainingCorpusShapeMerger) ShapeMerger(com.joliciel.jochre.boundaries.ShapeMerger) FileOutputStream(java.io.FileOutputStream) BeamSearchImageAnalyser(com.joliciel.jochre.analyser.BeamSearchImageAnalyser) OutputStreamWriter(java.io.OutputStreamWriter) ComponentCharacterValidator(com.joliciel.jochre.letterGuesser.ComponentCharacterValidator) File(java.io.File) ClassificationModel(com.joliciel.talismane.machineLearning.ClassificationModel) UnknownWordListWriter(com.joliciel.jochre.lexicon.UnknownWordListWriter) BufferedWriter(java.io.BufferedWriter) Writer(java.io.Writer) LexiconErrorWriter(com.joliciel.jochre.lexicon.LexiconErrorWriter) OutputStreamWriter(java.io.OutputStreamWriter)

Example 4 with DocumentObserver

use of com.joliciel.jochre.doc.DocumentObserver in project jochre by urieli.

the class Jochre method doCommandAnalyse.

/**
 * Analyse a set of images based on a given letter-guessing model.
 *
 * @param criteria
 *          the criteria used to select the documents to be analysed
 * @param wordChooser
 *          the word chooser to use
 * @param observers
 *          the observers, used to create analysis output
 */
public void doCommandAnalyse(CorpusSelectionCriteria criteria, MostLikelyWordChooser wordChooser, List<DocumentObserver> observers) throws IOException {
    ClassificationModel letterModel = jochreSession.getLetterModel();
    List<String> letterFeatureDescriptors = letterModel.getFeatureDescriptors();
    LetterFeatureParser letterFeatureParser = new LetterFeatureParser();
    Set<LetterFeature<?>> letterFeatures = letterFeatureParser.getLetterFeatureSet(letterFeatureDescriptors);
    LetterGuesser letterGuesser = new LetterGuesser(letterFeatures, letterModel.getDecisionMaker());
    ImageAnalyser analyser = new BeamSearchImageAnalyser(null, letterGuesser, wordChooser, jochreSession);
    LetterAssigner letterAssigner = new LetterAssigner();
    analyser.addObserver(letterAssigner);
    JochreCorpusImageProcessor imageProcessor = new JochreCorpusImageProcessor(criteria, jochreSession);
    imageProcessor.addObserver(analyser);
    for (DocumentObserver observer : observers) imageProcessor.addObserver(observer);
    imageProcessor.process();
}
Also used : JochreCorpusImageProcessor(com.joliciel.jochre.graphics.JochreCorpusImageProcessor) BeamSearchImageAnalyser(com.joliciel.jochre.analyser.BeamSearchImageAnalyser) ImageAnalyser(com.joliciel.jochre.analyser.ImageAnalyser) LetterFeature(com.joliciel.jochre.letterGuesser.features.LetterFeature) OriginalShapeLetterAssigner(com.joliciel.jochre.analyser.OriginalShapeLetterAssigner) LetterAssigner(com.joliciel.jochre.analyser.LetterAssigner) DocumentObserver(com.joliciel.jochre.doc.DocumentObserver) BeamSearchImageAnalyser(com.joliciel.jochre.analyser.BeamSearchImageAnalyser) LetterFeatureParser(com.joliciel.jochre.letterGuesser.features.LetterFeatureParser) ClassificationModel(com.joliciel.talismane.machineLearning.ClassificationModel) LetterGuesser(com.joliciel.jochre.letterGuesser.LetterGuesser)

Example 5 with DocumentObserver

use of com.joliciel.jochre.doc.DocumentObserver in project jochre by urieli.

the class Jochre method doCommandTransform.

/**
 * Transform stuff in the corpus into a given output format.
 *  @param criteria
 *          the criteria used to select the documents to be analysed
 * @param observers
 * @param imageObservers
 */
public void doCommandTransform(CorpusSelectionCriteria criteria, List<DocumentObserver> observers, List<PdfImageObserver> imageObservers) throws IOException {
    JochreCorpusImageProcessor imageProcessor = new JochreCorpusImageProcessor(criteria, jochreSession);
    for (DocumentObserver observer : observers) imageProcessor.addObserver(observer);
    imageProcessor.process();
}
Also used : JochreCorpusImageProcessor(com.joliciel.jochre.graphics.JochreCorpusImageProcessor) DocumentObserver(com.joliciel.jochre.doc.DocumentObserver)

Aggregations

DocumentObserver (com.joliciel.jochre.doc.DocumentObserver)8 BeamSearchImageAnalyser (com.joliciel.jochre.analyser.BeamSearchImageAnalyser)5 ImageAnalyser (com.joliciel.jochre.analyser.ImageAnalyser)5 OriginalShapeLetterAssigner (com.joliciel.jochre.analyser.OriginalShapeLetterAssigner)5 JochreCorpusImageProcessor (com.joliciel.jochre.graphics.JochreCorpusImageProcessor)5 LetterGuesser (com.joliciel.jochre.letterGuesser.LetterGuesser)5 LetterFeature (com.joliciel.jochre.letterGuesser.features.LetterFeature)5 LetterFeatureParser (com.joliciel.jochre.letterGuesser.features.LetterFeatureParser)5 ClassificationModel (com.joliciel.talismane.machineLearning.ClassificationModel)5 LetterAssigner (com.joliciel.jochre.analyser.LetterAssigner)4 BoundaryDetector (com.joliciel.jochre.boundaries.BoundaryDetector)4 DeterministicBoundaryDetector (com.joliciel.jochre.boundaries.DeterministicBoundaryDetector)4 LetterByLetterBoundaryDetector (com.joliciel.jochre.boundaries.LetterByLetterBoundaryDetector)4 OriginalBoundaryDetector (com.joliciel.jochre.boundaries.OriginalBoundaryDetector)4 ErrorLogger (com.joliciel.jochre.analyser.ErrorLogger)3 RecursiveShapeSplitter (com.joliciel.jochre.boundaries.RecursiveShapeSplitter)3 ShapeMerger (com.joliciel.jochre.boundaries.ShapeMerger)3 ShapeSplitter (com.joliciel.jochre.boundaries.ShapeSplitter)3 TrainingCorpusShapeMerger (com.joliciel.jochre.boundaries.TrainingCorpusShapeMerger)3 TrainingCorpusShapeSplitter (com.joliciel.jochre.boundaries.TrainingCorpusShapeSplitter)3