[jawsscripts] Re: OCRSnapObject Failing!

  • From: "Donald Marang" <donald.marang@xxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Sun, 31 Jan 2010 09:54:41 -0500

Thanks!  I will give it a try as I play around with Visual Studio Express. 
Is Express sucificent to write .Net applications?  I may want to write a 
DLNA (Digital Living Network Alliance) application in the near future.

Don Marang

--------------------------------------------------
From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
Sent: Sunday, January 31, 2010 4:48 AM
To: <jawsscripts@xxxxxxxxxxxxx>
Subject: [jawsscripts] Re: OCRSnapObject Failing!

> Hi Don,
>
>  Here is a VBScript version of your example which works on my system, 
> using
> MS Office Pro 2003 on XP, even with Office 2003 SP3 installed.
>
>  I've left a number of VBScript dialogs in place which you should be able
> to remove with no problem.
>
>  Martin...
>
> Option Explicit
>
> Const forWriting = 2
> Const forAppending = 8
>
> Dim inputFile, outputFile
> Dim strRecText
> Dim Doc1 ' MODI.Document
> Dim imageCounter
> Dim fso, path, Count
>
> inputFile = "biscuits.tif"
> strRecText = ""
>
> ' Assuming .tif file is in same folder as .vbs file
> Set fso = CreateObject("Scripting.FileSystemObject")
> Set inputFile = fso.GetFile("biscuits.tif")
> path = inputFile.ShortPath
>
> WScript.Echo path
>
> Set Doc1 = CreateObject ("MODI.Document")
> Doc1.Create(path)
> Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
> Doc1.Save() ' this will save the deskewed reoriented images, and the OCR
> text, back to the inputFile
>
> WScript.Echo "number of images: " & Doc1.Images.Count
>
> For Each imageCounter In Doc1.Images
>    strRecText = strRecText & imageCounter.Layout.Text
> Next
>
> WScript.Echo strRecText
>
> ' this will write, not append
> Set outputFile= fso.CreateTextFile("c:\testfile.txt", forWriting)
> outputFile.Write (strRecText)
> outputFile.Close
>
> WScript.Echo "Text saved to " &  "c:\testfile.txt"
>
> ' Clean up
> Doc1.Close()
> Set outputFile = Nothing
> Set Doc1 = Nothing
> Set inputFile = Nothing
> Set fso = Nothing
>
>
> ----- Original Message ----- 
> From: "Donald Marang" <donald.marang@xxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Saturday, January 30, 2010 11:45 PM
> Subject: [jawsscripts] OCRSnapObject Failing!
>
>
>>I think I have the basic structure and JAWS Script statements I thought
>>should work.  Unfortunately it returns nothing!  How do you know if the
>>CreateObject function returns the expected object?  I attempt to retrieve
>>the number of images (pages), I would expect a value of one, but nothing 
>>is
>>returned.  Could someone familiar with objects in JAWS look to see if I
>>made a dumb mistake?
>> I included a copy of a Visual Basic routine to OCR an image file and
>> writes the plain text to a file.  I simplified this as I converted it to
>> JAWS script code.  I would think a screenshot image would only be one
>> page.
>>
>> Following the example is my script.  Some of the necessary lines are
>> commented out until I ensure the active code is working.  I also 
>> attempted
>> to use my constant, MODI_DLL_PATH, directly in the CreateObject
>> statements.  Both with single '\' and double '\\' characters.  Doing so
>> caused all three statements to fail.
>>
>> --- Start of example
>> Example from Wikipedia and MSDN for "MODI OCR" in Visual Basic .NET
>> </wiki/Visual_Basic_.NET> follows:
>> You can program the MODI object model from any development tool that
>> supports
>> the Component Object Model (COM) by setting a reference to the Microsoft
>> Office
>> Document Imaging 11.0 (Office 2003) (or 12.0, which is Office 2007,  I 
>> saw
>> somewhere else) Type Library.
>>
>> Dim inputFile As String = "C:\test\multipage.tif"
>> Dim strRecText As String = ""
>> Dim Doc1 As MODI.Document
>>
>> Doc1 = New MODI.Document
>> Doc1.Create(inputFile)
>> Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
>> Doc1.Save() ' this will save the deskewed reoriented images, and the OCR
>> text, back to the inputFile
>>
>> For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your 
>> way
>> through each page of results
>>    strRecText &= Doc1.Images(imageCounter).Layout.Text    ' this puts the
>> ocr results into a string
>> Next
>>
>> File.AppendAllText("C:\test\testmodi.txt", strRecText)     ' write the 
>> OCR
>> file out to disk
>>
>> Doc1.Close() ' clean up
>> Doc1 = Nothing
>> --- End of example
>> Include "hjconst.jsh"
>>
>> Const
>> CRLF = "\13\10", ; Cariage return followed by line feed character
>> SCREEN_CAPTURE_FILE = "ScreenCapture.tif", ; Temp file placed in the JAWS
>> user settings directory
>> NIRCMD = "nircmd.exe", ; Command Line Utility from:
>> http://www.nirsoft.net/utils/nircmd.html
>> IMAGE_OCR = "MSPVIEW.EXE -o ",
>> IMAGE_READ = "MSPVIEW.EXE -r ",
>> ; Microsoft Office Document Imaging Viewer Control 11.0 or 12.0
>> (MDIVWCTL.DLL)
>> MODI_DLL_PATH = "\"C:\\Program Files\\Common Files\\Microsoft
>> Shared\\MOD\\MDIVWCTL.DLL\""
>>
>> Script OCRSnapshotObject ()
>> Var
>> String sImageFile,
>> String sCmdUtility,
>> String sExecute,
>> Object oNull,
>> Object oDoc,
>> Object oAllImages,
>> Object oImage,
>> Object oLayout,
>> Int iCount,
>> Int iChars,
>> Int iWords,
>> String sText
>>
>> ; Close virtual buffer if open
>> If UserBufferIsActive () Then
>> UserBufferDeactivate ()
>> EndIf
>> ; Set temporary image filename
>> Let sImageFile = GetJAWSSettingsDirectory () + "\\" + SCREEN_CAPTURE_FILE
>> Let sImageFile = "\"" + sImageFile  + "\"" ; Enclose in quotes in case
>> there is a space in the path
>> ; Set Command Line Utility path
>> Let sCmdUtility = GetJAWSSettingsDirectory () + "\\" + NIRCMD
>> Let sCmdUtility = "\"" + sCmdUtility + "\"" ; Enclose in quotes in case
>> there is a space in the path
>> ; Capture image of foreground active window
>> Let sExecute = sCmdUtility + " savescreenshotwin " + sImageFile
>> ; SayString ("Will perform save screenshot to file = \"" + sExecute +
>> "\"")
>> Run (sExecute)
>> SayMessage (OT_MESSAGE, "Screen image has been captured.  Please wait for
>> OCR conversion.")
>> Delay (10) ; make sure the file is not in use
>>
>> ; Run Microsoft Office Document Imageing Object Model to perform OCR
>> ; Not sure how to create / open / register ovject as performed by
>> Visual.Net Basic in the nnext two lines
>> ; Dim Doc1 As MODI.Document
>> ; Let oDoc = New MODI.Document
>>
>> ; Method used in Homer Jax
>> Let oDoc = CreateObjectEx ("MODI.Document", False)
>> If ! oDoc Then
>> SayMessage (OT_ERROR, "Could not create object using first call!")
>> Let oDoc = CreateObject ("MODI.Document")
>> EndIf
>> If ! oDoc Then
>> SayMessage (OT_ERROR, "Could not create objectusing second call!")
>> ; Running out of possibilities, try the last variety
>> Let oDoc = CreateObjectEx ("MODI.Document", True)
>> EndIf
>> If ! oDoc Then
>> SayMessage (OT_ERROR, "Could not create objectusing third call!")
>>    Return oNull
>> EndIf
>> SayString ("Document object created!")
>> oDoc.Create(sImageFile) ; loads the image into the object
>> ; SayString ("Image file =" + sImageFile)
>> Let oAllImages = oDoc.Images
>> Let iCount = oAllImages.Count
>> SayString ("pages in file = " + IntToString (iCount))
>> ; oDoc.OCR() ; this will ocr all pages of a multi-page tiff file
>> ; oDoc.Save() ; this will save the deskewed reoriented images, and the 
>> OCR
>> text, back to the inputFile
>> ; Let oImage = oDoc.Images(0) ; first page of possible multi-page image
>> SayString ("OCR complete!")
>> ; Let oLayout = oImage.Layout ; OCR information
>> ; Let sText = oLayout.Text ; this puts the ocr results into a string
>> SayString ("text = \"" + sText + "\"")
>> ; Let iChars = oLayout.NumChars
>> ; Let iWords = oLayout.NumWords
>> SayMessage (OT_MESSAGE, "Screen image has been converted to text.")
>> SayMessage (OT_MESSAGE, "Converted " + IntToString (iChars) + "
>> characters, and " + IntToString (iWords) + " words")
>>
>> ; View converted text
>> SayMessage (OT_USER_BUFFER  , sText + CRLF + "Press Escape to close this
>> message.")
>> oDoc.Close() ; Clean up
>> Let oLayout = oNull
>> Let oImage =oNull
>> Let oAllImages = oNull
>> Let oDoc =oNull
>> EndScript
>>
>> Don Marang
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> http://www.freelists.org/list/jawsscripts
>>
>
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> http://www.freelists.org/list/jawsscripts
> 
__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts

Other related posts: