Как быстро и эффективно читать текст с «простого» скриншота? - PullRequest
1 голос
/ 06 апреля 2019

Я работаю над небольшим персональным приложением, которое должно читать какой-то текст (максимум 2 предложения) с очень простого скриншота Android. Текст всегда одинакового размера, одного шрифта и ок. в том же месте. Фон очень простой, обычно несколько оттенков одного цвета (кажется, будто ярко-оранжевый становится немного темнее оранжевого). Я пытаюсь выяснить, что было бы лучшим способом (и самое главное, самый быстрый способ) сделать это.

Моя первая попытка была связана с библиотекой IronOcr C #, и, честно говоря, она работала довольно хорошо! Но я заметил несколько проблем с ним:

  • Это не на 100% точно
  • Несмотря на наличие версии для сообщества / пробной версии, иногда выдаются исключения, указывающие на получение лицензии
  • Требуется ~ 400 мсек, чтобы прочитать изображение размером 600x300 пикселей, которое в случае моего простого изображения я считаю довольно длинным

Как бы странно это ни звучало, у меня такое ощущение, что такие библиотеки, как IronOcr и Tesseract, могут быть слишком продвинутыми для моих нужд. Чтобы повысить скорость, я даже написал фрагмент кода, чтобы сначала «портировать» мое изображение, сделав его полностью черно-белым.

Мои текущие настройки IronOcr выглядят так:

            ImageReader = new AdvancedOcr()
            {
                CleanBackgroundNoise = false,
                EnhanceContrast = false,
                EnhanceResolution = false,
                Strategy = AdvancedOcr.OcrStrategy.Fast,
                ColorSpace = AdvancedOcr.OcrColorSpace.GrayScale,
                DetectWhiteTextOnDarkBackgrounds = true,
                InputImageType = AdvancedOcr.InputTypes.Snippet,
                RotateAndStraighten = false,
                ReadBarCodes = false,
                ColorDepth = 1
            };

И я мог бы полностью согласиться с результатами, которые я получаю, используя IronOcr, но исключения из лицензирования разрушают его. У меня также нет $ 399 долларов, чтобы потратить на частный хобби-проект, который даже не покинет мой компьютер: (

Но моя главная цель в этом вопросе - найти лучший, быстрый или более эффективный способ сделать это. Это не обязательно должна быть существующая библиотека, я был бы более чем готов сделать свой собственный код обнаружения букв, который будет работать (только?) Для скриншотов, подобных моему, если кто-то может указать мне правильное направление.

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

У меня также нет $ 399 USD, чтобы потратить на частный хобби-проект, который даже не покинет мой компьютер

Вы можете использовать ocr.space free ocr api: https://ocr.space/ocrapi - он хорошо работает со скриншотами. Бесплатная версия является облачной (онлайн ocr).

0 голосов
/ 07 апреля 2019

Как быстро это должно быть?
Если вы используете C #, я рекомендую Google Cloud Vision API . Вы платите за запрос, но первые 1000 в месяц бесплатны (проверьте цены здесь ). Однако , требуется веб-запрос, но я считаю, что он очень быстрый

using Google.Cloud.Vision.V1;
using System;

namespace GoogleCloudSamples
{
    public class QuickStart
    {
        public static void Main(string[] args)
        {
            // Instantiates a client
            var client = ImageAnnotatorClient.Create();
            // Load the image file into memory
            var image = Image.FromFile("wakeupcat.jpg");
            // Performs label detection on the image file
            var response = client.DetectText(image);
            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                    Console.WriteLine(annotation.Description);
            }
        }
    }
}

Я считаю, что он хорошо работает с изображениями и отсканированными документами, поэтому он должен отлично работать в вашей ситуации. SDK также доступен на других языках, таких как Java, Python и Node

0 голосов
/ 06 апреля 2019

Я исследовал эту тему, и лучшее решение, которое я смог найти, - это когнитивные службы Azure.Вы можете использовать API компьютерного зрения для чтения текста с изображения. Здесь - полный документ.

...