c# - ¿Cómo usar la biblioteca de Microsoft OCR(Microsoft.Windows.Ocr) en un proyecto de API web de ASP.Net MVC4?
asp.net-mvc microsoft-ocr (6)
En mi humilde opinión, probablemente no valga la pena intentar utilizar una biblioteca que no es compatible con la plataforma a la que se dirige.
Usted podría revisar esta respuesta para algunas alternativas gratuitas.
TL; DR:
¿Alguien sabe de una manera de hacer referencia al WindowsPreview.Media.Ocr.dll
Microsoft.Windows.Ocr
(/ WindowsPreview.Media.Ocr.dll
) en una aplicación web ASP.Net del lado del servidor como la API web MV4 y hacer uso de la funcionalidad OCR en ese ensamblaje? ¿Una imagen fotográfica como entrada y extraer el contenido del texto? En caso afirmativo, proporcione instrucciones detalladas en su respuesta.
Detalles de la pregunta (y lo que he intentado hasta ahora)
Estoy creando una aplicación web que toma una imagen cargada en el Servidor (a través de una pantalla de interfaz de usuario de carga de archivos) y luego lee el texto con OCR y muestra el texto en la página siguiente, justo al lado de la imagen que se cargó.
Dado que la mayoría de las bibliotecas comerciales de OCR cuestan un brazo y una longitud ( más de $ 1,300 la última vez que verifiqué ) pensé que podía probar y usar la biblioteca de Microsoft.Windows.Ocr
OCR Microsoft.Windows.Ocr
que es GRATUITA y parece ser muy simple y fácil de usar.
Así que intenté instalar el paquete Microsoft.Windows.Ocr Nuget en mi proyecto de API web de ASP.Net MVC4 y eso fue un éxito.
Después de eso, miré a través de mis Referencias del Proyecto de la API Web MVC4, y para mi sorpresa, no encontré una referencia a la Asamblea de Microsoft.Windows.Ocr.dll .
Entonces intenté agregar una referencia a la versión x86 del ensamblado Microsoft.Windows.Ocr.dll al buscar ese ensamblaje en la carpeta /packages
, y seleccioné WindowsPreview.Media.Ocr.dll de /lib/win81/x86
carpeta
Nota: El nombre del ensamblado es WindowsPreview.Media.Ocr.dll y no Microsoft.Windows.Ocr.dll, ¡no estoy seguro de por qué!
Cuando hice eso y hice clic en Aceptar , recibí el siguiente mensaje de error .
---------------------------
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
---------------------------
Luego, en la página de Nuget, descubrí que las "Plataformas compatibles" son solo Windows Phone 8, Windows Phone 8.1, Windows 8.1 (solo aplicaciones de la Tienda Windows).
Pero seguramente, ¿debe haber una manera de usar esta dll OCR en el lado del servidor en una aplicación ASP.Net?
¿Alguien sabe de una manera de hacer referencia al WindowsPreview.Media.Ocr.dll
Microsoft.Windows.Ocr
(/ WindowsPreview.Media.Ocr.dll
) en una aplicación web ASP.Net del lado del servidor como la API web MV4 y hacer uso de la funcionalidad OCR en ese ensamblaje? ¿Una imagen fotográfica como entrada y extrae el contenido del texto? ** En caso afirmativo, proporcione instrucciones detalladas en su respuesta.
¡Cualquier "hacks" y / o código de muestra sería muy apreciado!
¡¡Gracias!!
He estado usando la solución MODI empaquetada con MS Office durante algunos años y estaba bastante contenta con ella (era gratis si compraste Office). Me decepcionó bastante cuando se suspendió. Probé Tesseract ... Quería que me gustara, pero me pareció lento e inexacto para el tipo de máquina holandesa de buena calidad ... y como usted, no podía justificar el gasto de $ 200 para lo que era esencialmente un proyecto de hobby .
Después de una búsqueda desesperada, alguien aquí me señaló a TOCR (un producto de Transym). Una epifanía siguió poco después. ;-) Creo que debo decir en este momento que no estoy afiliado a Transym de ninguna manera, y sí, pagué el precio total ... ¡ de 60 libras! (no typo ... sesenta libras), que, incluido el IVA, ascendió a 113 euros.
Básicamente, está destinado a integradores (incluye una aplicación de escaneo / visor / OCR, pero solo se trata de una demostración. Si compra la licencia, obtendrá su código fuente). La API está desactualizada (es, como los motores de OCR funcionan, es una base de código bastante madura), pero es rápida, estable e inesperadamente precisa. No es tan preciso como el motor DokuStar u otros motores esotéricos, pero para mi aplicación (tipo de máquina holandesa e inglesa) es válido para varios motores que están muy por debajo de los $ 1000. La precisión de reconocimiento en el tipo de máquina holandesa es excelente (no hace escritura a mano). En mi opinión, en términos de valor por dinero, es simplemente ridículamente bueno. En cuanto a la API: escribí un envoltorio rudimentario de .NET para adaptarlo a mis necesidades; esto se hizo algunas noches.
Hay una versión de evaluación disponible en su sitio web ( http://www.transym.com/index.htm ). Y no, no recibo dinero si lo haces ;-)
Logré que la API OCR de UWP funcionara en la aplicación de escritorio usando uwpdesktop NuGet.
Instalar paquete uwpdesktop
A continuación, puede hacer llamadas a las API de UWP.
No soy abogado, pero tengo entendido que el acuerdo de licencia de usuario final de Microsoft para esa biblioteca no permite utilizar la biblioteca de Microsoft OCR para el tiempo de ejecución de Windows en su escenario.
Específicamente, lea el segundo párrafo, donde prohíbe usar el software en un servidor en un entorno de producción:
"2. DERECHOS DE INSTALACIÓN Y USO.
a. General. Un usuario puede instalar y utilizar copias del software para diseñar, desarrollar, probar y demostrar sus programas. No puede utilizar el software en un servidor en un entorno de producción ".
Al mismo tiempo, también restringen la ejecución del código distribuible exclusivamente a Windows Store o Windows Phone:
"3. REQUISITOS ADICIONALES DE LICENCIA Y / O DERECHOS DE USO.
a. Código distribuible. El software contiene el código que se le permite distribuir en los programas que desarrolla si cumple con los términos a continuación.
yo. ..
ii. ..
iii. Restricciones de distribución. Tú quizás no
..
· Distribuya el Código Distribuible para que se ejecute en una plataforma que no sea la Tienda Windows o el Teléfono Windows ;
El EULA completo se puede leer en: https://www.microsoft.com/web/webpi/eula/windows_runtime_ocr_library_terms_of_use.htm
Si está utilizando Visual Studio 2015 y Windows 10, el
Microsoft.Windows.Ocr
Se ha movido a la plataforma universal de Windows. Está disponible como
Windows.Media.Ocr
Por lo tanto, debe actualizar su VS 2015 con herramientas para Windows 10 habilitadas.
Hice lo siguiente y Windows.Media.Ocr se agregó como referencia en mi API web.
- En las referencias de su proyecto Web API, haga clic con el botón derecho en cualquiera de las referencias y haga clic en Ver en el Examinador de objetos. Tu navegador de Objetos se verá así
- Hay un botón ''...'' justo al lado de la casilla "Examinar: Todos los componentes". La información sobre herramientas lee "Editar conjunto de componentes personalizados". ¡Haz clic!
- En el cuadro "Editar conjunto de componentes personalizados", haga clic en la pestaña Examinar y navegue a "C: / Archivos de programa (x86) / Windows Kits / 10 / References / Windows.Foundation.UniversalApiContract / 1.0.0.0" y haga clic en el archivo winmd que aparece y haga clic en Agregar.
- Hit Ok!
- Ahora haga clic en el icono que dice "Agregar a las referencias en el Proyecto seleccionado en el Explorador de soluciones" (Es el tercer botón del botón ''...'' al lado de "Examinar:"). Puedes ver que Windows.Media.Ocr está disponible para usar.
Nota: Lo siguiente solo funciona con VS 2015 y Windows 10. Ese VS 2015 también debe actualizarse para Universal Windows Platform (UWP). Marque this para una muestra de OCR.
Espero que esto ayude. Actualizar Se importó a mi referencia pero no se carga. Espero que sea un buen comienzo para la gente. ¡Gracias!.
Puede pasar a la Actualización 2 a continuación para obtener una solución que funcione.
LANZARÁ UNA EXCEPCIÓN DE CARGA TIPO. Dicho esto, estoy publicando porque estoy intentando hacer lo mismo pero no puedo ejecutar el proyecto. Aquí hay algunas instrucciones básicas sobre cómo obtener la api winrt en su proyecto de aplicación sin Windows.
http://weblogs.thinktecture.com/cnagel/2012/10/calling-winrt-from-windows-desktop-apps.html
Tampoco intente hacer referencia a la dll, haga referencia al archivo winmd.
Aquí hay una aplicación de consola de muestra que hace referencia a la biblioteca ocr, pero cuando ejecuta la solución, lanza la excepción de carga de tipo ( https://github.com/Xandroid4Net/MicrsoftOcrConsoleApp ). Debe ser fácilmente portada desde una aplicación de consola a asp. aplicación neta. No sé cómo arreglar la excepción de carga de tipo, quizás puedas llegar más lejos que yo. Por favor, publique si encuentra una solución.
ACTUALIZACIÓN 1 (12/1/2014)
Más excavaciones revelaron el siguiente error de unión de montaje. ¿Alguna idea de cómo configurar un Id de paquete para un proceso?
Archivo: WindowsPreview.Media.Ocr! WindowsPreview.Media.Ocr.OcrEngine, Versión = 255.255.255.255, Culture = neutral, PublicKeyToken = null, ContentType = WindowsRuntime.htm
Contenido del archivo:
* Entrada de registro de la carpeta de ensamblaje (12/1/2014 @ 11:48:01 PM) *
La operación falló. Resultado de enlace: hr = 0x80073d54. El proceso no tiene identidad de paquete.
El administrador de ensamblaje se cargó desde: C: / Windows / Microsoft.NET / Framework64 / v4.0.30319 / clr.dll que se ejecuta en el ejecutable C: / Users / Wesley / Documents / Dev / ConsoleApplication2 / Program.exe --- A continuación se detalla un registro de errores detallado .
BEGIN: Windows Runtime Type bind. FIN: El proceso no tiene identidad de paquete. (Excepción de HRESULT: 0x80073D54)
Actualización 2 (12/03/2014)
Esta es una solución desagradable pero funcionó en mi tableta Windows 8.1 Surface Pro 3. El WebOcr es un formulario web, pero puede ser refactorizado fácilmente para MVC
1) Descargue https://github.com/Xandroid4Net/CommandLineOcr . Esta es la aplicación de la tienda psuedo.
2) Construye y ejecuta la aplicación. Aparecerá que no hace nada. Está bien, actualizará el registro con una nueva clave que necesitaremos.
3) Descargue https://github.com/Xandroid4Net/WebOcr .
4) Encuentre OcrCommandLineCaller.cs en el proyecto Webocr.
5) Localice la clave de registro en HKEY_CURRENT_USER / Software / Classes / ActivatableClasses / Package / Some_Sort_Of_Guid_For_Your_APP / Server / App.App .... / AppUserModelId
Consulte esta pregunta SO si necesita más ayuda para encontrar la clave de registro. IApplicationActivationManager :: ActivateApplication en C #?
6) Actualice la aplicación appActiveManager.ActivateApplication en OcrCommandLineCaller.cs con el extraño identificador de la aplicación guid que se encuentra en la clave de registro.
7) En default.aspx.cs reemplace saveAsPath con la ruta en su máquina. En la aplicación de la tienda de Windows hay una ruta estática representada por Windows.Storage.ApplicationData.Current.LocalFolder. Este es el camino donde guardé mis imágenes para simplificar.
8) Modifique cualquiera de los códigos al contenido de su corazón y hágame saber si tiene alguna pregunta.
Esta es una solución muy ruda y desagradable, pero funciona.