Google Vision API的不同文本检测结果

时间:2017-12-18 16:49:04

标签: .net google-cloud-vision google-vision

从同一图片{。3}}和google vision api result

的.Net代码和演示应用中获取不同的文本检测结果

这是我的代码:

            var response = vision.Images.Annotate(
            new BatchAnnotateImagesRequest()
            {
                Requests = new[]
                {
                    new AnnotateImageRequest()
                    {
                        Features = new[]
                        {
                            new Feature()
                            {
                                Type =
                                    "TEXT_DETECTION"
                            }
                        },
                        Image = image
                    }
                }
            }).Execute();

2 个答案:

答案 0 :(得分:7)

正如Emil的回答所述,您需要DOCUMENT_TEXT_DETECTION功能而不是TEXT_DETECTION。但是,您可以比使用当前代码更简单地完成所有操作。

我建议使用Google.Apis.Vision.V1(使用gRPC端点,而不是使用Google.Cloud.Vision.V1(它看起来像你正在做,并使用REST端点)。希望更容易使用。免责声明:我在后一个库上工作)。 可以大部分时间使用REST端点,请注意。

这是使用后一个库的完整示例。

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

class Program
{
    static void Main(string[] args)
    {
        var client = ImageAnnotatorClient.Create();
        var image = Image.FromUri("https://i.stack.imgur.com/H21rL.png");
        var annotations = client.DetectDocumentText(image);
        var paragraphs = annotations.Pages
            .SelectMany(page => page.Blocks)
            .SelectMany(block => block.Paragraphs);
        foreach (var para in paragraphs)
        {
            var box = para.BoundingBox;
            Console.WriteLine($"Bounding box: {string.Join(" / ", box.Vertices.Select(v => $"({v.X}, {v.Y})"))}");
            var symbols = string.Join("", para.Words.SelectMany(w => w.Symbols).SelectMany(s => s.Text));
            Console.WriteLine($"Paragraph: {symbols}");
            Console.WriteLine();
        }
    }
}

丢失符号之间的空格,但显示正在检测所有文本 - 并且执行实际检测的方法调用非常简单:

var client = ImageAnnotatorClient.Create();
var image = Image.FromUri("https://i.stack.imgur.com/H21rL.png");
var annotations = client.DetectDocumentText(image);

上面的大部分代码都是处理响应。

答案 1 :(得分:1)

根据documentation发现问题时,使用Vision API我们应该使用DOCUMENT_TEXT_DETECTION

+-------------------------+-----------------------------------------------------------------------------------------------------------------+
| TEXT_DETECTION          | Run OCR.                                                                                                        |
+-------------------------+-----------------------------------------------------------------------------------------------------------------+
| DOCUMENT_TEXT_DETECTION | Run dense text document OCR. Takes precedence when both DOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present. |
+-------------------------+-----------------------------------------------------------------------------------------------------------------+

因此代码应如下所示:

var response = vision.Images.Annotate(
            new BatchAnnotateImagesRequest()
            {
                Requests = new[]
                {
                    new AnnotateImageRequest()
                    {
                        Features = new[]
                        {
                            new Feature()
                            {
                                Type =
                                    "DOCUMENT_TEXT_DETECTION"
                            }
                        },
                        Image = image
                    }
                }
            }).Execute();