Распознавание текста с помощью Xamarin.Форма когнитивный сервис Azure

#xamarin.forms #ocr

#xamarin.forms #Распознавание текста

Вопрос:

Я разрабатываю Windows 10 с Visual Studo 2019. Я пытаюсь выполнить распознавание текста с помощью Xamarin.Форма когнитивный сервис Azure. Я смог настроить Azure. Проект тестируется на Android (фактическое устройство 9.0) с помощью Xamarin.

Форма. После создания снимка я использую его путь.

 public ReadImage()
{
    var file="/mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg";
    var visionClient = Authenticate(SubscriptionKey, EndPoint);

    var ocrResult1 = visionClient.RecognizePrintedTextAsync(true, "file:/"   file);
    var ocrResult2 = visionClient.RecognizePrintedTextAsync(true, "file:"   file);
    var ocrResult3 = visionClient.RecognizePrintedTextAsync(true, "file://"   file);
    var ocrResult4 = visionClient.RecognizePrintedTextAsync(true, "file:///"   file);
}
 

Результат распознавания возвращается со статусом =Ошибка.
Сообщение об ошибке выглядит следующим образом

Произошла одна или несколько ошибок. (Недопустимый URI: не удалось определить формат URI.)

file://mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg file:/mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg file:///mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg file:////mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg

Что мне делать с путем для распознавания в OCR?

В решениях NuGet я использовал RecognizePrintedTextInStreamAsync. Но ошибка.

     var ocrResult5 = visionClient.RecognizePrintedTextInStreamAsync(true, new FileStream(file, FileMode.Open, FileAccess.Read));
    //One or more errors occurred. (Invalid URI: The format of the URI could not be determined.)

    var ocrResult6 = visionClient.RecognizePrintedTextInStreamAsync(true, new FileStream("file:" file, FileMode.Open, FileAccess.Read));
    //Could not find a part of the path "/file:/mnt/sdcard/DCIM/Camera/IMG_20210126_1050.jpg".

    var ocrResult7 = visionClient.RecognizePrintedTextInStreamAsync(true, new FileStream(file.TrimStart('/'), FileMode.Open, FileAccess.Read));
    //One or more errors occurred. (Invalid URI: The format of the URI could not be determined.)

    var ocrResult8 = visionClient.RecognizePrintedTextInStreamAsync(true, new FileStream("file:/" file, FileMode.Open, FileAccess.Read));
    //Could not find a part of the path "/file:/mnt/sdcard/DCIM/Camera/IMG_20210126_105535.jpg".

    var ocrResult9 = visionClient.RecognizePrintedTextInStreamAsync(true, new FileStream("file://" file, FileMode.Open, FileAccess.Read));
   //Could not find a part of the path "/file:/mnt/sdcard/DCIM/Camera/IMG_20210126_105535.jpg".
 

Добавить поток переменных = новый поток файлов (файл, режим файла.Открыть, FileAccess.Read); результат отладочный образ.
StearmReader — это успех

Комментарии:

1. Похоже, что RecognizePrintedTextAsync ожидает URL-адрес изображения, поэтому сначала необходимо загрузить изображение по общедоступному URL-адресу. Или вы могли бы использовать RecognizePrintedTextInStreamAsync, который позволяет передавать поток для изображения.

2. Спасибо за ваш комментарий. Я попробовал RecognizePrintedTextInStreamASync. Однако все они приводили к ошибкам, как показано в 5-9, которые я добавил. Пожалуйста, скажите мне, как указать путь.

3. «/mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg » это путь к файлу

4. Спасибо за ваш комментарий. В первой строке var file=»/mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg «; так и должно быть, я понимаю, что «/mnt/sdcard/DCIM/Camera/IMG_20210122_1709.jpg » это путь к файлу. Однако, когда я передаю этот файл в качестве второго аргумента RecognizePrintedTextAsync, я получаю недопустимую ошибку URI. Передача этого файла второму аргументу RecognizePrintedTextInStreamAsync приведет к недопустимой ошибке URI. Поэтому я хотел бы знать, как преобразовать файл в URI.

5. вы можете просто сделать var stream = new FileStream(file, FileMode.Open, FileAccess.Read); ?