使用 google vision OCR API 从特定图像位置提取数据

Posted

技术标签:

【中文标题】使用 google vision OCR API 从特定图像位置提取数据【英文标题】:extracting data from specific image locations using google vision OCR API 【发布时间】:2020-03-03 06:53:15 【问题描述】:

我正在使用 Google 的 Vision OCR API 尝试从图像中提取 2 种类型的数据 1)文本框中的手写文本;下方标有红色圆圈和 2) 勾选框或复选框中的“x”;下面用绿色圆圈标记。我将把这些数据输入数据库,所以我需要为两种类型的数据返回一个字符串

目前,当我将此图像传递给 API 时,我会得到一个包含所有数据的字符串:

中学学习学生对计算机的看法 LO 13。您的家庭成员中是否有 > 在计算/IT 领域工作?如果是,那是哪个家庭成员(例如,父母、监护人、兄弟、姐妹>等) 兄弟 14.您以前是否有任何计算经验(甚至只参加了一天)?选择 >一个或多个领域:U CODER DOJO IN SCHOOL CAMP VSELF TAUGHT JOTHER 如果您从 Q14 中选择任何一个,是 >一般经验:GOOD NEITHER GOOD OR BAD BAD BAD 以及为什么(简短回答,4 个字以下)>学到了新技能待完成营后。新闻LRY 1 .我现在会考虑从事 >computing / IT 的职业。非常同意 同意 没有意见 不同意 非常不同意 2.夏令营向我展示了计算/IT 职业的真正含义。 ?非常同意 同意 没有意见 不同意 非常不同意 3 >。训练营表明/强调我不擅长编程或计算。非常同意 同意 >没有意见 不同意 非常不同意 4.提供两件你在训练营之后才知道的关于计算/编程的事情? java 语言 Eclipse IDE va 5 。我在编程/计算方面比我最初想象的要好(>训练营之前)。 ?同意 没有意见 不同意 非常不同意 ? O > 非常同意 6。关于营地的任何反馈/cmets(好或坏)?好营地,学到了很多。 >感谢您参加本次调查。第 2 页,共 2 页

我的代码:

 public static void Main(string[] args)
        

            string credential_path = @"C:\Users\35385\nodal.json";
            System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", credential_path);

            // Instantiates a client
            var client = ImageAnnotatorClient.Create();
            // Load the image file into memory
            var image = Image.FromFile("stack.jpg");
            // Performs text detection on the image file
            var response = client.DetectDocumentText(image);

            string words = "";

            foreach (var page in response.Pages)
            
                foreach (var block in page.Blocks)
                
                    string box = string.Join(" - ", block.BoundingBox.Vertices.Select(v => $"(v.X, v.Y)"));
                    foreach (var paragraph in block.Paragraphs)
                    
                        box = string.Join(" - ", paragraph.BoundingBox.Vertices.Select(v => $"(v.X, v.Y)"));
                        foreach (var word in paragraph.Words)
                        
                            words += $" string.Join("", word.Symbols.Select(s => s.Text))";
                        
                    
                
            

            Console.WriteLine(words);


        

所以我的问题:

    如何从每个红色框中提取数据(即第一个文本框将返回“兄弟”,第二个文本框应返回“学习的新技能”)? 如何从每个绿色问题中提取标记了哪个复选框(即问题 13 应返回“YES”,问题 14。应返回“SELF TAUGHT”等)?

【问题讨论】:

有一些关于我需要的谷歌文档,虽然它是在 python 中,但不幸的是我没有 python 经验:cloud.google.com/vision/docs/fulltext-annotations 嗨,我在 python 中使用谷歌 OCR。我收到错误,因为打开的文件太多。有没有办法关闭客户端? 【参考方案1】:

我只是使用了一些 php 脚本的 API,但我认为您的问题不取决于编程语言。 您需要使用检测到的单词的坐标(准确地说是四个顶点的框)。然后,您可以找到与参与者写作相关的问卷元素。 对我来说一个很好的切入点是这个脚本:

https://www.leanx.eu/tutorials/use-google-cloud-vision-api-to-process-invoices-and-receipts

您可以在任何支持 PHP 的网络空间上“按原样”使用它,它为您提供了一个结构良好的概览,让您了解如何检索 API 返回的框。

拥有这些框并知道您的问卷文本,如果谷歌检测到您的参与者所做的复选标记,应该很容易找到它们。对勾的检测可能并不总是适用于谷歌视觉,因为谷歌的 OCR 并不总是能找到单个“字符”。

【讨论】:

非常感谢阿诺的回复。您说得对,复选标记的检测可能并不总是适用于 Google Vision。由于这些手写标记可能是勾号、“x”、阴影等,因此仅依靠 API 捕获特定标记时的准确性还不够高。从那以后,我已经制定了自己的逻辑来提取复选框标记数据,方法是使用每个复选框未标记的像素密度并根据传入的复选框的像素密度进行测量,即如果变化是像素密度高于某个阈值,则复选框已被标记。这个实现效果很好

以上是关于使用 google vision OCR API 从特定图像位置提取数据的主要内容,如果未能解决你的问题,请参考以下文章

KeyError:使用 Google Cloud Vision API 进行 OCR 时出现“textAnnotations”

使用 google vision OCR API 从特定图像位置提取数据

是否可以使用 google vision api 一次扫描 10 张图像 ocr?到目前为止只做了1

来自 Google Vision API OCR 的响应 400,带有指定图像的 base64 字符串

如何使用 Google 的 Vision API 将 PDF(不可搜索)转换为可搜索的 PDF?

Google Vision OCR,将文字坐标从 90、180、270 个文档中旋转到 0 度