[jawsscripts] Re: OCRSnapObject Failing!

  • From: Soronel Haetir <soronel.haetir@xxxxxxxxx>
  • To: jawsscripts <jawsscripts@xxxxxxxxxxxxx>
  • Date: Sun, 31 Jan 2010 08:11:47 -0900

Yes, Express is more than sufficient for what you are doing.  It may,
however, require quite a few seperate downloads to get  the various
libraries you need.  I know VS2008 can use through at least  .NET 3.5
but forget if that's something you need to download or if it's
included in the Express package.  Note that the .NET run-time you
download from windows update is not the full development package,
there is more you can find on msdn.microsoft.com.

On 1/31/10, Donald Marang <donald.marang@xxxxxxxxx> wrote:
> 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
>
>


-- 
Soronel Haetir
soronel.haetir@xxxxxxxxx
__________ 
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: