数据集制作步骤:

第一步将元器件检测结果裁剪成独立的元器件图片
1.crop_roi_from_detect_result.py
folder_path中存放存放主板和主板对应的元器件输出文件,这个脚本是将检测的区域截取出来,并按照主板名称分别保存

2.match_high_low_lumi.py
这个python文件是用于由低曝光的图片的检测结果,同时截取低曝光和高曝光图片的元器件图片,并分别保存.需要对低曝光和高曝光图像进行匹配,才能抠出对应的图片.

if  __name__ == '__main__':parms = [{"img_path_low":"/home/u1/mikeyna/data/tec/test-data/ocr-test/img_low_lumi/20X18-Front.jpg","img_path_high": "/home/u1/mikeyna/data/tec/test-data/ocr-test/img_high_lumi/20X18-Front.jpg","detect_result":"/home/u1/mikeyna/data/tec/test-data/ocr-test/json/20X18-Front.json","shit_parm":[746,222]}]excel_path = "/home/u1/mikeyna/data/tec/component-ocr-list/Components_category_list_20201112.csv"crop_base_path = "/home/u1/mikeyna/data/tec/test-data/ocr-test/high_low_lumi"for parm in parms:result_path = parm['detect_result']low_lumi_image_path = parm['img_path_low']high_lumi_image_path = parm['img_path_high']start_x = parm['shit_parm'][0]start_y = parm['shit_parm'][1]img_name = os.path.basename(low_lumi_image_path).split(".")[0]crop_path_high = os.path.join(crop_base_path, img_name + "/high")crop_path_low = os.path.join(crop_base_path, img_name + "/low")crop_detect_result_high_and_low(high_lumi_image_path,low_lumi_image_path, result_path, excel_path, crop_path_high, crop_path_low, start_x, start_y)

第二步手动矫正文字的方向
做这一步的目的原因之一是为了能够利用算法达到更好的标注效果,目前的算法,如果不是正方向,经常会误检.原因之二是因为后续的ocr是需要有方向性的,目前算法端没有判断文字的方向,所以进行统计的时候都是假设他是向上的文字.
high_low_lumi_crop_up存放的是文字正方向的元器件图片
第三步对crop图片进行文字检测,并保存为via支持的.csv格式
gen_via_annotation.py
第四步用via人工再次标注
text_detect_annotaion_set1–很早前三姆森轩明视和自己拍摄图片的数据集
text_detect_annotaion_set2–三姆森拍摄的低曝光数据集
text_detect_annotaion_set3–三姆森拍摄的高曝光数据集

数据集img表示图片,gt表示icdar格式的标注文件和visualization显示标注结果

第五步用校验好的via标注文件转成训练时使用的icdar标注格式
via_annotation_to_idcar_annotation.py

第六步将不同批次的数据集合并
merge_dataset.py
将不同批次的数据集整合起来,重新命名,序号从0开始命名

第七步划分数据集
split_dataset.py
将数据集划分成train,val,test

根据划分数据集的文件,生成对应格式的数据集

1.生成icdar数据集,可用于east训练
根据上述第七步生成的划分文件,生成对应的数据集

def gen_icdar_dataset(filename, img_folder_path, annl_folder_path, save_folder):fileprocess.mkdir(save_folder)f2 = open(filename, "r")lines = f2.readlines()print(len(lines))for i,name in enumerate(lines):print(i)name = name[:-1]annl_file_path = os.path.join(annl_folder_path, str(name) + ".txt")img_path = os.path.join(img_folder_path, str(name) + ".png")img_save_path = os.path.join(save_folder, str(i) + ".jpg")annl_save_path = os.path.join(save_folder, str(i) + ".txt")im = cv2.imread(img_path)if im is None:continueret = cv2.imwrite(img_save_path, im)print(img_save_path)copyfile(annl_file_path, annl_save_path)gen_icdar_dataset(test_file_list, img_folder_path, annl_folder_path, img_prefix_test)
gen_icdar_dataset(train_file_list, img_folder_path, annl_folder_path, img_prefix_train)
gen_icdar_dataset(val_file_list, img_folder_path, annl_folder_path, img_prefix_val)

gen_icdar_dataset.py
2.生成coco数据集,可用于maskrcnn训练
gen_coco_dataset.py

dataset_type = 'cocoDataSet'
data_root = '/home/u1/mikeyna/data/data_set/tec_data_set/txt_detect_set_icdar/img_gt_coco/'
import os
import cv2
import fileprocess
import gen_icdar_dataset
import icdar2lableme
from pathlib import Pathfrom shutil import copyfiledataset_type = 'cocoDataSet'
data_root = '/home/u1/mikeyna/data/data_set/tec_data_set/txt_detect_set_icdar/'
img_prefix_train=data_root + 'coco/train/'
img_prefix_val=data_root + 'coco/val/'
img_prefix_test=data_root + 'coco/test/'test_file_list = data_root + "Main/test.txt"
train_file_list = data_root + "Main/train.txt"
val_file_list = data_root + "Main/val.txt"
annl_folder_path = data_root + "gt"
img_folder_path = data_root + "img"
labels_path = data_root + "labels.txt"
script_path ="/home/u1/mikeyna/tools/labelme/examples/instance_segmentation/labelme2coco.py"def gen_coco_dataset(filename, img_folder_path, annl_folder_path, coco_save_folder, labels):icdar_folder_path = os.path.join(data_root, "tmp_icdar")labelme_folder_path = os.path.join(data_root, "tmp_labelme")fileprocess.del_files_in_folder(coco_save_folder)my_file = Path(coco_save_folder)if my_file.exists():os.removedirs(coco_save_folder)fileprocess.del_files_in_folder(icdar_folder_path)my_file = Path(icdar_folder_path)if my_file.exists():os.removedirs(icdar_folder_path)fileprocess.del_files_in_folder(labelme_folder_path)my_file = Path(labelme_folder_path)if my_file.exists():os.removedirs(labelme_folder_path)gen_icdar_dataset.gen_icdar_dataset(filename, img_folder_path, annl_folder_path, icdar_folder_path)icdar2lableme.convert_icdar2labelme(icdar_folder_path, labelme_folder_path)os.system("python " + script_path + " "+ labelme_folder_path + " " + coco_save_folder + " " + "--labels" + " " + labels)gen_coco_dataset(test_file_list, img_folder_path, annl_folder_path, img_prefix_test, labels_path)
gen_coco_dataset(train_file_list, img_folder_path, annl_folder_path, img_prefix_train, labels_path)
gen_coco_dataset(val_file_list, img_folder_path, annl_folder_path, img_prefix_val, labels_path)

制作TEC数据集的步骤相关推荐

  1. 利用Realsense D435和Mocap制作TUM数据集

    利用Realsense D435和Mocap制作TUM数据集 开门见山 步骤 开门见山 步骤 如果有Mocap,根据mocap系统指示获取Groundtruth,我实验室的mocap为optitrac ...

  2. 利用Arcgis制作图像分割数据集

    利用Arcgis制作图像分割数据集,以制作农村道路标签数据进行二分类为例 一,进行矢量化获取矢量数据 二,制作掩膜 三,mask图像导出 四,原始遥感影像裁剪 五,mask图片和遥感图像裁剪及训练集. ...

  3. 使用CycleGAN训练自己制作的数据集,通俗教程,快速上手

    总结了使用CycleGAN训练自己制作的数据集,这里的教程例子主要就是官网给出的斑马变马,马变斑马,两个不同域之间的相互转换.教程中提供了官网给的源码包和我自己调试优化好的源码包,大家根据自己的情况下 ...

  4. 使用Yolov5训练自己制作的数据集,快速上手

    总结了快速上手Yolov5训练自己制作的数据集的方法,步骤都很详细,学者耐心看. 文章目录 一.准备好Yolov5框架 二.关于数据集的问题 三.VOC格式数据集转yolo格式数据集 四.训练模型 五 ...

  5. Mask Rcnn目标分割-训练自己数据集-详细步骤

    本文接着介绍了Mask Rcnn目标分割算法如何训练自己数据集,对训练所需的文件以及训练代码进行详细的说明. 本文详细介绍在只有样本图片数据时,如果建立Mask Rcnn目标分割训练数据集的步骤.过程 ...

  6. 搭建可视化网页的software package_网页制作与网站搭建步骤教程

    原标题:网页制作与网站搭建步骤教程 现代建设网站,只需要一个鸣蝉建站系统的账号,注册一个账号直接用网站模板建站,基本上几十秒就可以做出网站的雏形,随后再添加相关的产品信息和内容,即可建成网站. 鸣蝉智 ...

  7. 【深度学习】制作VOC2007数据集用于Faster-RCNN训练

    制作VOC2007数据集用于Faster-RCNN训练:VOC2007格式是faster-RCNN中官方给出的用于训练的数据集,把它下载下来用frcnn/tool里的训练程序跑一跑就可以得到自己的训练 ...

  8. python制作图片数据集_Pytorch自己加载单通道图片用作数据集训练的实例

    pytorch 在torchvision包里面有很多的的打包好的数据集,例如minist,Imagenet-12,CIFAR10 和CIFAR100.在torchvision的dataset包里面,用 ...

  9. html诗词赏析网页制作步骤,制作网页详细操作步骤

    制作网页详细操作步骤 导读:目前所见即所得类型的工具越来越多,使用也越来越方便,所以制作网页已经变成了一件轻松的工作,不像以前要手工编写一行行的源代码那样.下面和小编一起去看看相关内容~ 制作网页主要 ...

最新文章

  1. 物体掉落速度_重3吨的巨型“手环”掉落高速路,车辆纷纷刹车躲避
  2. Uncaught TypeError: Cannot read property 'style' of null
  3. 推荐系统炼丹笔记:推荐系统Bias/Debias大全
  4. 【洛谷1361】 小M的作物(最小割)
  5. android tablerow 间隔,android-如何使TableRow从右到左
  6. jquery设置滚动条距离页面顶部的高度
  7. zabbix之web监控
  8. python文件夹目录_Python 操作文件、文件夹、目录大全
  9. 系统架构性能优化思路
  10. java读取.properties文件乱码
  11. python UI/API 环境配置
  12. Thinkphp apart_level 自定义独立日志
  13. 前端实现word、pdf文件在线预览功能
  14. 离散数学思维导图笔记
  15. 身份认证之多因素身份认证(MFA)
  16. java打印Ascii码
  17. 前端人不可错过的低代码神器,告别切图,一键成稿啦!
  18. 【安价】亚拉奈夫想要复兴贫弱男爵家的样子【内政】1
  19. Unity Scroll View在Clamped模式下无法移动
  20. WebRTC音频降噪使用

热门文章

  1. 第十一届蓝桥杯——JAVA组真题
  2. SWT行 AWT/Swing也行系列 1 -实现半透明及不规则窗体
  3. 【UE4】C++的RPC调用
  4. 怎样将discuz所有页面的Powered by Discuz!去掉
  5. java web图书商城系统的需求分析及详细设计
  6. 手机PCB设计基本要求
  7. PyCharm远程连接(linux)python解释器导入pyspark时报错:No module named ‘pyspark‘
  8. 【汇编语言】 安装虚拟机运行dos系统 教程
  9. Postfix构建Exchange Server 2010邮件网关部署系列五:升级Exchange 2010 SP3补丁
  10. 数控车椭圆编程实例带图_如何在数控车中对斜椭圆进行编程与加工