webentwicklung-frage-antwort-db.com.de

Wie Verwenden von Microsoft OCR Library (Microsoft.Windows.Ocr) in einem ASP.Net MVC4-Web-API-Projekt?

TL; DR:

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.

Fragendetails (und was ich bisher ausprobiert habe)

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.

install the Microsoft.Windows.Ocr Nuget Package

Danach habe ich meine MVC4-Web-API-Projektverweise durchgesehen und fand zu meiner Überraschung keinen Verweis auf Microsoft.Windows.Ocr.dll Assembly.

reference to Microsoft.Windows.Ocr.dll missing

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!

browse to and select Microsoft.Windows.Ocr.dll OCR Assembly

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   
---------------------------

Microsoft OCR Library Error adding to Project

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).

Microsoft ocr library nuget error

Aber es muss doch eine Möglichkeit geben, diese OCR-DLL auf der Serverseite in einer ASP.Net-Anwendung zu verwenden.

Kennt jemand eine Möglichkeit, auf 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!!

21
Shiva

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.

UPDATE 1 (01.12.2014)

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)

Update 2 (03.12.2014)

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.

4
user3027550

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. 

  1. Klicken Sie mit der rechten Maustaste in den Referenzen Ihres Web-API-Projekts auf eine der Referenzen, und klicken Sie auf In Objektbrowser anzeigen. Ihr Objektbrowser sieht ungefähr so ​​aus  enter image description here
  2. Neben dem Feld "Durchsuchen: Alle Komponenten" befindet sich eine Schaltfläche "...". Der Tooltip lautet "Benutzerdefinierten Komponentensatz bearbeiten" .Klicken! 
  3. Klicken Sie im Feld "Benutzerdefinierten Komponentensatz bearbeiten" auf die Registerkarte "Durchsuchen" und navigieren Sie zu "C:/Programme (x86)/Windows Kits/10/Referenzen/Windows.Foundation.UniversalApiContract/1.0.0.0" Klicken Sie auf "winmd" Datei und klicken Sie auf Hinzufügen. 
  4. Hit Ok!
  5. Klicken Sie nun auf das Symbol "Zu Verweisen in ausgewähltem Projekt im Projektmappen-Explorer hinzufügen" (es ist die dritte Schaltfläche der Schaltfläche "..." neben "Durchsuchen:"). Sie können sehen, dass Windows.Media.Ocr verfügbar ist. 

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. 

4
Anish V

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 ;-)

3
Peter Huppertz

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.

1
NightOwl888

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.

0
user2863528