本站重新定位为
分享技术和经验的个人博客

深度学习 图片0 90 180 270角度旋转及坐标转换

文字方向问题总结

由于angle和Chinese-OCR项目是集成在一起的,在了解清楚预测的方法及脉络后,写了能够独立于OCR整体执行的独立脚本。

但是,虽然可以用此脚本将图片直接转换出正确的方向,但是需要执行两次才能成功转换为0度,这也为后面的问题埋了个坑。

为了让项目整体更顺畅,我决定将CHINESE-OCR项目中的Angle文本方向检测子项目移植到本项目。首先需要解决的就是执行一次独立脚本就能够给出正确的结果,这一步经过调整转换的代码实现了。

手机屏幕截图

描述已自动生成

然后是适配语法,由于原项目是基于python3.6的,原项目中使用的TensorFlow为1.7版本(太老),安装1.12版本会有语法上的更新导致其无法执行,且paddleOCR大部分是基于python3.8 or 3.8,有个别部分语法不兼容,逐适配代码使其支持python3.7.

解决完以上问题,着手将方向检测调整脚本与paddleOCR项目整合,这一步没有理论上的难点,但是由于讯飞是使用上传json数据的方式核验项目检测的正确率的,所以json数据中的坐标都需要是基于原图的坐标,而并非是转换后的图片的坐标。

此部分一定会分四种情况,即0 90 180 270四种,但是由于图像转换后坐标系也会跟着转换,这四种情况对应的算法不确定。最初尝试了几种,都不符合需求,有些甚至出现了负值!

手机屏幕截图

描述已自动生成

不符合情况的失败效果:

电脑屏幕的照片

描述已自动生成 电脑屏幕的照片上写着字

描述已自动生成

错位的标识

在经过PS与旋转工具结合找坐标并手写计算后,摸索出了相应转换的代码,尝试各种方向成功。代码如下。

手机屏幕截图

描述已自动生成

识别处理的效果:

电脑屏幕截图

描述已自动生成

顺时针90度

电脑屏幕的照片

描述已自动生成

顺时针270度

电脑屏幕的照片上有文字

描述已自动生成

顺时针180度

在此又出现一个问题,由于PaddleOCR只能由文件导入图片,不能由numpy矩阵导入,所以之前的脚本旋转后会保存并替换原图片再让paddle通过图片地址导入图片进行后续的识别操作,这样不会产生大的影响,但是会污染数据集。

于是参考pillow与c上网的图像转换脚本,直接将PIL的图片转换为C上网的格式,代码如下:

深度学习 图片0 90 180 270角度旋转及坐标转换

然后将之前img.save()的语句注释掉。这样处理之后就完美解决数据集的污染问题啦。

由于数据集有几千张,但是此时的代码只能单张图片识别,于是再加以修改,将全部图片遍历进来:

手机屏幕截图

描述已自动生成

再加上异常处理:

手机屏幕截图

描述已自动生成

此时图片旋转的问题比较完美的解决了。

 

赞(0)
这篇文章为天际博客(天朝世纪)原创,转载请注明。天际部落 » 深度学习 图片0 90 180 270角度旋转及坐标转换

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址