定区域法快速实现数据集的制作

简介: 定区域法快速实现数据集的制作

前言


  无论是分类任务还是检测任务,数据集的制作一直是一个令人头疼的问题,数据集的制作既耗费掉大量的时间,又耗费了大量的精力。


   为解决这一难题,我将在这里以口罩识别(人脸戴口罩OR不带口罩)为例子,给大家分别讲解如何制作分类任务和目标检测的数据集制作



图像分类任务


   在这里我以目录式索引为例子(以文件夹名称作为图像的标签)给大家带来分类任务的数据集制作。


制作流程:


  1. 使用cv2.VideoCapture读取PC摄像头;


  1. 定义自己需要选择的区域,这里可以根据显示结果调节到人脸在摄像头定义的区域内(x,y,w,h);


  1. 复制原图进行区域裁剪;


  1. 对裁剪区域进行存储(uuid命名防止重复被覆盖);


  1. 使用cv2.rectangle进行定区域绘制,便于在显示视频画面的时候调整头部。



目标检测任务


   这里的话,就不像传统的分类任务那样简单了,毕竟这会是需记录目标在图像的图像中的位置的,在这里我们存储图像也将是一整张图像的,记录坐标区域也是根据BBOX法记录。在这里我们制作VOC数据集。



制作流程:


  1. 使用cv2.VideoCapture读取PC摄像头;


  1. 定义自己需要选择的区域,这里可以根据显示结果调节到人脸在摄像头定义的区域内;


  1. 复制原图,对原图进行存储到指定文件夹内图像命名SaveImgName = str(uuid.uuid1())


  1. 在存储图像文件夹内创建一个txt文件,txt文件命名为:SaveImgName


  1. txt 内部填写信息为:SaveImgName + 标签值 + x + y + (x+w) + (y+h) + '\n'


  1. 填写完信息并存储关闭txt文档(这里注意一下:一张图配一个txt方便后期txt文件转变xml文件)


  1. 使用cv2.rectangle进行定区域绘制,便于在显示视频画面的时候调整头部。


  1. 使用txt2xml将txt文件转为xml



展望


  在定区域内进行数据集的制作可以给我们带来极大的便利,但是他同样也有其局限性:无法完美适配所有的场景。


   对于采用定区域法制作数据集我们可以使用在佩戴口罩数据集上,还可以比如说是是否佩戴帽子和眼镜之类的,我们也可以应用在厂区出入口检测人或车。


  定区域也可以应用在识别的程序之中,我们划定区域,只对指定区域进行识别,大大降低识别的误差,提高识别率。




Demo附录


图像分类任务:

import uuid
import cv2
import time
def SaveFacesImage(Img, x, y, w, h):
    CopyImg = Img.copy()
    Getface = CopyImg[y:y + h, x:x + w]
    Getface = cv2.cvtColor(Getface, cv2.COLOR_BGR2RGB)
    SaveGetfacePath = './data/train/WithNoMask/'
    SaveGetfaceName = str(uuid.uuid1())
    cv2.imwrite(SaveGetfacePath + SaveGetfaceName + '.jpg', Getface)
if __name__ == '__main__':
    capture = cv2.VideoCapture(0)
    fps = 0.0
    while True:
        t1 = time.time()
        ref, frame = capture.read() # 读取某一帧
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 格式转变,BGRtoRGB
        face_coor = [250, 100, 230, 280]
        [x, y, w, h] = face_coor
        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)
        SaveFacesImage(frame, x, y, w, h)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        fps = (fps + (1. / (time.time() - t1))) / 2
        frame = cv2.putText(frame, "fps= %.2f" % (fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("video", frame)
        cv2.waitKey(1)
    capture.release()
    cv2.destroyAllWindows()

目标检测任务:

import uuid
import cv2
import time
def SaveFacesImage(Img, label, x, y, w, h):
    CopyImg = Img.copy()
    CopyImgRGB = cv2.cvtColor(CopyImg, cv2.COLOR_BGR2RGB)
    SaveGetfacePath = './ImageXml/mask/'
    SaveGetfaceName = str(uuid.uuid1())
    cv2.imwrite(SaveGetfacePath + SaveGetfaceName + '.jpg', CopyImgRGB)
    txtpath = '/home/kiven-yang/demo-facemask/ImageXml/mask/%s.txt' %SaveGetfaceName
    f = open(txtpath, 'a')
    datas = (str(SaveGetfaceName) + " " + str(label) + " " + str(x) + " " + str(y) + " " + str(x+w) + " " + str(y+h) + '\n')
    f.write(datas)
    f.close()
if __name__ == '__main__':
    capture = cv2.VideoCapture(0)
    fps = 0.0
    while True:
        t1 = time.time()
        ref, frame = capture.read() # 读取某一帧
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 格式转变,BGRtoRGB
        face_coor = [250, 100, 230, 280]
        [x, y, w, h] = face_coor
        SaveFacesImage(frame, 'face', x, y, w, h)
        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        fps = (fps + (1. / (time.time() - t1))) / 2
        frame = cv2.putText(frame, "fps= %.2f" % (fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("video", frame)
        cv2.waitKey(1)
    capture.release()
    cv2.destroyAllWindows()




相关文章
|
22天前
|
人工智能 搜索推荐
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
【2月更文挑战第17天】StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
27 2
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
|
22天前
|
编解码 数据可视化
R语言动态可视化:绘制历史全球平均温度的累积动态折线图动画gif视频图
R语言动态可视化:绘制历史全球平均温度的累积动态折线图动画gif视频图
|
22天前
GEE图表——趋势线图表的加载和展示包含纵坐标间隔的设定(以某区域年均降水总量为例)
GEE图表——趋势线图表的加载和展示包含纵坐标间隔的设定(以某区域年均降水总量为例)
40 0
|
11月前
|
定位技术
ArcGIS:(模型构建器)如何获取各个区域下不同地物的面积?
ArcGIS:(模型构建器)如何获取各个区域下不同地物的面积?
164 0
|
22天前
|
编解码 定位技术
ArcGIS中ArcMap绘制多框幅论文文献研究区域概况介绍示意图
ArcGIS中ArcMap绘制多框幅论文文献研究区域概况介绍示意图
|
22天前
|
存储 数据可视化
创建乐高版马赛克图
创建乐高版马赛克图
49 0
|
22天前
|
C++
[Halcon&定位] 解决Roi区域外的模板匹配成功
[Halcon&定位] 解决Roi区域外的模板匹配成功
77 0
|
8月前
3D孪生场景搭建:模型区域摆放
NSDT 3D孪生场景编辑器区域绘制功能详解。
141 0
3D孪生场景搭建:模型区域摆放
|
11月前
|
编解码
使用遮罩提取图像中感兴趣的区域
使用遮罩隔离感兴趣区域 (ROI) 来有效地处理被阻止的图像。 某些大图像源仅在图像的一小部分中具有有意义的数据。可以通过将处理限制为包含有意义数据的 ROI 来缩短总处理时间。使用掩码定义投资回报率。蒙版是一种逻辑图像,其中像素表示投资回报率。
84 1
|
前端开发 数据库 数据安全/隐私保护
全景图像展示标注网站项目
全景图像展示标注网站项目
95 0
全景图像展示标注网站项目