Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Google Vision OCR,将文字坐标从90、180、270个文档旋转到0度_Google Cloud Platform_Ocr_Google Cloud Vision - Fatal编程技术网

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

Google cloud platform Google Vision OCR,将文字坐标从90、180、270个文档旋转到0度,google-cloud-platform,ocr,google-cloud-vision,Google Cloud Platform,Ocr,Google Cloud Vision,问题 鉴于我们有以下指南,摘自Google Vision OCR文档 因此,作为一个实验,我在四个不同的方向扫描了同一个文档,并通过谷歌的视觉OCR(document_TEXT_DETECTION)运行它。即0度、90度、180度和270度。下面是谷歌OCR输出的结果 具有0度方向的文档。这是水平文本的默认设置。它具有0度文本旋转。它的四个角是: 0----1 | | 3----2 Document height 3508 Document width 2479 输出文本的示例 LEGO

问题

鉴于我们有以下指南,摘自Google Vision OCR文档

因此,作为一个实验,我在四个不同的方向扫描了同一个文档,并通过谷歌的视觉OCR(document_TEXT_DETECTION)运行它。即0度、90度、180度和270度。下面是谷歌OCR输出的结果

具有0度方向的文档。这是水平文本的默认设置。它具有0度文本旋转。它的四个角是:

0----1
|    |
3----2
Document height 3508
Document width 2479
输出文本的示例

LEGO - {'vertices': [{'x': 755, 'y': 172}, {'x': 877, 'y': 173}, {'x': 876, 'y': 237}, {'x': 754, 'y': 236}]}
LEGOLAND - {'vertices': [{'x': 1994, 'y': 189}, {'x': 2269, 'y': 192}, {'x': 2268, 'y': 244}, {'x': 1993, 'y': 241}]}
LEGO - {'vertices': [{'x': 170, 'y': 1730}, {'x': 171, 'y': 1604}, {'x': 241, 'y': 1604}, {'x': 240, 'y': 1730}]}
LEGOLAND - {'vertices': [{'x': 188, 'y': 486}, {'x': 192, 'y': 213}, {'x': 245, 'y': 214}, {'x': 241, 'y': 487}]}
LEGO - {'vertices': [{'x': 1740, 'y': 3337}, {'x': 1584, 'y': 3336}, {'x': 1585, 'y': 3259}, {'x': 1741, 'y': 3260}]}
LEGOLAND - {'vertices': [{'x': 485, 'y': 3315}, {'x': 212, 'y': 3311}, {'x': 213, 'y': 3261}, {'x': 486, 'y': 3265}]}
LEGO - {'vertices': [{'x': 3335, 'y': 738}, {'x': 3333, 'y': 893}, {'x': 3269, 'y': 892}, {'x': 3271, 'y': 737}]}
LEGOLAND - {'vertices': [{'x': 3318, 'y': 1994}, {'x': 3313, 'y': 2266}, {'x': 3261, 'y': 2265}, {'x': 3266, 'y': 1993}]}
文档具有90度方向。

输出文本的示例

LEGO - {'vertices': [{'x': 755, 'y': 172}, {'x': 877, 'y': 173}, {'x': 876, 'y': 237}, {'x': 754, 'y': 236}]}
LEGOLAND - {'vertices': [{'x': 1994, 'y': 189}, {'x': 2269, 'y': 192}, {'x': 2268, 'y': 244}, {'x': 1993, 'y': 241}]}
LEGO - {'vertices': [{'x': 170, 'y': 1730}, {'x': 171, 'y': 1604}, {'x': 241, 'y': 1604}, {'x': 240, 'y': 1730}]}
LEGOLAND - {'vertices': [{'x': 188, 'y': 486}, {'x': 192, 'y': 213}, {'x': 245, 'y': 214}, {'x': 241, 'y': 487}]}
LEGO - {'vertices': [{'x': 1740, 'y': 3337}, {'x': 1584, 'y': 3336}, {'x': 1585, 'y': 3259}, {'x': 1741, 'y': 3260}]}
LEGOLAND - {'vertices': [{'x': 485, 'y': 3315}, {'x': 212, 'y': 3311}, {'x': 213, 'y': 3261}, {'x': 486, 'y': 3265}]}
LEGO - {'vertices': [{'x': 3335, 'y': 738}, {'x': 3333, 'y': 893}, {'x': 3269, 'y': 892}, {'x': 3271, 'y': 737}]}
LEGOLAND - {'vertices': [{'x': 3318, 'y': 1994}, {'x': 3313, 'y': 2266}, {'x': 3261, 'y': 2265}, {'x': 3266, 'y': 1993}]}
180度方向的文档。

输出文本的示例

LEGO - {'vertices': [{'x': 755, 'y': 172}, {'x': 877, 'y': 173}, {'x': 876, 'y': 237}, {'x': 754, 'y': 236}]}
LEGOLAND - {'vertices': [{'x': 1994, 'y': 189}, {'x': 2269, 'y': 192}, {'x': 2268, 'y': 244}, {'x': 1993, 'y': 241}]}
LEGO - {'vertices': [{'x': 170, 'y': 1730}, {'x': 171, 'y': 1604}, {'x': 241, 'y': 1604}, {'x': 240, 'y': 1730}]}
LEGOLAND - {'vertices': [{'x': 188, 'y': 486}, {'x': 192, 'y': 213}, {'x': 245, 'y': 214}, {'x': 241, 'y': 487}]}
LEGO - {'vertices': [{'x': 1740, 'y': 3337}, {'x': 1584, 'y': 3336}, {'x': 1585, 'y': 3259}, {'x': 1741, 'y': 3260}]}
LEGOLAND - {'vertices': [{'x': 485, 'y': 3315}, {'x': 212, 'y': 3311}, {'x': 213, 'y': 3261}, {'x': 486, 'y': 3265}]}
LEGO - {'vertices': [{'x': 3335, 'y': 738}, {'x': 3333, 'y': 893}, {'x': 3269, 'y': 892}, {'x': 3271, 'y': 737}]}
LEGOLAND - {'vertices': [{'x': 3318, 'y': 1994}, {'x': 3313, 'y': 2266}, {'x': 3261, 'y': 2265}, {'x': 3266, 'y': 1993}]}
方向为270度的文档。

输出文本的示例

LEGO - {'vertices': [{'x': 755, 'y': 172}, {'x': 877, 'y': 173}, {'x': 876, 'y': 237}, {'x': 754, 'y': 236}]}
LEGOLAND - {'vertices': [{'x': 1994, 'y': 189}, {'x': 2269, 'y': 192}, {'x': 2268, 'y': 244}, {'x': 1993, 'y': 241}]}
LEGO - {'vertices': [{'x': 170, 'y': 1730}, {'x': 171, 'y': 1604}, {'x': 241, 'y': 1604}, {'x': 240, 'y': 1730}]}
LEGOLAND - {'vertices': [{'x': 188, 'y': 486}, {'x': 192, 'y': 213}, {'x': 245, 'y': 214}, {'x': 241, 'y': 487}]}
LEGO - {'vertices': [{'x': 1740, 'y': 3337}, {'x': 1584, 'y': 3336}, {'x': 1585, 'y': 3259}, {'x': 1741, 'y': 3260}]}
LEGOLAND - {'vertices': [{'x': 485, 'y': 3315}, {'x': 212, 'y': 3311}, {'x': 213, 'y': 3261}, {'x': 486, 'y': 3265}]}
LEGO - {'vertices': [{'x': 3335, 'y': 738}, {'x': 3333, 'y': 893}, {'x': 3269, 'y': 892}, {'x': 3271, 'y': 737}]}
LEGOLAND - {'vertices': [{'x': 3318, 'y': 1994}, {'x': 3313, 'y': 2266}, {'x': 3261, 'y': 2265}, {'x': 3266, 'y': 1993}]}
现在是问题/问题

如果我们有一个90度、180度和270度扫描的文档,那么如何从数学上旋转坐标,以便无论扫描方向如何,它们都会给出与默认0度文档相同的结果。或者换言之,如何校正90度、180度和270度的坐标,就像用0度扫描一样

这个问题对某些人来说可能很简单,但在过去的几天里,我一直在尝试各种方法,但我似乎无法解决它

因此,输入参数是扫描的页面方向度(0,90180270),从谷歌OCR输出的文本顶点,以及也从谷歌OCR输出的页面大小(高度和宽度)


输出必须是0度页面方向的校正文本顶点

我将给出数学响应。请记住,数学是一门精确的科学,而视觉OCR扫描是一种经验技术,即不是精确的科学

请允许我举一个简单的例子,这样您就可以看到这种行为。想象一个高度为10、宽度为4、点位于坐标(1,9)处的文档。将其旋转90º时,点的坐标变成(9,3),然后变成(3,1),最后变成(1,1)

原因是,对于高度H和宽度W的通用矩形,点(a,b)的90º旋转产生:
(a,b)->(b,W-a),W'=H,H'=W

此转换重复产生180º、270º转换。
这是序列(a,b)->(b,W-a)->(W-a,H-b)->(H-b,a)->(a,b)

所以,从序列中的任何一点将其返回到(a,b)只是一个简单的方程,假设你知道所有的参数

例如,对于180º度边界框:

LEGO - {'vertices': [{'x': 1740, 'y': 3337}, {'x': 1584, 'y': 3336}, {'x': 1585, 'y': 3259}, {'x': 1741, 'y': 3260}]}
  • 每个x值都跟随x=width-x0->x0=width-x
  • 每个y值紧跟在y=height-y0->y0=height-y之后
其中:

LEGO - {'vertices': [{'x': 739, 'y': 171}, {'x': 895, 'y': 172}, {'x': 894, 'y': 249}, {'x': 738, 'y': 248}]}
当然,这与原始值略有不同。如果对所有旋转执行简单变换,可以看到它们在所有旋转中都略有不同。请记住,这是经验的“边界框”,它们有一个相关的错误,不可能得到与“数学”问题相同的结果