Подтвердить что ты не робот

Как использовать библиотеку Microsoft OCR (Microsoft.Windows.Ocr) в проекте ASP.NET MVC4 Web API?

TL; DR:

Кто-нибудь знает способ ссылки Microsoft.Windows.Ocr (/WindowsPreview.Media.Ocr.dll) Сборка на серверном веб-приложении ASP.Net, таком как MV4 Web API, и использование функции OCR в этой сборке для принятия фотоизображение в качестве входных данных и извлечь текст из него? Если да, предоставьте подробные инструкции в своем ответе.

Детали вопроса (и то, что я пробовал до сих пор)

Я создаю веб-приложение, которое загружает изображение на сервер (через экран пользовательского интерфейса загрузки файлов), а затем читает текст с помощью OCR и отображает текст на следующей странице, справа к загруженному изображению.

Поскольку большинство коммерческих библиотек OCR стоили руку и длину (более $1300 в прошлый раз, когда я проверял) Я думал, что могу попробовать и использовать Библиотека Microsoft OCR Microsoft.Windows.Ocr, которая БЕСПЛАТНО и кажется очень проста и проста в использовании.

Итак, я попытался установить пакет Microsoft.Windows.Ocr Nuget Package в проект ASP.NET MVC4 Web API, и это удалось.

install the Microsoft.Windows.Ocr Nuget Package

После этого я просмотрел ссылки на MVC4 Web API Project, и, к моему удивлению, не нашел ссылки на сборку Microsoft.Windows.Ocr.dll.

reference to Microsoft.Windows.Ocr.dll missing

Итак, я попытался добавить ссылку на x86-версию сборки Microsoft.Windows.Ocr.dll, перейдя на эту сборку в папке \packages и выбрав WindowsPreview.Media.Ocr.dll из \lib\win81\x86 папки

Примечание.. Имя сборки - это WindowsPreview.Media.Ocr.dll, а не Microsoft.Windows.Ocr.dll, не знаете почему!

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

Когда я это сделал и нажал ОК, я получил следующее сообщение об ошибке.

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

Затем я узнал из страницу Nuget, что "Поддерживаемые платформы" - это только Windows Phone 8, Windows Phone 8.1, Windows 8.1 (только для приложений Windows Store).

microsoft ocr library nuget error

Но, конечно, должен быть способ использовать эту OCR dll на стороне сервера в приложении ASP.Net?

Кто-нибудь знает способ ссылки Microsoft.Windows.Ocr (/WindowsPreview.Media.Ocr.dll) Сборка на серверном веб-приложении ASP.Net, например MV4 Web API, и использование функции OCR в этой сборке для создания фотоизображения как ввод и извлечение из него текстового содержимого? ** Если да, предоставьте подробные инструкции в своем ответе.

Любые "хаки" и/или примерный код будут высоко оценены!

Спасибо!

4b9b3361

Ответ 1

Вы можете перейти к обновлению 2 ниже для рабочего решения.

ЭТО ПРОДОЛЖАЕТ ИСКЛЮЧЕНИЕ ТИПА. Это, как говорится, я публикую, потому что я пытаюсь сделать то же самое, но не могу запустить проект. Вот несколько основных инструкций о том, как получить winrt api в своем проекте без приложения windows.

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

Также не пытайтесь ссылаться на dll, вместо ссылки на файл winmd.

Вот пример консольного приложения, которое ссылается на библиотеку ocr, но при запуске решения оно вызывает исключение загрузки типа. (https://github.com/Xandroid4Net/MicrsoftOcrConsoleApp) Он должен быть легко перенесен из приложения консоли и приложения asp.net. Я не знаю, как исправить исключение загрузки типа, может быть, вы можете получить дальше, чем я могу. Если вы нашли решение, отправьте сообщение.

ОБНОВЛЕНИЕ 1 (12/1/2014)

Больше копания выявило следующую ошибку привязки сборки. Любая идея установить идентификатор пакета для процесса?

Файл: WindowsPreview.Media.Ocr! WindowsPreview.Media.Ocr.OcrEngine, Version = 255.255.255.255, Culture = neutral, PublicKeyToken = null, ContentType = WindowsRuntime.htm

Содержание файла:

* Запись в сборке Binder (12/1/2014 @11:48:01 PM) *

Не удалось выполнить операцию. Результат привязки: hr = 0x80073d54. Процесс не имеет идентификатора упаковки.

Менеджер сборки загружен из: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Выполняется в исполняемом файле C:\Users\Wesley\Documents\Dev\ConsoleApplication2\Program.exe --- Ниже приводится подробный журнал ошибок.

BEGIN: привязка типа времени выполнения Windows. END: Процесс не имеет идентификатора упаковки. (Исключение из HRESULT: 0x80073D54)

Обновление 2 (12/03/2014)

Это неприятный обходной путь, но он работал на моем планшете Windows 8.1 Surface Pro 3. WebOcr - это веб-формы, но он может быть легко реорганизован для MVC

1) Загрузите https://github.com/Xandroid4Net/CommandLineOcr. Это приложение для магазина psuedo.

2) Создайте и запустите приложение. Кажется, он ничего не делает. Это нормально, он обновит реестр новым ключом, который нам понадобится.

3) Загрузите https://github.com/Xandroid4Net/WebOcr.

4) Найдите OcrCommandLineCaller.cs в проекте Webocr.

5) Найдите раздел реестра HKEY_CURRENT_USER\Software\Classes\ActivatableClasses\Package\Some_Sort_Of_Guid_For_Your_APP\Server\App.App....\AppUserModelId

Обратитесь к этому вопросу SO, если вам нужна дополнительная помощь в поиске ключа реестра. IApplicationActivationManager:: ActivateApplication в С#?

6) Обновите приложение appActiveManager.ActivateApplication в OcrCommandLineCaller.cs со странным идентификатором приложения guid, найденным в разделе реестра.

7) В default.aspx.cs замените saveAsPath на путь на вашем компьютере. В приложении магазина Windows есть статический путь, представленный Windows.Storage.ApplicationData.Current.LocalFolder. Это путь, где я сохранил мои изображения для простоты.

8) Измените любой код в своем сердечном содержимом и сообщите мне, есть ли у вас какие-либо вопросы.

Это очень грубое и неприятное решение, но оно действительно работает.

Ответ 2

Я использую решение MODI, упакованное в MS Office, в течение нескольких лет, и был очень доволен им (это было бесплатно, если вы купили Office). Я был довольно разочарован, когда он был прекращен. Я пробовал Tesseract... Мне очень понравилось, но он нашел это медленным и неточным для голландского типа машины хорошего качества... и, как и вы, я не мог оправдать расходы на север в 200 долларов за то, что было по существу проектом для хобби,

После отчаянного поиска кто-то здесь указал мне на TOCR (продукт Transym). Вскоре после этого произошло прозрение.;-) Думаю, мне нужно сказать в этот момент, что я никоим образом не связан с Трансами, и да, я заплатил полную цену... 60 фунтов! (нет опечатки... sixty quid), которые, включая НДС, составили 113 евро.

Он по существу предназначен для интеграторов (он включает приложение scan/viewer/OCR, но это просто означает демонстрацию - если вы покупаете лицензию, вы получаете исходный код). API устарел (это, как двигатели OCR, довольно зрелая кодовая база), но он быстрый, стабильный и неожиданно точный. Не так точно, как двигатель DokuStar или другие эзотерические двигатели, но для моего приложения (тип машины Dutch и ENGLE) он имеет свои собственные против различных двигателей, которые находятся к северу от 1000 долларов. Точность распознавания на голландском типе машины превосходна (это не делает почерк). На мой взгляд, с точки зрения соотношения цены и качества это просто смехотворно хорошо. Что касается API: я написал рудиментарную .NET-оболочку вокруг нее в соответствии с моими потребностями - это было сделано за несколько вечеров.

На своем веб-сайте доступна версия eval (http://www.transym.com/index.htm). И нет, у меня нет денег, если вы это сделаете; -)

Ответ 3

Если вы используете Visual Studio 2015 и Windows 10,

Microsoft.Windows.Ocr

перенесен на универсальную платформу Windows. Он доступен как

Windows.Media.Ocr

Итак, вам нужно обновить VS 2015 с помощью инструментов для Windows 10.

Я сделал следующее, и Windows.Media.Ocr добавлен в качестве ссылки в моем веб-API.

  • В ваших проектах API веб-API щелкните правой кнопкой мыши любую ссылку и нажмите "Просмотр" в "Обозревателе объектов". Ваш браузер объектов будет выглядеть примерно так: введите описание изображения здесь
  • Рядом с полем "Обзор: все компоненты" есть кнопка "...". Всплывающая подсказка читает "Edit Custom Component set". Нажмите!
  • В окне "Редактировать пользовательский набор компонентов" нажмите "Обзор" и перейдите к "C:/Program Files (x86)/Windows Kits/10/References/Windows.Foundation.UniversalApiContract/1.0.0.0" и нажмите файл winmd, который появится, и нажмите "Добавить".
  • Хит Ok!
  • Теперь щелкните значок, который читает "Добавить в ссылки в выбранном проекте в обозревателе решений" (это третья кнопка из кнопки "..." рядом с "Обзор:" ). Вы можете увидеть, что Windows.Media.Ocr можно использовать.

Примечание. Следующее работает только с VS 2015 и Windows 10. Для этого необходимо обновить VS 2015 для Универсальная платформа Windows (UWP), Проверьте этот для примера OCR.

Надеюсь, это поможет. Обновление Он был импортирован в мою ссылку, но пока не загружается. Надеюсь, что это дает некоторые возможности для людей. Благодарю!.

Ответ 4

IMHO, возможно, не стоит пытаться использовать библиотеку, которая не поддерживается на таргетинге платформы.

Вы можете проверить этот ответ на некоторые бесплатные альтернативы.

Ответ 5

Мне удалось получить UWP OCR API, работающий на настольном приложении, используя uwpdesktop NuGet.

Install-Package uwpdesktop

Затем вы можете совершать вызовы API UWP.

Ответ 6

Я не юрист, но я понимаю, что лицензионное соглашение с конечным пользователем Microsoft для этой библиотеки не позволяет использовать библиотеку Microsoft OCR для Windows Runtime в вашем сценарии.

В частности, прочитайте второй абзац, где он запрещает использовать программное обеспечение на сервере в рабочей среде:

"2. УСТАНОВКА И ИСПОЛЬЗОВАНИЕ ПРАВ.

а. Генеральная. Один пользователь может установить и использовать копии программного обеспечения для разрабатывать, разрабатывать, тестировать и демонстрировать свои программы. Вы не можете использовать программное обеспечение на сервере в рабочей среде.

В то же время они также ограничивают запуск распространяемого кода исключительно в Windows Store или Windows Phone:

"3. ДОПОЛНИТЕЛЬНЫЕ ТРЕБОВАНИЯ К ЛИЦЕНЗИРОВАНИЮ И/ИЛИ ПРАВА ИСПОЛЬЗОВАНИЯ.

а. Распространяемый код. Программное обеспечение содержит код, который вы разрешено распространять в программах, которые вы разрабатываете, если вы выполняете ниже.

я...

II...

III. Ограничения распространения. Вы не можете

      ..

распространять распространяемый код для запуска на платформе другого чем Windows Store или Windows Phone; "

Полное EULA можно прочитать по адресу: https://www.microsoft.com/web/webpi/eula/windows_runtime_ocr_library_terms_of_use.htm