OCR Fragen

  • Huhu

    Ich habe wieder mal ein riesiges Anliegen. Ich möchte in ein neues Gebiet vorstossen. Dies auch auf Auftrag meiner Chefin.

    Ist es irgendwie möglich ein Texterkennungsscan mit AutoIt durchzuführen?
    Dass es lange gehen würde weiss ich. Könnte man dies nicht mit einer UDF lösen?

    Und wie kann ich individuell die Scanner auslesen?
    Mich würde es nicht wundern, wenn es nicht möglich wäre

    MfG
    lukiono

    5 Mal editiert, zuletzt von lukiono (17. August 2012 um 10:05) aus folgendem Grund: Blöder IE und seien Formatierung <.<

  • Das hab ich mir gedacht. Wie soll ich auc Taûsende von Schriftstilen auslesen und richtig zuordnen können.
    Na dann bring ich das mal meiner Chefin bei :rolleyes:

    Danke :)

  • @lukiono,
    wie wärs denn mal mit einer genauen Beschreibung deiner Aufgabe incl. Umgebungsbedingungen? Ich kann mir nicht vorstellen, daß deine Chefin in dein Buro kommt, "Ich hätte gerne OCR!" sagt, und dann wieder verschwindet....

    Auch Scanner kann man per AutoIt ansteuern, bzw die gemachten Scans bearbeiten. Möglich ist vieles. Mit AutoIt machbar ist auch vieles. Und es ist nicht gesagt, "Dass es lange gehen würde"?

  • Tachchen

    ich habe mal ein script in autoit geschrieben, dass den adobe _Acrobat_ steuert und so ocr macht (in meinem fall waren es eingescannte pdfs, die zu text-pdf's konvertiert wurden...)
    allerdings kostet der acrobat was, oder halt mal mit der testversion ausprobieren, aber in deinem fall geht es ja um handschriften oder?
    Einfach mal Probieren

    Gruß GerhardSchr

  • Ach vielleicht wird das irgendwann wieder aufgegriffen. Derzeit habe ich schon einen anderen Auftrag.

    Danke an euch. Und die Acrobat UDF schau ich mal an :)

    MfG
    lukiono

  • So, jetzt mal abgesehen von wie lange:
    OCR ist ja ein Scan welcher Buchstaben aus einer Vorlage ausliest und vergleicht und wieder einscannt und wieder vergleicht wenns nicht passt.

    Für die Vorlage wäre eine UDF am Besten geeignet oder?
    Mit .ini ist das zu unübersichtlich und zuviel Programmiercode.

    MfG

  • Hey lukiono,
    eine eigene OCR-Software wirst du nicht Programmieren können. Das ist zu komplex und mit AutoIt praktisch nicht umsetzbar.
    Aber es wurde schon Tesseract vorgeschlagen. Die Anwendung ist denkbar einfach und auf alle Texttypen trainierbar. Schaus dir mal an!

  • Hi

    Danke. Somit muss ich nur noch ein ansprechendes GUI machen und den Scanner ansteuern.
    Beim Scanner selber, wäre es am Besten wenn man das Profil (IP, Name) in einer .ini speichert oder?

  • So ich habe nun ein kleines Problem:
    Ich krieg die IP nicht ausgelesen aus dem IP Create.

    Weder mit Handle noch mit Read. Weiss da jemand was?

  • @lukiono: Für dich gilt ganau das gleiche wie für EM:
    Auch wenn die EnterTaste so attraktiv ist, ich glaube das brauchs du nicht hier im Forum umbedingt zu zeigen.

    Zitat

    Huhu


    Ich habe wieder mal ein riesiges Anliegen. Ich möchte in ein neues Gebiet vorstossen. Dies auch auf Auftrag meiner Chefin.

    Thx

    Nur keine Hektik - das Leben ist stressig genug

  • Habe noch eine kleine Frage:
    Wie kann ich in der Whileschleife überprüfen ob der Ping jetzt in Ornudn war oder nicht.
    Dabei soll er ja auch unterschiedliche MsgBox'es zeigen:

    Codeausschnitt
    [autoit]

    Case $druckhinclose
    $read1=_GUICtrlIpAddress_Get($druckerip)
    $ping1=Ping($read1,"4000")
    If @error=4 Then Msgbox(0,"Fehler","Es ist ein unbekannter Fehler aufgetreten. Bitte überprüfen Sie:"&@LF&"- Verbindung"&@LF&"- Scanner eingeschaltet?"&@LF&"- IP-Adresse richtig?"&@LF&@LF&"Besteht das Problem weiterhin, kontaktieren Sie bitte den Support")
    If @error=3 Then Msgbox(0,"Fehler","Die IP-Adresse wurde falsch eingegeben. Bitte korrigieren Sie diese")
    If @error=2 Then Msgbox(0,"Fehler","Es besteht ein Verbindungsproblem mit dem Scanner. Bitte überprüfen Sie die Verbindung und versuchen Sie es erneut")
    If @error=1 Then Msgbox(0,"Fehler","Der Scanner scheint abgeschaltet zu sein. Schalten Sie ihn ein und überprüfen Sie die Verbindung")
    If Not @error=1 then MsgBox(0,"Hinzugefügt","Der Scanner wurde erkannt und gespeichert")
    IniWrite("data/conf.ini","drucker","drucker1",$read1)
    GUICtrlSetData($druckmanstartabbruch,"Schliessen")
    GUISetState(@SW_Hide,$druckipmanuell)

    [/autoit]
    Ganzer Code
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: Lukas Krähenbühl

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

    Script Function:
    OCR-Scan

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

    #ce ----------------------------------------------------------------------------
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <GuiIPAddress.au3>
    #Region ### START Koda GUI section ### Form=c:\users\lukas\documents\ocr-tool\ocr_haupt.kxf
    $hauptfenster = GUICreate("OCR Scan Tool", 662, 548, 190, 123)
    $MenuItem1 = GUICtrlCreateMenu("&Allgemein")
    $MenuItem2 = GUICtrlCreateMenuItem("Beenden", $MenuItem1)
    $MenuItem3 = GUICtrlCreateMenu("&Einstellungen")
    $MenuItem4 = GUICtrlCreateMenuItem("Scanner", $MenuItem3)
    $MenuItem5 = GUICtrlCreateMenuItem("Speicherort", $MenuItem3)
    $MenuItem6 = GUICtrlCreateMenu("&Hilfe")
    $MenuItem7 = GUICtrlCreateMenuItem("Dokumentation", $MenuItem6)
    $MenuItem8 = GUICtrlCreateMenuItem("Info", $MenuItem6)
    GUISetBkColor(0xFFFFFF)
    $scanpic = GUICtrlCreatePic("", 16, 56, 289, 401, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $statusbar = GUICtrlCreateProgress(16, 472, 633, 33)
    $beenden = GUICtrlCreateButton("Beenden", 328, 424, 145, 33, $WS_GROUP)
    $variabel = GUICtrlCreateButton("Speichern", 328, 352, 145, 33, $WS_GROUP)
    $Button1 = GUICtrlCreateButton("Scanvorgang starten", 328, 280, 145, 33, $WS_GROUP)
    $update = GUICtrlCreateButton("Update", 496, 424, 145, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ;GUI-Ende
    ; Einstellungen
    #Region ### START Koda GUI section ### Form=c:\users\lukas\documents\ocr-tool\einstellungen.kxf
    $einstellungen = GUICreate("Einstellungen - OCR Tool", 448, 459, 192, 124)
    $druckerliste = GUICtrlCreateList("", 16, 8, 249, 253)
    $druckman = GUICtrlCreateButton("Drucker manuell hinzufügen", 24, 280, 233, 41, $WS_GROUP)
    $markdruck = GUICtrlCreateButton("Markierten Drucker löschen", 24, 336, 233, 41, $WS_GROUP)
    $fensclose = GUICtrlCreateButton("Einstellungen speichern und Fenster schliessen", 24, 392, 233, 41, $WS_GROUP)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###
    ;--------------------------------------------
    ;Drucker manuell per IP
    #Region ### START Koda GUI section ### Form=C:\Users\lukas\Documents\ocr-tool\druckipmanuell.kxf
    $druckipmanuell = GUICreate("Drucker per IP-Adresse hinzufügen", 392, 111, 192, 124)
    $druckerip = _GUICtrlIpAddress_Create($druckipmanuell, 8, 16, 361, 33)
    _GUICtrlIpAddress_Set($druckerip, "0.0.0.0")
    $druckhinclose = GUICtrlCreateButton("Hinzufügen und Fenster schliessen", 72, 64, 249, 33, $WS_GROUP)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###
    ;--------------------------------
    ;Drucker manuell per Name GUI
    #Region ### START Koda GUI section ### Form=C:\Users\lukas\Documents\ocr-tool\druckmannamform.kxf
    $druckmannamform = GUICreate("Drucker manuell hinzufügen", 500, 376, 192, 124)
    $abbbutt = GUICtrlCreateButton("Abbrechen", 80, 328, 129, 33, $WS_GROUP)
    $weitbutt = GUICtrlCreateButton("Weiter", 288, 328, 129, 33, $WS_GROUP)
    $drucknammanlab = GUICtrlCreateLabel("Fügen Sie einen Drucker manuell per Namenseingabe hinzu. Nach der Eingabe klicken Sie auf ", 8, 16, 455, 17)
    $drucknameman = GUICtrlCreateInput("", 88, 280, 321, 21)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###
    ;----------------------------
    ;Drucker manuell Start
    #Region ### START Koda GUI section ### Form=c:\users\lukas\documents\ocr-tool\druckmanstart.kxf
    $druckmanstart = GUICreate("Drucker manuell hinzufügen - OCR Tool", 477, 185, 192, 124)
    $labmandruck = GUICtrlCreateLabel("Wählen Sie eine Methode aus um Ihren gewünschten Drucker manuell hinzuzufügen.", 32, 16, 407, 17)
    $druckbutteinip = GUICtrlCreateButton("Drucker per Eingabe der IP-Adresse hinzufügen", 104, 48, 257, 33, $WS_GROUP)
    $druckbutteinnam = GUICtrlCreateButton("Drucker per Eingabe des Namens hinzufügen", 104, 96, 257, 33, $WS_GROUP)
    $druckmanstartabbruch = GUICtrlCreateButton("Abbrechen", 104, 144, 257, 33, $WS_GROUP)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###
    ;---------------
    ;Variabeln müssen gesetzt sein

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

    ;Variablen lokal freigeben
    Global $beenden
    Global $Button1
    Global $hauptfenster
    Global $MenuItem1
    Global $MenuItem2
    Global $MenuItem3
    Global $MenuItem4
    Global $MenuItem5
    Global $MenuItem6
    Global $MenuItem7
    Global $MenuItem8
    Global $msg1
    Global $nMsg
    Global $scanpic
    Global $statusbar
    Global $variabel
    Global $ping1
    ;Freigabe-Ende
    ;-------------

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

    ;Überprüfung ob conf.ini besteht
    If Not FileExists("/data/conf.ini") = 0 Then MsgBox(16+0,"Kritischer Fehler","Die Konfigurationsdatei wurde nicht gefunden. Eine Neuinstallation könnte das Problem beheben")

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

    Scan_First()
    Func Scan_First()
    EndFunc

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

    ;Whileschleife
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg

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

    Case $beenden
    $msg1=MsgBox(32+4,"Beenden","Wollen Sie wirklich beenden?")
    If $msg1 = 6 Then Exit

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

    Case $MenuItem2
    $msg1=MsgBox(32+4,"Beenden","Wollen Sie wirklich beenden?")

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

    Case $MenuItem4
    GUISetState(@SW_SHOW,$einstellungen)

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

    Case $fensclose
    GUISetState(@SW_HIDE,$einstellungen)

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

    Case $druckman
    GUISetState(@SW_SHOW,$druckmanstart)

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

    Case $druckbutteinip
    GUISetState(@SW_SHOW,$druckipmanuell)

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

    Case $druckhinclose
    $read1=_GUICtrlIpAddress_Get($druckerip)
    $ping1=Ping($read1,"4000")
    If @error=4 Then Msgbox(0,"Fehler","Es ist ein unbekannter Fehler aufgetreten. Bitte überprüfen Sie:"&@LF&"- Verbindung"&@LF&"- Scanner eingeschaltet?"&@LF&"- IP-Adresse richtig?"&@LF&@LF&"Besteht das Problem weiterhin, kontaktieren Sie bitte den Support")
    If @error=3 Then Msgbox(0,"Fehler","Die IP-Adresse wurde falsch eingegeben. Bitte korrigieren Sie diese")
    If @error=2 Then Msgbox(0,"Fehler","Es besteht ein Verbindungsproblem mit dem Scanner. Bitte überprüfen Sie die Verbindung und versuchen Sie es erneut")
    If @error=1 Then Msgbox(0,"Fehler","Der Scanner scheint abgeschaltet zu sein. Schalten Sie ihn ein und überprüfen Sie die Verbindung")
    If Not @error=1 then MsgBox(0,"Hinzugefügt","Der Scanner wurde erkannt und gespeichert")
    IniWrite("data/conf.ini","drucker","drucker1",$read1)
    GUICtrlSetData($druckmanstartabbruch,"Schliessen")
    GUISetState(@SW_Hide,$druckipmanuell)

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

    Case $druckmanstartabbruch
    GUISetState(@SW_HIDE,$druckmanstart)

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

    EndSwitch
    WEnd

    [/autoit]


    Ich habe mir das mit If Else überlegt, irgendwie geht das nicht.

    MfG

    • Offizieller Beitrag

    Versuch es mal so:

    Spoiler anzeigen
    [autoit]

    Case $druckhinclose
    $read1 =_GUICtrlIpAddress_Get($druckerip)
    $ping1 = Ping($read1, "4000")
    $err = @error
    Local $aErr[4] = ["Der Scanner scheint abgeschaltet zu sein. Schalten Sie ihn ein und überprüfen Sie die Verbindung", _
    "Es besteht ein Verbindungsproblem mit dem Scanner. Bitte überprüfen Sie die Verbindung und versuchen Sie es erneut", _
    "Die IP-Adresse wurde falsch eingegeben. Bitte korrigieren Sie diese", _
    "Es ist ein unbekannter Fehler aufgetreten. Bitte überprüfen Sie:" & @LF & "- Verbindung" & @LF & "- Scanner eingeschaltet?" & @LF & "- IP-Adresse richtig?" & @LF & @LF & "Besteht das Problem weiterhin, kontaktieren Sie bitte den Support"]
    If Not $ping1 Then ; $ping1 = 0 also Fehler
    Msgbox(0, "Fehler", $aErr[$err -1])
    Else
    MsgBox(0, "Hinzugefügt", "Der Scanner wurde erkannt und gespeichert")
    EndIf
    IniWrite("data/conf.ini", "drucker", "drucker1", $read1)
    GUICtrlSetData($druckmanstartabbruch, "Schliessen")
    GUISetState(@SW_Hide, $druckipmanuell)

    [/autoit]