I am encountering issues on some documents when trying to OCR specific regions of a document. For any one byte array, I am trying to OCR two different regions (Region a, Region b) with one OCR context to get relevant information. On some documents, after a successful OCR of region a, when I try to OCR region b the application crashes on the RunOCR method. I am checking the status of the SetROI method and it shows as ok, and I wrap it in a try/catch but I'm still unable to catch the exception. The exception is unhandled and it appears to be in the tesseract dll.
Interestingly, if I swap the order and check region b first, then region a....it works fine. It also works fine if I separate out the OCR into different methods with unique OCR contexts.
The error is in the PC Event Viewer and it shows the faulting module as the tesseract dll.
GDPicture version: 14.1.130
The error:
Faulting application name: JDIS.exe, version: 19.1.1.8, time stamp: 0x61437fe5
Faulting module name: GdPicture.NET.14.ocr.tesseract.3.64.dll, version: 2.0.0.66, time stamp: 0x611fa78a
Exception code: 0xc0000409
Fault offset: 0x00000000002a7e55
Faulting process id: 0x1f44
Faulting application start time: 0x01d7abdcffa0ee93
Faulting application path: FullPathRemovedForTicket\bin\Debug\JDIS.exe
Faulting module path: FullPathRemovedForTicket\bin\Debug\GdPicture.NET.14.ocr.tesseract.3.64.dll
Report Id: 72bf44a8-b384-4e08-aa3d-9c17fed9a58a
Faulting package full name:
Faulting package-relative application ID:
Sample Code:
Code: Select all
Private Sub OCRDocument(ByRef image As Byte())
Try
Dim formNumber As String = ""
Dim oGdPictureOCR As GdPictureOCR = New GdPictureOCR()
Dim oGdPictureImaging As New GdPictureImaging()
Dim imageId As Integer = oGdPictureImaging.CreateGdPictureImageFromByteArray(image)
If oGdPictureImaging.GetStat() <> GdPictureStatus.OK Then
Throw New Exception("OCR Failed to create GDPictureImage. STAT: " + oGdPictureImaging.GetStat().ToString())
End If
Dim imageWidth = oGdPictureImaging.GetWidth(imageId)
Dim imageHeight = oGdPictureImaging.GetHeight(imageId)
Dim eighthHeight As Integer = imageHeight / 8
Dim halfWidth As Integer = imageWidth / 2
Dim caseIdLeftPoint As Integer = halfWidth
Dim caseIdTopPoint As Integer = 10
Dim caseIdWidthArea As Integer = halfWidth - 5
Dim caseIdHeightArea As Integer = eighthHeight
Dim formLeftPoint As Integer = 0
Dim formTopPoint As Integer = imageHeight - eighthHeight
Dim formwidthArea As Integer = halfWidth
Dim formheightArea As Integer = eighthHeight
oGdPictureOCR.Context = OCRContext.OCRContextDocument
oGdPictureOCR.OCRMode = OCRMode.FavorAccuracy
oGdPictureOCR.ResourceFolder = System.AppDomain.CurrentDomain.BaseDirectory.ToString()
Dim formIdcontent As String = Nothing
Dim gdPicStatus As GdPictureStatus = oGdPictureOCR.AddLanguage(OCRLanguage.English)
If gdPicStatus = GdPictureStatus.OK Then
If oGdPictureOCR.SetImage(imageId) = GdPictureStatus.OK Then
'REGION A
oGdPictureOCR.SetROI(caseIdLeftPoint, caseIdTopPoint, caseIdWidthArea, caseIdHeightArea)
Dim caseIdOcrId As String = oGdPictureOCR.RunOCR("caseNumber")
Dim caseIdStatus As GdPictureStatus = oGdPictureOCR.GetStat()
If caseIdStatus <> GdPictureStatus.OK Then
Throw New Exception("OCR problem with oGdPictureOCR.RunOCR for case ID. STAT: " + oGdPictureOCR.GetStat().ToString())
End If
'REGION B
Dim formIdOcrSetROIStatus As GdPictureStatus = oGdPictureOCR.SetROI(formLeftPoint, formTopPoint, formwidthArea, formheightArea)
If formIdOcrSetROIStatus <> GdPictureStatus.OK Then
Throw New Exception("OCR problem with oGdPictureOCR.SetROI for form number. STAT: " + oGdPictureOCR.GetStat().ToString())
End If
Dim formOcrId As String = ""
Try
'UNHANDLED EXCEPTION HAPPENS HERE ON SOME DOCUMENTS
formOcrId = oGdPictureOCR.RunOCR("formId")
Catch ex As Exception
Throw New Exception("OCR problem with oGdPictureOCR.RunOCR for form number. STAT: " + oGdPictureOCR.GetStat().ToString())
End Try
Dim formIdOcrStatus As GdPictureStatus = oGdPictureOCR.GetStat()
If formIdOcrStatus <> GdPictureStatus.OK Then
Throw New Exception("OCR problem with oGdPictureOCR.RunOCR for form number. STAT: " + oGdPictureOCR.GetStat().ToString())
End If
formIdcontent = oGdPictureOCR.GetOCRResultText(formOcrId)
Else
Throw New Exception("OCR problem with oGdPictureOCR.SetImage. STAT: " + oGdPictureOCR.GetStat().ToString())
End If
Else
Throw New Exception("OCR problem with AddLanguage method gdPicStatus. STAT: " + gdPicStatus.ToString())
End If
Catch ex As Exception
Throw ex
End Try
End Sub
Thank you for any insight anyone may be able to provide.