Example #1
0
        private String recognizeFileAsync(IXConnection conn, String fileName, int timeoutSeconds)
        {
            // Open an event bus private to the session ticket and add a listener.
            // OCR results are send over this bus.
            EventBusApi.Bus eventBus = conn.EventBusApi.OpenEventBusChannel(conn.LoginResult.clientInfo.ticket);
            eventBus.AddListener(EventBusC.EVENT_OCR_RESULT);

            // Add a handler function for events.
            conn.EventBusApi.EventBusHandler += new EventBusApi.ProcessEventBusEvents(EventBusApi_EventBusHandler);

            OcrInfo ocrInfo = new OcrInfo();

            ocrInfo.recognizeFile                       = new OcrInfoRecognizeFile();
            ocrInfo.recognizeFile.imageData             = new FileData();
            ocrInfo.recognizeFile.imageData.data        = File.ReadAllBytes(fileName);
            ocrInfo.recognizeFile.imageData.contentType = ".TIF";
            ocrInfo.recognizeFile.recognizeLangs        = new String[] { "English" };
            ocrInfo.recognizeFile.timeoutSeconds        = timeoutSeconds;
            ocrInfo.recognizeFile.outputFormat          = OcrInfoC.TEXT;
            ocrInfo.recognizeFile.pageNo                = -1; // All pages

            // Set this properties for asynchronous processing:

            // Event bus that receives the result
            ocrInfo.busId = eventBus.Id;
            // ID for the request, unique for all open OCR requests on ocrInfo.busId
            ocrInfo.eventId = 123;

            // Process OCR
            conn.Ix.processOcr(ocrInfo);

            // Wait for result
            lock (syncObject)
            {
                long t1 = DateTime.Now.Ticks / 10000;
                int  dt = timeoutSeconds * 1000;
                while (result == null)
                {
                    Monitor.Wait(syncObject, dt);
                    long t2 = DateTime.Now.Ticks / 10000;
                    dt -= (int)(t2 - t1);
                    if (dt <= 0)
                    {
                        throw new Exception("Timeout");
                    }
                    t1 = t2;
                }
            }

            String text = result.recognizeFile.text;

            return(text);
        }
Example #2
0
        public void run()
        {
            IXConnFactory connFact = null;
            IXConnection  conn     = null;

            try
            {
                IXProperties connProps = IXConnFactory.CreateConnProperties(url);
                IXProperties sessOpts  = IXConnFactory.CreateSessionOptions("IX-Examples", "1.0");
                connFact = new IXConnFactory(connProps, sessOpts);
                conn     = connFact.Create(userName, userPwd, "myComputer", null);
                Logger.instance().log("login OK");

                Logger.instance().log("Check whether OCR is available...");
                bool avail = checkOcrAvail(conn);
                Logger.instance().log("OCR is available=" + avail);

                if (avail)
                {
                    Logger.instance().log("Query languages:");
                    OcrInfo ocrInfo = new OcrInfo();
                    ocrInfo.queryLanguages = new OcrInfoQueryLanguages();

                    // Extenal language names should be returned in this language
                    ocrInfo.messagesLanguage = OcrInfoC.MESSAGES_LANGUAGE_GERMAN;

                    OcrResult ocrResult = conn.Ix.processOcr(ocrInfo);
                    for (int i = 0; i < ocrResult.queryLanguages.externalLangs.Length; i++)
                    {
                        Logger.instance().log("external=" + ocrResult.queryLanguages.externalLangs[i]);
                        Logger.instance().log("internal=" + ocrResult.queryLanguages.internalLangs[i]);
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                // Logout
                if (conn != null)
                {
                    Logger.instance().log("IX logout...");
                    conn.Logout();
                    Logger.instance().log("IX logout OK");
                }
            }
        }
Example #3
0
        private String recognizeFileSync(IXConnection conn, String fileName)
        {
            OcrInfo ocrInfo = new OcrInfo();

            ocrInfo.recognizeFile                       = new OcrInfoRecognizeFile();
            ocrInfo.recognizeFile.imageData             = new FileData();
            ocrInfo.recognizeFile.imageData.data        = File.ReadAllBytes(fileName);
            ocrInfo.recognizeFile.imageData.contentType = ".TIF";
            ocrInfo.recognizeFile.recognizeLangs        = new String[] { "English" };
            ocrInfo.recognizeFile.timeoutSeconds        = 30;
            ocrInfo.recognizeFile.outputFormat          = OcrInfoC.TEXT;
            ocrInfo.recognizeFile.pageNo                = -1; // All pages

            OcrResult ocrResult = conn.Ix.processOcr(ocrInfo);
            String    text      = ocrResult.recognizeFile.text;

            return(text);
        }
Example #4
0
        private String recognizeRect(IXConnection conn, String fileName, int pmLeft, int pmTop, int pmRight, int pmBottom)
        {
            OcrInfo ocrInfo = new OcrInfo();

            ocrInfo.recognizeFile                       = new OcrInfoRecognizeFile();
            ocrInfo.recognizeFile.imageData             = new FileData();
            ocrInfo.recognizeFile.imageData.data        = File.ReadAllBytes(fileName);
            ocrInfo.recognizeFile.imageData.contentType = ".TIF";
            ocrInfo.recognizeFile.recognizeLangs        = new String[] { "English" };
            ocrInfo.recognizeFile.timeoutSeconds        = 30;
            ocrInfo.recognizeFile.outputFormat          = OcrInfoC.TEXT;
            ocrInfo.recognizeFile.pageNo                = 0;
            ocrInfo.recognizeFile.recognizeRects        = new OcrRect[] { new OcrRect(pmLeft, pmTop, pmRight, pmBottom) };
            ocrInfo.recognizeFile.rectUnit              = OcrInfoC.UNIT_PER_THOUSAND;

            OcrResult ocrResult = conn.Ix.processOcr(ocrInfo);
            String    text      = ocrResult.recognizeFile.text;

            return(text);
        }
Example #5
0
        private void recognizeFileCharPos(IXConnection conn, string fileName)
        {
            OcrInfo ocrInfo = new OcrInfo();

            ocrInfo.recognizeFile                       = new OcrInfoRecognizeFile();
            ocrInfo.recognizeFile.imageData             = new FileData();
            ocrInfo.recognizeFile.imageData.data        = File.ReadAllBytes(fileName);
            ocrInfo.recognizeFile.imageData.contentType = ".TIF";
            ocrInfo.recognizeFile.recognizeLangs        = new String[] { "English" };
            ocrInfo.recognizeFile.timeoutSeconds        = 30;
            ocrInfo.recognizeFile.outputFormat          = OcrInfoC.CHAR_AND_RECT_EX;
            ocrInfo.recognizeFile.pageNo                = 0; // First pages

            // Recognize document
            OcrResult ocrResult = conn.Ix.processOcr(ocrInfo);

            // Put result bytes into BinaryReader
            byte[]       data = ocrResult.recognizeFile.textData.data;
            BinaryReader rd   = new BinaryReader(new MemoryStream(data));

            // Read header
            int magic = rd.ReadInt32();

            if (magic != 0x52434F45)
            {
                throw new Exception("Unrecognized format");
            }
            int version = rd.ReadInt32();

            if (version > 3)
            {
                throw new Exception("Unsupported version");
            }
            double skew   = rd.ReadDouble();
            int    width  = rd.ReadInt32();
            int    height = rd.ReadInt32();

            Logger.instance().log("magic=0x" + Convert.ToString(magic, 16));
            Logger.instance().log("version=" + version);
            Logger.instance().log("skew=" + skew);
            Logger.instance().log("width=" + width);
            Logger.instance().log("height=" + height);

            // Read characters
            int headerSize = 4 + 4 + 8 + 4 + 4;
            int charSize   = 2 + 4 + 4 + 4 + 4 + 4 + 2;
            int nbOfChars  = (data.Length - headerSize) / charSize;

            for (int i = 0; i < Math.Min(100, nbOfChars); i++)
            {
                char ch      = (char)rd.ReadInt16();
                int  left    = rd.ReadInt32();
                int  top     = rd.ReadInt32();
                int  right   = rd.ReadInt32();
                int  bottom  = rd.ReadInt32();
                int  percent = rd.ReadInt32();
                char chOrig  = (char)rd.ReadInt16();

                Logger.instance().log("char " + i + ": '" + ch + "'");
                Logger.instance().log("  rect=(" + left + "," + top + "," + right + "," + bottom + ")");
                Logger.instance().log("  confidence=" + percent + ", orig='" + chOrig + "'");
            }
        }