OCR

  • Hallo,
    ich suche ein Script (gerne auch mit externen Programmen), das eine 4-Stellige Zahl vom Monitor abliest. Es handelt sich dabei nicht um Captcha und die Ziffern sehen immer gleich aus. Google hat mir diesen Thread genannt, der genau das ist, was ich suche - leider funktioniert das Script bei mir nicht, die Msg-Boxen sind leer...

    Hoffe, jemand kann mir helfen :)

    Gruß

    Chris

  • in dem von Dir erwähnten Script wird erwartet, dass die 2 exe-Dateien in einem Unterordner des Scriptordners liegen der "App" heisst. ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • danke für die schnelle Antwort, doch das habe ich auch gewusst ;)

    Das Script öffnet einen Editor, schreibt einen kurzen Text und sollte jetzt eigentlich einen Screenshot machen, durch djpeg und gocr jagen und dann in einer Msg-Box ausgeben. Leider ist die Msg-Box leer...

  • ich hab es eben ausprobiert unter Win 7.
    Da ich zuerst auch an der Hürde gescheitert bin mein Tip.
    Wenn es bei Dir trotzdem nicht geht weiß ich auch nicht...

    PS: ich habe in dem Beispiel einfach den Parameter @ScriptDir 6 '\App' gelöscht ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • :(
    manno, woran könnte das den liegen? Ich habe einen Ordner, darin einen Unterordner "App" mit den beiden exen drin und öffne das Script... wie gesagt, kommt kein Error, der Editor geht auf, schreibt und eine leere MSG-Box kommt :(

  • Console blinkt auf und verschwindet sofort wieder. Habe mir gerade die Vollversion von GOCR runtergeladen - anscheinend fehlt mir .NET Framework 1.1.4322. Seltsam, ich habe .NET Framework 3 drauf ;D werde jetzt erstmal das 1.1er runterladen, dann mal sehen...

    dankenochmal für die Hilfe


    EDIT: nope, funktioniert immernoch nicht

    EDIT2: klappt zwar immernoch nicht, jedoch erkennt die Vollversion von GOCR die Zahlen nicht richtig.

    Gibt es ein Programm, in dem man eigene Schriftarten einbringen kann, nach denen gesucht wird?

    Falls nicht, denkt ihr, es wäre sinnvoll, per _ImageSearch die Positionen der Zahlen zu finden und daraus einen String bzw einen Int aufzubauen?

    2 Mal editiert, zuletzt von erox (21. Mai 2011 um 19:53)

  • Am sinnvollsten wäre es wenn du mal genauer erklärst wofür du das brauchst. Bisher hast du ja nur geschrieben, dass es kein Captcha ist. Möglicherweise gibt es ja auch bessere Methoden als OCR um an die Daten zukommen.

  • Ich möchte aus einer Webseite, die auf Flash basiert, eine Statistik erstellen. Habe mich bereits an TCP versucht und bin gnadenlos gescheitert :rofl:
    Meine jetziger Plan sieht so aus:

    per imagesearch.au3, genauer der Funktion _WaitForImagesSearch, erstelle mich mir ein 3-Dimensionales Array, in der für jede Ziffer der Zahl die x-Koordinaten + die Ziffer gespeichert wird. Anschließend will ich die Zahlen nach den x-Koordinaten ordnen und aus dem Array einen String erstellen, den ich anschließend in den fertigen Integer umwandele.... gibt es eurer Meinung nach einfachere Wege?


    EDIT:

    nja... Script funktioniert noch nicht, die Position der Zahlen ändert sich aufgrund ihrer Größe immer wieder und es kommt vor, dass Zahlen doppelt auftauchen... mein Script bis hier:

    Spoiler anzeigen
    [autoit]

    Func _select()

    ;ZAHL 1
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 895 AND $n < 905 Then
    $1 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 2
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 906 AND $n < 916 Then
    $2 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 3
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 917 AND $n < 927 Then
    $3 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 4
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 928 AND $n < 929 Then
    $4 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "ROFL", $1 & $2 & $3 & $4)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ImgSearch($sPic, $iTimeout = 100, $bClick = 1, $iTol = 5)
    Local $iX = 0, $iY = 0, $bResult = 0, $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    $aPics = StringRegExp($sPic, '([^|]+)', 3)

    [/autoit] [autoit][/autoit] [autoit]

    While TimerDiff($iTimer) < $iTimeout
    For $i = 0 To UBound($aPics) - 1
    $bResult = _ImageSearch(@ScriptDir & "/Data/" & $aPics[$i] & ".bmp", 1, $iX, $iY, $iTol)
    If $bResult = 1 Then ExitLoop(2)
    Sleep(50)
    Next
    WEnd
    ;If $bClick AND $bResult Then MouseMove($iX, $iY, 1)
    ;MouseClick("left", $iX, $iY, 1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Return $iX
    EndFunc ;==>_ImgSearch

    [/autoit]

    Einmal editiert, zuletzt von erox (21. Mai 2011 um 22:30)

  • Ich möchte aus einer Webseite, die auf Flash basiert, eine Statistik erstellen.


    Lassen dies die Nutzungsbedingungen der Seite überhaupt zu? Poste doch bitte das komplette Skript und die URL der Seite.

    mfg autoBert

  • es handelt sich um einen Stream auf der Seite justin.tv - 100% erlaubt ;D

    komplettes Script bisher:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <justin_udf.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("g", "_Start")
    HotKeySet("e", "_End")

    [/autoit] [autoit][/autoit] [autoit]

    Func _Start()

    ;ZAHL 1
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 895 AND $n < 905 Then
    $1 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 2
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 906 AND $n < 916 Then
    $2 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 3
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 917 AND $n < 927 Then
    $3 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;ZAHL 4
    For $i = 0 To 9 Step 1
    $n = _ImgSearch("_"&$i)
    If $n > 928 AND $n < 929 Then
    $4 = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", $1 & $2 & $3 & $4)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ImgSearch($sPic, $iTimeout = 100, $bClick = 1, $iTol = 5)
    Local $iX = 0, $iY = 0, $bResult = 0, $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    $aPics = StringRegExp($sPic, '([^|]+)', 3)

    [/autoit] [autoit][/autoit] [autoit]

    While TimerDiff($iTimer) < $iTimeout
    For $i = 0 To UBound($aPics) - 1
    $bResult = _ImageSearch(@ScriptDir & "/Data/" & $aPics[$i] & ".bmp", 1, $iX, $iY, $iTol)
    If $bResult = 1 Then ExitLoop(2)
    Sleep(50)
    Next
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Return $iX
    EndFunc ;==>_ImgSearch

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(50) ; Warten auf Start durch HotKeySet!

    Wend

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    die UDF:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include-once
    ; ------------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.0
    ; Language: English
    ; Description: Functions that assist with Image Search
    ; Require that the ImageSearchDLL.dll be loadable
    ;
    ; ------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Find the position of an image on the desktop
    ; Syntax: _ImageSearchArea, _ImageSearch
    ; Parameter(s):
    ; $findImage - the image to locate on the desktop
    ; $tolerance - 0 for no tolerance (0-255). Needed when colors of
    ; image differ from desktop. e.g GIF
    ; $resultPosition - Set where the returned x,y location of the image is.
    ; 1 for centre of image, 0 for top left of image
    ; $x $y - Return the x and y location of the image
    ;
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ;
    ; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
    ; a desktop region to search
    ;
    ;===============================================================================
    Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
    return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
    ;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
    if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
    $result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

    [/autoit] [autoit][/autoit] [autoit]

    ; If error exit
    if $result[0]="0" then return 0

    ; Otherwise get the x,y location of the match and the size of the image to
    ; compute the centre of search
    $array = StringSplit($result[0],"|")

    $x=Int(Number($array[2]))
    $y=Int(Number($array[3]))
    if $resultPosition=1 then
    $x=$x + Int(Number($array[4])/2)
    $y=$y + Int(Number($array[5])/2)
    endif
    return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Wait for a specified number of seconds for an image to appear
    ;
    ; Syntax: _WaitForImageSearch, _WaitForImagesSearch
    ; Parameter(s):
    ; $waitSecs - seconds to try and find the image
    ; $findImage - the image to locate on the desktop
    ; $tolerance - 0 for no tolerance (0-255). Needed when colors of
    ; image differ from desktop. e.g GIF
    ; $resultPosition - Set where the returned x,y location of the image is.
    ; 1 for centre of image, 0 for top left of image
    ; $x $y - Return the x and y location of the image
    ;
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ;
    ;
    ;===============================================================================
    Func _WaitForImageSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
    $waitSecs = $waitSecs * 1000
    $startTime=TimerInit()
    While TimerDiff($startTime) < $waitSecs
    sleep(100)
    $result=_ImageSearch($findImage,$resultPosition,$x, $y,$tolerance)
    if $result > 0 Then
    return 1
    EndIf
    WEnd
    return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Wait for a specified number of seconds for any of a set of
    ; images to appear
    ;
    ; Syntax: _WaitForImagesSearch
    ; Parameter(s):
    ; $waitSecs - seconds to try and find the image
    ; $findImage - the ARRAY of images to locate on the desktop
    ; - ARRAY[0] is set to the number of images to loop through
    ; ARRAY[1] is the first image
    ; $tolerance - 0 for no tolerance (0-255). Needed when colors of
    ; image differ from desktop. e.g GIF
    ; $resultPosition - Set where the returned x,y location of the image is.
    ; 1 for centre of image, 0 for top left of image
    ; $x $y - Return the x and y location of the image
    ;
    ; Return Value(s): On Success - Returns the index of the successful find
    ; On Failure - Returns 0
    ;
    ;
    ;===============================================================================
    Func _WaitForImagesSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
    $waitSecs = $waitSecs * 1000
    $startTime=TimerInit()
    While TimerDiff($startTime) < $waitSecs
    for $i = 1 to $findImage[0]
    sleep(100)
    $result=_ImageSearch($findImage[$i],$resultPosition,$x, $y,$tolerance)
    if $result > 0 Then
    return $i
    EndIf
    Next
    WEnd
    return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WaitForImage($findImage)
    Local $result = 0
    While $result = 0
    Sleep(100)
    $result = _ImgSearch($findimage)
    WEnd
    EndFunc


    ;Syntax: _GetMinMaxNumber('+' für größte / '' für kleinste, Zahl1, Zahl2)
    Func _GetMinMaxNumber($sTypeIndx, $n1, $n2, $n3=Default, $n4=Default, $n5=Default, $n6=Default, $n7=Default, $n8=Default, $n9=Default, $n10=Default)
    Local $min_max = $n1, $min_max2, $val, $max = 0
    If StringLeft($sTypeIndx, 1) = '+' Then $max = 1
    If $n2 == 'sub' Then
    If UBound($n1) = $sTypeIndx +1 Then Return $n1[UBound($n1) -1]
    $min_max = $n1[$sTypeIndx]
    For $i = $sTypeIndx +1 To UBound($n1) -1
    If StringRegExp($n1[$i], '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $n1[$i] = Number($n1[$i])
    Else
    ContinueLoop
    EndIf
    If $max Then
    If $n1[$i] > $min_max Then $min_max = $n1[$i]
    Else
    If $n1[$i] < $min_max Then $min_max = $n1[$i]
    EndIf
    Next
    Return $min_max
    EndIf
    If IsArray($min_max) Then
    $min_max = _GetMinMaxNumber($sTypeIndx, $min_max, 'sub')
    Else
    If StringRegExp($min_max, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $min_max = Number($min_max)
    Else
    Return SetError(1,0,'')
    EndIf
    EndIf
    For $i = 2 To 10
    $val = Eval('n' & $i)
    If IsKeyword($val) Then ExitLoop
    If IsArray($val) Then
    $min_max2 = _GetMinMaxNumber($sTypeIndx, $val, 'sub')
    If $max Then
    If $min_max2 > $min_max Then $min_max = $min_max2
    Else
    If $min_max2 < $min_max Then $min_max = $min_max2
    EndIf
    Else
    If StringRegExp($val, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $val = Number($val)
    If $max Then
    If $val > $min_max Then $min_max = $val
    Else
    If $val < $min_max Then $min_max = $val
    EndIf
    EndIf
    EndIf
    Next
    Return $min_max
    EndFunc ;==>_GetMinMaxNumber

    [/autoit] [autoit][/autoit] [autoit][/autoit]