web-dev-qa-db-fra.com

Comment utiliser la bibliothèque Microsoft OCR (Microsoft.Windows.Ocr) dans un projet API Web ASP.Net MVC4?

TL; DR:

Est-ce que quelqu'un connaît un moyen de faire référence à Microsoft.Windows.Ocr (/ WindowsPreview.Media.Ocr.dll) Assembly sur une application Web ASP.Net côté serveur telle que l'API Web MV4 et à utiliser la fonctionnalité OCR de cet assembly pour prendre une photo en entrée et extraire le contenu textuel hors de celui-ci?Si oui, veuillez fournir des instructions détaillées dans votre réponse.

Question Details (et ce que j'ai essayé jusqu'à présent)

Je construis une application Web qui prend une image téléchargée sur le serveur (via un écran de l'interface de téléchargement de fichier), puis lit le texte à l'aide de OCR et affiche le texte à la page suivante, juste à côté de l'image que a été téléchargé.

Étant donné que la plupart des bibliothèques OCR commerciales coûtent un bras et une longueur ( plus de 1 300 USD la dernière fois que j'ai vérifié ), je pensais pouvoir utiliser la bibliothèque Microsoft OCRMicrosoft.Windows.Ocr qui est LIBRE et semble être très simple et simple à utiliser.

J'ai donc essayé d'installer le package Nuget Microsoft.Windows.Ocr sur mon projet d'API Web ASP.Net MVC4 et cela a abouti.

install the Microsoft.Windows.Ocr Nuget Package

Après cela, j'ai parcouru les références de projet de l'API Web MVC4 et, à ma grande surprise, je n'ai trouvé aucune référence à Microsoft.Windows.Ocr.dll Assembly.

reference to Microsoft.Windows.Ocr.dll missing

J'ai alors essayé d'ajouter une référence à la version x86 de l'assembly Microsoft.Windows.Ocr.dll en le parcourant dans le dossier \packages, puis en sélectionnant le dossier WindowsPreview.Media.Ocr.dll à partir de \lib\win81\x86 

Remarque: Le nom de l'assembly est WindowsPreview.Media.Ocr.dll et non Microsoft.Windows.Ocr.dll. Vous ne savez pas pourquoi!

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

Quand j’ai fait cela et cliqué sur OK, j’ai reçu le Message d’erreur suivant.

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

J'ai ensuite appris par la page Nuget que les "plates-formes prises en charge" ne sont que Windows Phone 8, Windows Phone 8.1, Windows 8.1 (applications du Windows Store uniquement).

Microsoft ocr library nuget error

Mais sûrement, il doit y avoir un moyen d'utiliser cette OCR dll côté serveur dans une application ASP.Net?

Est-ce que quelqu'un connaît un moyen de référencer Microsoft.Windows.Ocr (/ WindowsPreview.Media.Ocr.dll) Assembly sur une application Web ASP.Net côté serveur telle que l'API Web MV4 et d'utiliser la fonctionnalité OCR de cet assembly pour prendre une photo en entrée et extraire le contenu du texte ** Si oui, veuillez fournir des instructions détaillées dans votre réponse.

Tous les "hacks" et/ou exemples de code seraient très appréciés !! 

Je vous remercie!!

21
Shiva

Vous pouvez passer à la mise à jour 2 ci-dessous pour trouver une solution efficace.

IL JETERA UNE EXCEPTION DE CHARGE DE TYPE. Cela étant dit, je poste parce que j'essaie de faire la même chose mais je ne parviens pas à faire fonctionner le projet. Voici quelques instructions de base sur la manière d’intégrer l’API WinRT dans votre projet d’application autre que Windows.

http://weblogs.thinktecture.com/cnagel/2012/10/calling-winrt-from-windows-desktop-apps.html

Aussi, n'essayez pas de référencer la dll, mais plutôt le fichier winmd.

Voici un exemple d'application console faisant référence à la bibliothèque ocr mais, lorsque vous exécutez la solution, une exception de chargement de type est renvoyée. ( Https://github.com/Xandroid4Net/MicrsoftOcrConsoleApp ). à et asp.net application. Je ne sais pas comment résoudre le type exception de chargement, vous pouvez peut-être aller plus loin que moi. Merci de poster si vous trouvez une solution.

MISE À JOUR 1 (01/12/2014)

Davantage de fouilles ont révélé l’erreur de liaison de l’Assemblée suivante. Une idée sur la manière de définir un ID de package pour un processus?

Fichier: WindowsPreview.Media.Ocr! WindowsPreview.Media.Ocr.OcrEngine, version = 255.255.255.255, Culture = neutre, PublicKeyToken = null, ContentType = WindowsRuntime.htm

Contenu du fichier:

* Entrée du journal du classeur d'assemblage (01/12/2014 @ 11:48:01) *

L'opération a échoué . Résultat de la liaison: hr = 0x80073d54. Le processus n'a pas d'identité de package.

Le gestionnaire d’assemblage est chargé à partir de: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll S’exécutant sous le fichier exécutable C:\Utilisateurs\Wesley\Documents\Dev\ConsoleApplication2\Program.exe -- - Un journal d'erreur détaillé suit. 

BEGIN: Type d’exécution Windows lié . FIN: le processus n’a pas d’identité de package. (Exception de HRESULT: 0x80073D54)

Mise à jour 2 (12/03/2014)

C'est une mauvaise solution de contournement, mais cela a fonctionné sur ma tablette Windows 8.1 Surface Pro 3. WebOcr est un formulaire Web, mais il peut facilement être modifié pour MVC.

1) Téléchargez https://github.com/Xandroid4Net/CommandLineOcr . Ceci est l'application Psuedo Store.

2) Construisez et exécutez l'application. Il semblera ne rien faire. Ce n'est pas grave, le registre sera mis à jour avec une nouvelle clé dont nous aurons besoin.

3) Téléchargez https://github.com/Xandroid4Net/WebOcr .

4) Recherchez OcrCommandLineCaller.cs dans le projet Webocr.

5) Recherchez la clé de registre dans HKEY_CURRENT_USER\Software\Classes\ActivatableClasses\Package\Some_Sort_Of_Guid_For_Your_APP\Server\App.App ....\AppUserModelId.

Reportez-vous à cette question SO si vous avez besoin d'aide pour trouver la clé de registre. IApplicationActivationManager :: ActivateApplication en C #?

6) Mettez à jour l'appel appActiveManager.ActivateApplication dans OcrCommandLineCaller.cs avec l'identificateur d'application étrange guid trouvé dans la clé de registre.

7) Dans default.aspx.cs, remplacez saveAsPath par le chemin sur votre ordinateur. Dans l'application Windows Store, un chemin statique est représenté par Windows.Storage.ApplicationData.Current.LocalFolder. C'est le chemin où j'ai sauvegardé mes images pour plus de simplicité.

8) Modifiez le code à votre guise et dites-moi si vous avez des questions.

C'est une solution très rude et désagréable, mais cela fonctionne.

4
user3027550

Si vous utilisez Visual Studio 2015 et Windows 10, le 

Microsoft.Windows.Ocr

a été déplacé vers la plate-forme Windows universelle. Il est disponible en tant que 

Windows.Media.Ocr

Vous devez donc mettre à niveau votre VS 2015 avec les outils pour Windows 10 activés. 

J'ai fait ce qui suit et Windows.Media.Ocr a été ajouté comme référence dans mon API Web. 

  1. Dans les références de votre projet d'API Web, cliquez avec le bouton droit de la souris sur l'une des références, puis cliquez sur Afficher dans le navigateur d'objets. Votre navigateur d’objets ressemblera à quelque chose comme ceci  enter image description here
  2. Il y a un bouton "..." juste à côté de la boîte "Parcourir: Tous les composants". L'info-bulle se lit "Modifier le jeu de composants personnalisés". Cliquez! 
  3. Dans la zone "Modifier l'ensemble de composants personnalisés", cliquez sur l'onglet Parcourir et accédez à "C:/Programmes (x86)/Kits Windows/10/Références/Windows.Foundation.UniversalApiContract/1.0.0.0" Et cliquez sur l'icône winmd. fichier qui en résulte et cliquez sur Ajouter. 
  4. Hit Ok!
  5. Cliquez maintenant sur l'icône indiquant "Ajouter aux références dans le projet sélectionné dans l'Explorateur de solutions" (il s'agit du troisième bouton du bouton "..." à côté de "Parcourir:"). Vous pouvez voir que Windows.Media.Ocr est disponible. 

Remarque: Ce qui suit ne fonctionne qu'avec VS 2015 et Windows 10. Cela aussi doit être mis à jour pour VS 2015 pour Plateforme Windows universelle (UWP). Vérifiez this pour un exemple d’OCR. 

J'espère que cela t'aides. Update Il a été importé dans ma référence mais ne parvient pas à se charger. J'espère que cela fournit un début pour les gens . Merci !. 

4
Anish V

J'utilise la solution MODI fournie avec MS Office depuis quelques années et j'en suis plutôt satisfaite (c'était gratuit si vous achetiez Office). J'ai été plutôt déçu quand il a été arrêté. J'ai essayé Tesseract ... Je voulais vraiment l'aimer, mais je l'ai trouvé lent et inexact pour un type de machine hollandaise de bonne qualité ... et comme vous, je ne pouvais justifier de dépenser quoi que ce soit au nord pour 200 $ pour l'essentiel un projet de loisir. 

Après une recherche désespérée, quelqu'un ici m'a fait signe à TOCR (un produit Transym). Une épiphanie a suivi peu après. ; -) Je pense avoir besoin de dire à ce stade que je ne suis en aucun cas affilié à Transym, et oui, j’ai payé le prix fort… de 60 livres! (pas de faute de frappe ... soixante dollars), qui s’élevait à 113 euros, TVA comprise. 

Il est essentiellement destiné aux intégrateurs (il comprend une application de numérisation/visualisation/OCR, mais il ne s'agit que d'une démonstration - si vous achetez la licence, vous obtenez son code source). L'API est obsolète (comme le disent les moteurs d'OCR, c'est une base de code bien développée), mais elle est rapide, stable et d'une précision inattendue. Pas aussi précis que le moteur DokuStar ou d’autres moteurs ésotériques, mais pour mon application (type de machine hollandaise et anglaise), il tient sa propre contre différents moteurs qui sont bien au nord de 1000 $. La précision de reconnaissance sur le type de machine hollandaise est excellente (elle ne permet pas l'écriture manuscrite). À mon avis, en termes d’optimisation des ressources, c’est ridiculement bon. Concernant l’API: j’ai écrit un wrapper .NET rudimentaire autour de celle-ci pour répondre à mes besoins - cela a été fait en quelques soirées. 

Une version eval est disponible sur leur site Web ( http://www.transym.com/index.htm ). Et non, je n'ai pas d'argent si vous en avez ;-)

3
Peter Huppertz

IMHO, cela ne vaut probablement pas la peine d'essayer d'utiliser une bibliothèque qui n'est pas prise en charge sur la plate-forme que vous ciblez.

Vous pouvez vérifier cette réponse pour certaines alternatives gratuites.

1
NightOwl888

J'ai réussi à faire fonctionner l'API UWP OCR sur une application de bureau avec uwpdesktop NuGet.

Paquet d'installation uwpdesktop

Vous pouvez ensuite appeler des API UWP.

0
user2863528