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); }
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"); } } }
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); }
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); }
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 + "'"); } }