1. 概述

在做文本检测相关工作的时候会使用到分割网络对文本进行检测,直接使用原始的标注进行训练会导致上下文本存在粘连,一个较为有效的办法就是对标注进行收缩,这样粘连的情况会有所好转。这里将图片放置在src_imgs文件夹下(文件格式为jpg文件),对应的标注放置在labels_txt文件夹下(文件格式为txt文件)。

对于标注文件中标注的规范为:

x1 y1 x2 y2 ... xn yn label_type

每个值以空格作为分隔,最后一个为标注的类别。

2. 代码实现

# -*- coding=utf-8 -*-
import os
import cv2
import Polygon as plg
import pyclipper
import numpy as npdef dist(a, b):return np.sqrt(np.sum((a - b) ** 2))def perimeter(bbox):peri = 0.0for i in range(bbox.shape[0]):peri += dist(bbox[i], bbox[(i + 1) % bbox.shape[0]])return peridef shrink(bboxes, rate, max_shr=20):rate = rate * rateshrinked_bboxes = []for bbox in bboxes:area = plg.Polygon(bbox).area()peri = perimeter(bbox)pco = pyclipper.PyclipperOffset()pco.AddPath(bbox, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)offset = min((int)(area * (1 - rate) / (peri + 0.001) + 0.5), max_shr)shrinked_bbox = pco.Execute(-offset)if len(shrinked_bbox) == 0:shrinked_bboxes.append(bbox)continueshrinked_bbox = np.array(shrinked_bbox)[0]if shrinked_bbox.shape[0] <= 2:shrinked_bboxes.append(bbox)continueshrinked_bboxes.append(shrinked_bbox)return shrinked_bboxes  # np.array(shrinked_bboxes)def demo(root_path):gt_dir = os.path.join(root_path, 'labels_txt')img_dir = os.path.join(root_path, 'src_imgs')label_list = os.listdir(gt_dir)for label_file in label_list[:10]:src_img = cv2.imread(os.path.join(img_dir, label_file[:-4]+".jpg"))with open(os.path.join(gt_dir, label_file), 'r') as f:label_lines = f.readlines()gt_boxes = []for line in label_lines:line = line.strip()box_points = [int(float(item)) for item in line.split( )[:-1]]box_info = np.array(box_points).reshape((-1, 2))gt_boxes.append(box_info)[H, W, C] = src_img.shapeori_mask_img = np.zeros((H, W))for box in gt_boxes:ori_mask_img = cv2.fillPoly(ori_mask_img, [box], (255))shrink_mask_img = np.zeros((H, W))new_gt_boxes = shrink(gt_boxes, 0.9)for box in new_gt_boxes:shrink_mask_img = cv2.fillPoly(shrink_mask_img, [box], (255))cv2.imshow("ori_mask", ori_mask_img)cv2.imshow("shrink mask", shrink_mask_img)cv2.waitKey(0)if __name__ == "__main__":root_path = os.getcwd()demo(root_path)

多边形标注收缩python代码实现相关推荐

  1. 《Deep residual shrinkage networks for fault diagnosis》 基于深度残差收缩网络的故障诊断(翻译与python代码)

    基于深度残差收缩网络的故障诊断(翻译) 赵明航,钟诗胜,付旭云,汤宝平,Michael Pecht 论文连接:https://ieeexplore.ieee.org/document/8850096 ...

  2. 电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注

    电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注 文章目录 电网知识图谱项目总结(1)python代码实现RDF三元组自动化标注 简介 文档内容 RDF规范 标注思路 代码结构 详 ...

  3. “牧童骑黄牛”(Python代码实现)

    目录 1 清明佳节 2 无用的哲思 2.1 西方无用的哲思 2.2 中国实用哲学 3 "牧童骑黄牛"的视觉震撼(Python代码实现) 3.1 OpenCV简介 3.2 OpenC ...

  4. plot参数详解python_30行Python代码实现3D数据可视化

    作者:潮汐 来源:Python技术 欢迎来到编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 完成这50个Matplotlib代码,你也能画出优秀的图表 25个常用Mat ...

  5. GitHub超3k星!从Python代码到APP只需要一个小工具~

    来源:机器之心 本文约2600字,建议阅读7分钟. 本文带你了解这款工具,在你写 Python 代码的时候,实时更新你的应用. 机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Pyth ...

  6. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  7. python 语义网络_从Python代码到APP,你只需要一个小工具:GitHub已超3000星

    机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Python 代码就可以了,剩下的工作都可以交给一个工具.近日,Streamlit 联合创始人 Adrien Treuille 撰文介绍 ...

  8. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  9. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

最新文章

  1. 使用BeetleX网关对Web应用进行灰度发布
  2. JAVA反射修改常量,以及其局限
  3. 服务器上次文件命令,服务器上次文件命令
  4. 全文搜索引擎有哪些?_你想要拥有自己的搜索引擎吗?
  5. mysql命令导出数据不完整_使用MySQL MySqldump命令导出数据时的注意事项
  6. 洛谷 P4549 【模板】裴蜀定理
  7. vue 将数据保存到vuex中
  8. 苹果mac需牢记的SSH命令
  9. Spark2 文件处理和jar包执行
  10. 滴滴android面试算法,滴滴打车面试经验
  11. 闲聊:Android 平台网络游戏加速器·一(科普文)
  12. 泛函分析 06.02 线性算子的谱理论 - 有界线性算子的谱集
  13. 细粒度锁的实现之分级锁的设计实现
  14. UDIMM和RDIMM内存条区别
  15. html组态插件_BY组态 插件 web组态 插件 物联网组态 插件
  16. 我国数学家丁小平先生在微积分研究领域所取得的成就
  17. 手机里tencent文件夹能删吗_手机上的文件夹能不能删?看完之后秒懂
  18. PyCharm下载安装及配置使用教程(全过程详细截图)
  19. jQuery Text-to-Speech 谷歌在线语音
  20. 计算机将文本朗读出来应用语音,你写我读_一边打字电脑将字朗读出来的软件 V1.2 最新免费版...

热门文章

  1. kubeadm安装部署k8s(1)
  2. 用Mathematica和SciPy阐明Jacobi椭圆函数的定义方法
  3. 关于大屏项目中分辨率和高宽比的总结
  4. Iqoo手机删除内置应用
  5. 笔记本计算机的连接无线网络连接,笔记本电脑连接wifi的方法步骤
  6. Python爬虫-关于HTPP请求方法有哪些
  7. ICPC North Western European Regional Contest 2019 E. Expeditious Cubing(浮点数处理)
  8. [学习经验] 孩子到底什么时候学习自然拼读和国际音标?
  9. android视频播放边播边缓存
  10. 贪心算法之汽车加油问题