summaryrefslogtreecommitdiffstats
path: root/kooka/ksaneocr.h
diff options
context:
space:
mode:
Diffstat (limited to 'kooka/ksaneocr.h')
-rw-r--r--kooka/ksaneocr.h285
1 files changed, 285 insertions, 0 deletions
diff --git a/kooka/ksaneocr.h b/kooka/ksaneocr.h
new file mode 100644
index 00000000..425718dc
--- /dev/null
+++ b/kooka/ksaneocr.h
@@ -0,0 +1,285 @@
+/***************************************************************************
+ ksaneocr.h - ocr-engine class
+ -------------------
+ begin : Fri Jun 30 2000
+ copyright : (C) 2000 by Klaas Freitag
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This file may be distributed and/or modified under the terms of the *
+ * GNU General Public License version 2 as published by the Free Software *
+ * Foundation and appearing in the file COPYING included in the *
+ * packaging of this file. *
+ *
+ * As a special exception, permission is given to link this program *
+ * with any version of the KADMOS ocr/icr engine of reRecognition GmbH, *
+ * Kreuzlingen and distribute the resulting executable without *
+ * including the source code for KADMOS in the source distribution. *
+ *
+ * As a special exception, permission is given to link this program *
+ * with any edition of Qt, and distribute the resulting executable, *
+ * without including the source code for Qt in the source distribution. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSANEOCR_H
+#define KSANEOCR_H
+#include <qwidget.h>
+#include <qobject.h>
+
+#include "ocrword.h"
+
+#define CFG_OCR_ENGINE "ocrEngine"
+#define CFG_OCR_CLEANUP "unlinkORF" /* delete orf file? */
+
+#define CFG_OCR_KSPELL "ocrSpellSettings"
+#define CFG_WANT_KSPELL "ocrKSpellEnabled"
+#define CFG_KS_NOROOTAFFIX "KSpell_NoRootAffix"
+#define CFG_KS_RUNTOGETHER "KSpell_RunTogether"
+#define CFG_KS_DICTIONARY "KSpell_Dictionary"
+#define CFG_KS_DICTFROMLIST "KSpell_DictFromList"
+#define CFG_KS_ENCODING "KSpell_Encoding"
+#define CFG_KS_CLIENT "KSpell_Client"
+
+
+#define HIDE_BASE_DIALOG "hideOCRDialogWhileSpellCheck"
+/**
+ *@author Klaas Freitag
+ */
+
+class KOCRBase;
+class KookaImage;
+class KTempFile;
+class KProcess;
+class QRect;
+class QPixmap;
+class QStringList;
+class KSpell;
+class KSpellConfig;
+class ImageCanvas;
+class KConfig;
+// class ocrWord;
+// class ocrPage;
+
+#ifdef HAVE_KADMOS
+#include "kadmosocr.h"
+#endif
+
+/*
+ * Error Classifier the report errors on bad engine setup
+ */
+typedef enum{ ENG_ERROR, ENG_OK, ENG_DATA_MISSING, ENG_BAD_SETUP } EngineError;
+
+class KSANEOCR : public QObject
+{
+ Q_OBJECT
+public:
+ enum OCREngines{ GOCR, OCRAD, KADMOS };
+
+ KSANEOCR( QWidget*, KConfig *);
+ ~KSANEOCR();
+
+ bool startOCRVisible( QWidget* parent=0);
+
+ void finishedOCRVisible( bool );
+
+ /**
+ * checks after a ocr run if the line number exists in the result
+ */
+ bool lineValid( int line );
+
+#ifdef HAVE_KADMOS
+ bool startKadmosOCR();
+#endif
+
+ /**
+ * return the final ocr result
+ */
+
+ QString ocrResultText();
+
+ /**
+ * @return the current spell config.
+ */
+ KSpellConfig* ocrSpellConfig() const
+ { return m_spellInitialConfig; }
+
+
+ /**
+ * Sets an image Canvas that displays the result image of ocr. If this
+ * is set to zero (or never set) no result image is displayed.
+ * The ocr fabric passes a new image to the canvas which is a copy of
+ * the image to ocr.
+ */
+ void setImageCanvas( ImageCanvas* canvas );
+
+signals:
+ void newOCRResultText( const QString& );
+ void clearOCRResultText();
+ void newOCRResultPixmap( const QPixmap& );
+
+ /**
+ * progress of the ocr process. The first integer is the main progress,
+ * the second the sub progress. If there is only on progress, it is the
+ * first parameter, the second is always -1 than.
+ * Both have a range from 0..100.
+ * Note that this signal may not be emitted if the engine does not support
+ * progress.
+ */
+ void ocrProgress(int, int);
+
+ /**
+ * select a word in the editor in line line.
+ */
+ void selectWord( int line, const ocrWord& word );
+
+ /**
+ * signal to indicate that a ocr text must be updated due to better results
+ * retrieved from spell check. The internal ocr data structure is already
+ * updated when this signal is fired.
+ *
+ * @param line the line in which the word must be changed (start at 0)
+ * @param wordFrom the original word
+ * @param wordTo the new word(s).
+ */
+ void updateWord( int line, const QString& wordFrom, const QString& wordTo );
+
+ /**
+ * signal to indicate that word word was ignored by the user. This should result
+ * in a special coloring in the editor.
+ */
+ void ignoreWord( int, const ocrWord& );
+
+ /**
+ * signal that comes if a word is considered to be wrong in the editor.
+ * The word should be marked in any way, e.g. with a signal color.
+ **/
+ void markWordWrong( int, const ocrWord& );
+
+ /**
+ * signal the tells that the result image was modified.
+ */
+ void repaintOCRResImage( );
+
+ /**
+ * indicates that the text editor holding the text that came through
+ * newOCRResultText should be set to readonly or not. Can be connected
+ * to QTextEdit::setReadOnly directly.
+ */
+ void readOnlyEditor( bool );
+
+public slots:
+ void slSetImage( KookaImage* );
+
+ void slLineBox( const QRect& );
+
+protected:
+ /**
+ * Start spell checking on a specific line that is stored in m_ocrCurrLine.
+ * This method starts the spell checking.
+ **/
+ void startLineSpellCheck();
+ ocrWord ocrWordFromKSpellWord( int line, const QString& word );
+
+ /**
+ * Eventhandler to handle the mouse events to the image viewer showing the
+ * ocr result image
+ */
+ bool eventFilter( QObject *object, QEvent *event );
+
+ void startOCRAD();
+protected slots:
+ void slotClose ();
+ void slotStopOCR();
+
+ void slSpellReady( KSpell* );
+ void slSpellDead( );
+ /**
+ * a new list of ocr results of the current ocr process arrived and is available
+ * in the member m_ocrPage[line]
+ */
+ // void gotOCRLine( int line );
+
+ void slMisspelling( const QString& originalword,
+ const QStringList& suggestions,
+ unsigned int pos );
+ void slSpellCorrected( const QString& originalword,
+ const QString& newword,
+ unsigned int pos );
+
+ void slSpellIgnoreWord( const QString& word );
+
+ void slCheckListDone( bool );
+
+ bool slUpdateWord( int line, int spellWordIndx,
+ const QString& origWord,
+ const QString& newWord );
+
+private slots:
+
+ void slotKadmosResult();
+ void startOCRProcess( void );
+ void gocrStdIn(KProcess*, char* buffer, int buflen);
+ void gocrStdErr(KProcess*, char* buffer, int buflen);
+ void gocrExited(KProcess*);
+
+ void ocradStdIn(KProcess*, char* buffer, int buflen);
+ void ocradStdErr(KProcess*, char* buffer, int buflen);
+ void ocradExited(KProcess*);
+
+ /*
+ * reads orf files from a file and fills the result structures
+ * accordingly.
+ */
+ bool readORF( const QString&, QString& );
+
+private:
+ void cleanUpFiles( void );
+
+
+ KOCRBase *m_ocrProcessDia;
+ KProcess *daemon;
+ bool visibleOCRRunning;
+ KTempFile *m_tmpFile;
+
+ KookaImage *m_img;
+ QString m_ocrResultText;
+ QString m_ocrResultImage;
+ QString m_ocrImagePBM;
+ QString m_tmpOrfName;
+ QImage *m_resultImage;
+
+ OCREngines m_ocrEngine;
+ QPixmap m_resPixmap;
+ QPixmap m_storePixmap;
+
+ ImageCanvas *m_imgCanvas;
+
+ KSpell *m_spell;
+ bool m_wantKSpell;
+ bool m_kspellVisible;
+ bool m_hideDiaWhileSpellcheck;
+ KSpellConfig *m_spellInitialConfig;
+
+ /* ValueVector of wordLists for every line of ocr results */
+ ocrBlock m_ocrPage; /* one block contains all lines of the page */
+ QWidget *m_parent;
+ /* current processed line to speed kspell correction */
+ unsigned m_ocrCurrLine;
+ QStringList m_checkStrings;
+
+ int m_currHighlight;
+ bool m_applyFilter;
+
+ bool m_unlinkORF;
+ rectList m_blocks; // dimensions of blocks
+
+ static char UndetectedChar;
+#ifdef HAVE_KADMOS
+ Kadmos::CRep m_rep;
+#endif
+};
+
+#endif