Kennt jemand eine Möglichkeit, auf Microsoft.Windows.Ocr
(/ WindowsPreview.Media.Ocr.dll
) Assembly auf einer serverseitigen ASP.Net-Webanwendung wie der MV4-Web-API zu verweisen und die OCR-Funktionalität in dieser Assembly zu verwenden, um ein Foto als Eingabe zu übernehmen und das zu extrahieren Textinhalt daraus?Falls ja, geben Sie bitte detaillierte Anweisungen in Ihrer Antwort an.
Ich baue eine Webanwendung, die ein auf den Server hochgeladenes Bild (über einen Bildschirm für das Hochladen von Dateien) übernimmt, den Text dann mit OCR liest und den Text auf der nächsten Seite direkt neben dem Bild anzeigt wurde hochgeladen.
Da die meisten kommerziellen OCR-Bibliotheken einen Arm und eine Länge kosten ( über $ 1.300, als ich das letzte Mal überprüft habe ), dachte ich, ich könnte versuchen, die Microsoft-OCR-BibliothekMicrosoft.Windows.Ocr
zu verwenden, die FREI ist und scheint sein sehr einfach und einfach zu bedienen.
Also habe ich versucht, das Microsoft.Windows.Ocr Nuget-Paket in meinem ASP.Net MVC4-Web-API-Projekt zu installieren, und das war erfolgreich.
Danach habe ich meine MVC4-Web-API-Projektverweise durchgesehen und fand zu meiner Überraschung keinen Verweis auf Microsoft.Windows.Ocr.dll Assembly.
Also habe ich versucht, einen Verweis auf die x86-Version der Microsoft.Windows.Ocr.dll-Assembly hinzuzufügen, indem ich zu dieser Assembly im Ordner \packages
navigiere, und den Ordner WindowsPreview.Media.Ocr.dll aus dem Ordner \lib\win81\x86
auswählen
Hinweis: Der Assemblyname lautet WindowsPreview.Media.Ocr.dll und nicht Microsoft.Windows.Ocr.dll. Nicht sicher, warum!
Als ich das tat und auf OK klickte, erhielt ich die folgende Fehlermeldung.
---------------------------
Microsoft Visual Studio
---------------------------
A reference to
'D:\TestProjects\packages\Microsoft.Windows.Ocr.1.0.0\lib\win81\x86\
WindowsPreview.Media.Ocr.dll' could not be added. Please make sure
that the file is accessible, and that it is a valid Assembly
or COM component.
---------------------------
OK
---------------------------
Ich habe dann von der Nuget-Seite erfahren, dass die "Unterstützten Plattformen" nur Windows Phone 8, Windows Phone 8.1, Windows 8.1 sind (nur Windows Store-Apps).
Aber es muss doch eine Möglichkeit geben, diese OCR-DLL auf der Serverseite in einer ASP.Net-Anwendung zu verwenden.
Microsoft.Windows.Ocr
(/ WindowsPreview.Media.Ocr.dll
) Assembly auf einer serverseitigen ASP.Net-Webanwendung wie MV4 Web API zu verweisen, und die OCR-Funktionalität in dieser Assembly verwenden, um ein Foto als Eingabe zu übernehmen und den Textinhalt zu extrahieren raus? ** Wenn ja, geben Sie bitte detaillierte Anweisungen in Ihrer Antwort an.Jeder "Hacks" und/oder Sample-Code wäre sehr dankbar !!
Vielen Dank!!
Sie können für eine funktionierende Lösung unten zu Update 2 wechseln.
ES WIRD EINE AUSLASTUNG DES TYPS LADEN. Das heißt, ich poste, weil ich versuche, dasselbe zu tun, das Projekt aber nicht laufen kann. Hier finden Sie einige grundlegende Anweisungen, wie Sie das Winrt-API in Ihr Nicht-Windows-App-Projekt integrieren können.
http://weblogs.thinktecture.com/cnagel/2012/10/calling-winrt-from-windows-desktop-apps.html
Versuchen Sie auch nicht, auf die DLL zu verweisen, sondern auf die winmd-Datei.
Hier ist eine Beispielkonsolenanwendung, die auf die OCR-Bibliothek verweist, aber wenn Sie die Lösung ausführen, wird die Ausnahme zum Laden des Typs ausgelöst. ( Https://github.com/Xandroid4Net/MicrsoftOcrConsoleApp ) Sie sollte leicht von einer Konsole App und Asp.net-Anwendung. Ich weiß nicht, wie ich die Typausnahme beheben kann. Vielleicht können Sie weiter als ich. Bitte posten Sie, wenn Sie eine Lösung finden.
Weitere Grabungen ergaben den folgenden Bindungsfehler der Assembly. Haben Sie eine Idee, wie Sie eine Paket-ID für einen Prozess festlegen?
Datei: WindowsPreview.Media.Ocr! WindowsPreview.Media.Ocr.OcrEngine, Version = 255.255.255.255, Kultur = neutral, PublicKeyToken = null, ContentType = WindowsRuntime.htm
Dateiinhalt:
* Assembly Binder Protokolleintrag (01.12.2014 @ 11:48:01 PM) *
Die Operation ist fehlgeschlagen . Bindungsergebnis: hr = 0x80073d54. Der Prozess hat keine Paketidentität.
Assembly Manager geladen von: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll .__ Unter lauffähiger Datei C:\Users\Wesley\Documents\Dev\ConsoleApplication2\Program.exe -- - Ein detailliertes Fehlerprotokoll folgt.
BEGIN: Windows-Laufzeittyp bind . END: Der Prozess hat keine Paketidentität. (Ausnahme von HRESULT: 0x80073D54)
Dies ist eine unangenehme Problemumgehung, aber es funktionierte auf meinem Windows 8.1 Surface Pro 3-Tablet. Das WebOcr ist ein Webformular, kann jedoch leicht für MVC umgestaltet werden
1) Laden Sie https://github.com/Xandroid4Net/CommandLineOcr herunter. Dies ist die Psuedo-Store-App.
2) Erstellen und starten Sie die App. Es scheint, nichts zu tun. Das ist okay, es wird die Registrierung mit einem neuen Schlüssel aktualisiert, den wir benötigen.
3) Laden Sie https://github.com/Xandroid4Net/WebOcr herunter.
4) Suchen Sie nach OcrCommandLineCaller.cs im Webocr-Projekt.
5) Suchen Sie den Registrierungsschlüssel unter HKEY_CURRENT_USER\Software\Classes\ActivatableClasses\Package\Some_Sort_Of_Guid_For_Your_APP\Server\App.App ....\AppUserModelId
Lesen Sie diese Frage SO, wenn Sie weitere Hilfe zum Suchen des Registrierungsschlüssels benötigen. IApplicationActivationManager :: ActivateApplication in C #?
6) Aktualisieren Sie den appActiveManager.ActivateApplication-Aufruf in OcrCommandLineCaller.cs mit der im Registrierungsschlüssel gefundenen merkwürdigen GUID-App-ID.
7) In default.aspx.cs ersetzen Sie saveAsPath durch den Pfad auf Ihrem Rechner. In der Windows Store-App gibt es einen statischen Pfad, der durch Windows.Storage.ApplicationData.Current.LocalFolder dargestellt wird. Dies ist der Pfad, auf dem ich meine Bilder zur Vereinfachung gespeichert habe.
8) Ändern Sie den Code nach Herzenslust und lassen Sie mich wissen, wenn Sie Fragen haben.
Dies ist eine sehr grobe und unangenehme Lösung, die jedoch funktioniert.
Wenn Sie Visual Studio 2015 und Windows 10 verwenden, wird die
Microsoft.Windows.Ocr
wurde auf die Universal Windows Platform verschoben. Es ist als verfügbar
Windows.Media.Ocr
Sie müssen also Ihr VS 2015 mit aktivierten Tools für Windows 10 aktualisieren.
Ich habe folgendes gemacht und Windows.Media.Ocr wurde als Referenz in meine Web-API eingefügt.
Hinweis: Folgendes funktioniert nur mit VS 2015 und Windows 10. Auch VS 2015 sollte für Universal Windows Platform (UWP) aktualisiert werden. Überprüfen Sie this für eine Muster-OCR.
Hoffe das hilft. Update Es wurde in meine Referenz importiert, kann jedoch nicht geladen werden. Ich hoffe, es bietet einen Anfang für die Menschen ... Danke.
Ich benutze die mit MS Office gelieferte MODI-Lösung seit einigen Jahren und war ziemlich zufrieden damit (es war kostenlos, wenn Sie Office kauften). Ich war ziemlich enttäuscht, als es eingestellt wurde. Ich habe Tesseract ausprobiert ... Ich wollte es wirklich gern haben, fand es aber für niederländische Maschinentypen von guter Qualität als langsam und ungenau ... und wie Sie konnte ich es nicht rechtfertigen, irgendetwas nördlich von 200 Dollar für das, was im Wesentlichen war, auszugeben ein Hobbyprojekt.
Nach einer verzweifelten Suche wies mich jemand auf TOCR (ein Transym-Produkt) hin. Eine Epiphanie folgte kurz darauf. Ich glaube, ich muss an dieser Stelle sagen, dass ich in keiner Weise mit Transym verbunden bin, und ja, ich habe den vollen Preis bezahlt ... von 60 Pfund! (kein Tippfehler ... sechzig Pfund), die sich einschließlich Mehrwertsteuer auf 113 Euro ausrechnet.
Es ist im Wesentlichen für Integratoren gedacht (es beinhaltet eine Scan-/Viewer-/OCR-App, die jedoch nur als Demo gedacht ist - wenn Sie die Lizenz kaufen, erhalten Sie den Quellcode). Die API ist veraltet (es ist, wie OCR-Engines, eine ausgereifte Codebasis), aber sie ist schnell, stabil und unerwartet genau. Nicht so genau wie der DokuStar-Motor oder andere esoterische Motoren, aber für meine Anwendung (niederländischer und englischer Maschinentyp) hält er sich gegen verschiedene Motoren aus, die weit nördlich von 1000 US-Dollar liegen. Die Erkennungsgenauigkeit auf einem holländischen Maschinentyp ist ausgezeichnet (es wird keine Handschrift ausgeführt). Meiner Meinung nach ist das Preis-Leistungs-Verhältnis einfach lächerlich gut. .__ Zur API: Ich habe einen rudimentären .NET-Wrapper für meine Anforderungen geschrieben - dies wurde an einigen Abenden erledigt.
Auf ihrer Website ist eine Eval-Version verfügbar ( http://www.transym.com/index.htm ). Und nein, ich bekomme kein Geld dafür ;-)
IMHO ist es wahrscheinlich nicht wert, eine Bibliothek zu verwenden, die auf der Plattform, auf die Sie zugreifen, nicht unterstützt wird.
Sie können diese Antwort für einige freie Alternativen prüfen.
Es ist mir gelungen, die UWP-OCR-API mithilfe von uwpdesktop NuGet für die Desktop-App zu nutzen.
Installationspaket uwpdesktop
Sie können dann UWP-APIs aufrufen.