APP下载

LabelMe标注核对系统的设计与实现

2022-04-02迪力夏提多力昆张太红冯向萍

计算机技术与发展 2022年3期
关键词:中文名文件夹标签

迪力夏提·多力昆,张太红,冯向萍

(新疆农业大学 计算机与信息工程学院,新疆 乌鲁木齐 830052)

0 引 言

随着计算机技术的发展,在深度学习领域中,数据集的选择很重要,在构造数据集时,需要注意做好数据的清洗和标注,一个高质量的数据集往往能够提高模型训练的质量和预测的准确率。在没有大规模的图像数据集的情况下,为提高数据集质量,笔者设计了一种基于Django[1-2]的LabelMe[3-4](图像标注工具)标注核对系统。

该文使用的图像标注工具为LabelMe,在使用LabelMe标注工具完成标注后,通常对标注进行核对检查。这是一个繁琐且耗时的事情,需对每张图片的每个标签进行逐个点击,并核对检查标注与标签的一致性。为解决该问题,降低核对工作中的复杂性,减少耗时,该文将分别从Django框架的技术、总体设计、数据库设计、关键技术及系统界面展示等五个方面详述。

1 Django框架技术

Django框架技术是一种开放源代码式的Web[5-6]应用型框架,由Python[7]程序设计语言写成,该框架设计模式为MTV[8],选用成熟的框架可避免代码间迭代耦合等机制,还可根据具体需求,直接调用框架内部方法,更容易完成开发。Django框架也是一个遵循MVC[9]设计模式的框架,即模型、视图、控制器。它们各自职责如下:

(1)模型层(Model):作为Web应用中最重要的一部分,它涵盖了整个系统的实体类以及各种变量和方法规则,负责访问及更新数据库,为域名访问使用的服务器提供接口。

(2)视图层(View):视图层主要是当有请求服务时来产生应答,并由HTML在界面上供使用者操作。主要以表单的形式传给后台,还可对其进行校验,使开发者不必关心界面的相关问题,专注于业务逻辑的开发与实现。

(3)模板(Templates):模板是将数据的内容与展现分离,Django框架可随时替换变更,并满足用户多样需求,不局限于内置模板。强调代码复用性,以插件形式将多个组件服务于整个框架,并随时支持扩展,使得Django框架搭建Web平台具有较强的扩展性。

2 总体设计

系统的总体设计如图1所示,主要有项目管理、原图记录、导入JSON[10]、统一标签名、批量生成标注图、核对标注图、导出JSON文件等七大功能模块,其数据存储部分使用Django框架自带的SQLite3[11-12]数据库。

(1)项目管理:该模块作为系统的基础模块,主要用来管理来自不同项目的LabelMe数据集,使其相互独立。拥有创建、修改、裁剪主要目标的功能。

(2)原图记录:该模块主要在数据库中记录图片路径及标注状态,并在数据库中创建图片表,其一张图片对应一条记录。

(3)导入JSON:该模块主要用于导入标注集到数据库中,一个标签对应一条记录,且图片表与标签表为一对多关系,同时生成标签的汇总表。拥有导入新标注数据和导入修改后的标注数据集的功能。

(4)标签设置:该模块主要用来统一标签的英文名,同时设置标签的序号、中文名、颜色、字体位置和是否导出等功能,并通过预览查看设置效果。

(5)批量生成掩码图:该模块主要用来批量生成掩码图,通过设置好的标签,使用OpenCV[13]生成掩码图,使用户核对标注时无需逐个生成掩码图,加快核对速度。

(6)标注核对:该模块为核心模块,主要用来核对标注集,通过生成的掩码图以核对标签名称与对应标注物是否一致。拥有切换、修改、预览等功能。

(7)导出JSON:该模块为完成标注核对后的最后一部分,主要用于导出系统中核对后的JSON标注数据。拥有导出所有数据、移除需删除数据、拷贝需修改数据和在标签名后面追加序号等功能。

3 数据库设计

数据库的设计是系统设计环节中必不可少的一环,一个功能完善、结构合理的数据库能够帮助系统更高效、便捷地管理系统的各项数据。在数据库设计中,ER模型是一种能够改善开发人员与用户之间的沟通交流的建模工具,能够准确地描述数据的各种相关特性以及它们之间的互相约束关系,是一种概念性设计。通过ORM[14](对象关系映射)的方式建立Model层与数据库的映射,完成数据库的具体数据表的生成。EER[15](增强实体关系模型)则是对其进行了进一步细化,转换成了关系模型,与具体的数据库管理系统有关。系统的EER模型如图2所示。

通过图2对系统数据库中各个结构的展示,可以清楚地发现数据库不同表之间的具体关联关系以及它们的总体情况。本节将根据之前的分析结果,综合项目开发过程中的具体情况,创建数据Model并通过ORM映射生成具体的数据表,分别是项目表、汇总表、图片表和标签表,并对数据表做详细说明。

3.1 项目表

该表主要用于管理不同项目的数据集,使同项目之间互不干扰。字段有id号、项目英文名、项目中文名、是否裁剪主要目标、X轴裁剪比例和Y轴裁剪比例。其中裁剪目标指的是在原图上进行目标的裁剪,使图片只包含主要目标,过滤其他背景。在马匹四肢别征数据集中,裁剪目标设置为马匹,裁剪比例设置为-1,使其生成的掩码图只包含马匹,且裁剪比例为马匹框长宽+10%。项目表的具体结构见表1。

表1 项目表结构

3.2 汇总表

该表主要用于统一标签名及设置不同标签之间的颜色及中文名坐标。字段有id号、项目分类、标签英文名、标签中文名、标签序号、标签掩码颜色其RGB三通道色值、标签中文名X轴坐标、标签中文名Y轴坐标、标签掩码颜色是否取色差和是否导出。其中标签英文名用来统一标签名,若有同一个物体的标签名误写有多个或更改标签名,可以通过更改标签英文名实现。标签中文名主要用来提示掩码图中该物体的中文名,方便快速核对。其标签中文名坐标是防止出现遮挡掩码而设立。汇总表的具体结构见表2。

表2 汇总表结构

3.3 图片表

该表主要用于记录图片地址及状态。字段有id号、项目分类、原图名、原图后缀名、原图路径、掩码图路径、掩码图中中文字体大小、JSON文件是否导入、掩码图生成状态和图片状态。其中图片状态主要用来判断图片的标注数据的状态,分别为未核对、无问题、有问题、需修改和需删除共五种状态。图片表的具体结构见表3。

表3 图片表结构

3.4 标签表

该表主要用于操作标注数据集。字段有id号、图片表外键、标签分类、标注数据值、修改时间和标签状态。其中标注数据值分别有标签名、坐标值、Group值、ShapeType值和Flags值。标签名关联汇总表,为一对多关系。坐标值为标注物在图像中的坐标。项目表的具体结构见表4。

表4 标签表结构

4 关键技术

本系统的关键技术是通过标注坐标生成掩码图,掩码是由0和1组成的一个二进制图像。用选定的图像、图形或物体,对待处理的图像的全部或局部进行遮挡,用来控制图像。该文用于在马匹图像中将马匹、四肢和别征用不同颜色镜像显示,方便用户一眼就能快速核对,如图3所示。

在本系统中使用导入的JSON标注数据,查询与图片关联的标签表及汇总表,通过OpenCV将设置好的标签颜色、标签中文名和标签中文名坐标绘制出来,下面详细阐述其具体步骤。

(1)获取标签:在JSON标注集中,标签的顺序是以手工标注物体的顺序存放,而每张图的标注顺序不同,故无法按照固定顺序获取标签。本系统将每个标签存入标签表中,一个标签为一条记录,同一张图中的标签以图片表和汇总表关联,通过汇总表中用户设置的序号排序,获取每张图中的标签。

(2)绘制掩码图:通过获取到的标签,取出每个标签的坐标值并将其转换成OpenCV的嵌套字典格式,通过OpenCV的fillPoly函数生成mask层,并对标签坐标值进行半透明填充。

(3)计算中文字体坐标:在绘制图片中文名之前需要指定其标注中文名的坐标,而每个标签位置不同,本系统从获得的标签中通过标签坐标值得到该标签边框的左上角与右下角的坐标,获取的文字坐标值见公式1。

(1)

其中,X和Y为标签中文名坐标值,x1和y1为标签边框左上角坐标,x2和y2为标签边框右下角坐标。ratioX和ratioY为用户设置的标签坐标比例,以边框左上角为原点,将标签边框长度和宽度除10为基本比例单位,ratioX和ratioY的值从-10到10控制标签中文名的文字位置。

(4)绘制标签中文名:在绘制标签中文名时,有些图片中将看不清文字,因此需要给文字添加背景,在本系统中添加的背景为白色矩形实体框,之后再绘制文字。白色矩形框的左上角坐标值为标签中文名的左上角坐标值,其右下角的坐标值见公式2。

(2)

因中文、英文数字、符号所占长度空间不同,以字节为单位获取文字实际长度,其中BLen为文字字节长度,TLen为文字个数长度,通过公式即可获取文字实际长度LLen。因每张图片长和宽不同,可能会出现字体太大遮挡图片的情况,若遇到不合适的字体大小值,则需要用户手动设置该图片的文字大小TSize,默认值为55。X和Y为白色矩形框右下角坐标值。

5 系统界面展示

在用户界面部分,根据具体需求,需要制作一个快速核对标注的界面。并在界面设计上,做到简单明了与易于操作。本节主要是对系统的各个功能模块进行展示,主要包括项目管理、原图记录、导入JSON、统一标签名、批量生成标注图、核对标注图、导出JSON等七大功能模块。

5.1 项目管理模块

该模块主要是管理不同项目的LabelMe数据集,模块界面见图4。用户进行项目管理界面后,输入项目英文名和中文名,点击创建目录,即可生成以项目名称为名的项目文件夹,其中存放有图片集、标注集、修改、删除和掩码等五个文件夹,用户需要把原图放到image文件夹中,标注文件放到JSON文件夹中。该模块作为该系统的基础模块,主要用来管理不同项目的LabelMe数据集,使其相互独立。该模块的主要功能是为用户生成存放【原图】和【标注】的空文件夹,同时生成数据集的【修改】、【删除】、【掩码】图的空文件夹。【修改】文件夹是用户核对标注后,若有标注有问题,可将图片状态改为有问题,最后导出有问题JSON文件,系统会将所有有问题图片的标注文件和原图拷贝到【修改】文件夹,方便用户修数据集使用。

【删除】文件夹则是若该图片不可用,可将图片状态改为需删除,系统会将所有有问题图片的标注文件和原图移动到【修改】文件夹,并将数据库中的数据清除,方便用户最后导出JSON文件。

【掩码】文件夹为用户核对前,系统通过批量生成标掩码图,方便用户快速核对标注。需要注意的是,在最后导出核对后的标注集时,系统会覆盖【标注】文件夹的JSON标注文件。

5.2 原图记录模块

该模块主要是在数据库中记录图片路径及标注的状态,模块界面见图5。

用户进入原图记录界面后,需要先将原图集放入【原图】文件夹,再选择项目并提交,待进度条达到100%后,提示已完成即可完成图片记录工作。

5.3 导入JSON模块

该模块主要用来导入标注集到数据库中,一个标签名对应一条记录,图片表与标签表为一对多关系,模块界面与图5相似,下拉框内容不同。

用户进入导入JSON界面后,需要先将标注集放入【标注】文件夹,再选择项目并提交,待进度条达到100%后,提示已完成即可完成标注集导入工作。

在核对标注环节中若有图片与标注无法对应,需要重新导入修改后的标注集,用户选择“重新导入需修改JSON”选项并提交,系统会将状态为需修改的标签数据从数据库中清除,并将修改后的标注数据重新导入到数据库中。待进度条达到100%后,提示已完成即可。

5.4 标签设置模块

该模块主要用来统一标签名英文名和设置标签属性。在导入JSON文件时会一同生成汇总表,相同英文名标签只生成一条记录,汇总表和标签表也是一对多关系,模块界面见图6。

用户进入导入JSON界面后,可设置标签的序号、中文名、颜色、字体位置和是否导出,并通过预览检查设置情况。若修改标签英文名与其他标签英文名相同,则系统会合并标签。标签的排序号则会按照从小到大的顺序排序,方便用户将相同类型标签放到一起,同时在生成掩码图时按照序号顺序进行绘制。标签的是否导出指的是生成掩码图和最后导出JSON文件时,这些标签是否使用,不选择则忽略。标签中文名只在掩码图中使用,方便用户快速核对。标签的标注颜色是指生成掩码图时该标签的颜色。中文名相对位置是指标签中文名在掩码图中的位置。标签的颜色叠加或色差是指在生成掩码图时标签的颜色会进行叠加,而经过多层叠加后,颜色不好区分,因此一般只对最上层标签进行取色差操作。最后用户可以通过修改字体大小并预览观察设置效果。

5.5 批量生成掩码图模块

该模块主要是通过设置号的汇总表,通过OpenCV绘制掩码图,并将掩码图存入【掩码】文件夹,方便用户在核对时无需一一生成掩码图,加快核对速度。模块界面与图5相似,下拉框内容不同。

用户进入标批量生成掩码图界面后,因批量生成掩码图需要一定的时间,用户可以选择不同状态图片批量生成掩码图,选择完选项后并提交,待进度条达到100%后,提示已完成即可。

5.6 标注核对模块

该模块为核心模块,主要用来核对标注集,用户通过生成的掩码图核对标签名称与对应标注物是否一致,模块界面见图7。用户进入标注核对界面后,可选择核对不同状态的数据。在左侧掩码图中,若标注物与标签中文名一致,可点击左上角确认并切换该图片的状态。若标签名有问题,只需用右侧下拉菜单修改正确的标签名并预览,核对结束可点击确认并切换修改图片状态。

若图片与标注物无法对应,如图片与JSON文件未对应,可将图片状态设置为需修改状态并继续核对其他图片,所有图片核对完成后可通过导出需修改JSON文件,重新标注,再回到导入JSON模块,选择重新导入需修改JSON,并继续对需修改状态的图片核对即可。

若图片质量不好,无法成为数据集,可将图片状态修改为需删除状态。所有图片核对完成后可通过导出将需删除状态的图片和JSON移除即可。

若图片无法确定其状态,可将图片状态修改为有问题状态并继续核对,所有图片核对完成后重新对有问题状态的图片进行核对即可。

5.7 导出JSON模块

该模块为主要做导出所有核对后的数据、移除需删除状态的数据、拷贝需修改状态的文件和对核对后的数据中,同一张图片中有相同标签名的标签添加序号,模块界面与图5相似,下拉框内容不同。

用户进入标注核对界面后,若选择导出全部,则会将【标注】文件夹里的JSON文件全部按照核对后的数据进行覆盖,形成核对后的数据集。

若选择移除需删除状态的图片,系统则会删除数据库里需删除状态的数据,并将对应的图片和JSON文件移动到【删除】文件夹,防止误删操作。

若选择拷贝需修改状态的图片和JSON,系统则将需修改状态的图片和JSON文件拷贝到【修改】文件夹里,用户只需修改完后,将修改后的JSON文件放入【标注】文件夹里,替换掉原文件并重新在导入JSON模块导入即可。

若选择在标签名后面追加序号,系统则会在每张图片有相同标签名的标签后面追加序号,用于实例分割数据集区分同一张图中相同标签名物体为不同实例。

6 结束语

该系统采用Django框架、Python语言进行开发,由于Django和Python发展至今技术已十分成熟,在很大程度上提升了开发的效率。系统通过数据可视化技术帮助大部分做图像处理的研究人员,为提高图像数据集的质量方面做出一份贡献,为有相关需求的人员提供一定的帮助。

猜你喜欢

中文名文件夹标签
Fast Folders,让你的文件夹四通八达
加媒点评政客中文名
无惧标签 Alfa Romeo Giulia 200HP
不害怕撕掉标签的人,都活出了真正的漂亮
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
让衣柜摆脱“杂乱无章”的标签
不容忽视的空文件夹
科学家的标签