首页>>人工智能->巧借”haarcascade“快速完成数据集制作

巧借”haarcascade“快速完成数据集制作

时间:2023-11-29 本站 点击:4

前言

  在做CV识别或检测任务的时候,想必大家都曾为数据集发愁过,在这里我将介绍一个快捷方式,制作属于自己的的数据集

  此数据集我们以人脸为例子,为了区分带口罩和不带口罩的区别。我们需要的图像有两类,一类是不带口罩的人脸,另一类是带口罩的人脸。我在使用OpenCv模块的时候,发现有一个很好的模块:haarcascade_frontalface_alt2.xml,可以很好的检测到人脸;我这里将在它的基础上拓展制作属于自己的数据集。

摄像头采集制作

  PC机+摄像头+自己+demo ='数据集' 大家可以借鉴https://juejin.cn/post/7074838622725210148 实现人脸检测,在这个demo的基础上做一些改进。

   人脸检测已经具备了的话,我们现在需要在检测到人脸的基础上把人脸扣出来,摄像头是使用CV读取的,这里我们采用矩阵的裁剪,将人脸部分裁剪下来并存至指定位置。

  我们分别制作两份数据:带口罩和不带口罩,在摄像头下都可以顺利的裁剪出自己的人脸

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)        (p_image, face_coor) = format_image(frame)        if face_coor is not None:            # 获取人脸的坐标,并用矩形框出            [x, y, w, h] = face_coor            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)            x0 = x            y0 = y            x1 = x + w            y1 = y + h            crop_img = frame[y0:y1, x0:x1]  # x0,y0为裁剪区域左上坐标;x1,y1为裁剪区域右下坐标            img_name = uuid.uuid1()            cv2.imwrite('C:/Users/kiven/Desktop/do_img/faces/%s.jpg' % img_name, crop_img)  # save_path为保存路径        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)        c = cv2.waitKey(1) & 0xff        if c == 27:            capture.release()            break    capture.release()    cv2.destroyAllWindows()

文件夹读取制作

  大家或许没有摄像头或者不喜欢用自己的头像制作数据集,那么可以在网上爬取一些带口罩图像和不带口罩图像,定位模块同摄像头部分一样,在数据读取上有些许差异。可参考:

if __name__ == "__main__":    NewPersonImgPath = 'C:/Users/kiven/Desktop/Doimgs/score/images/val/'  #    NewPersonImgPathLine = os.listdir(NewPersonImgPath)  # 获取工程车辆文件夹    for NewPersonName in NewPersonImgPathLine:        NewPersonImage = Image.open(NewPersonImgPath + NewPersonName)        frame = cv2.cvtColor(numpy.asarray(NewPersonImage), cv2.COLOR_RGB2BGR)        (p_image, face_coor) = format_image(frame)        if face_coor is not None:            # 获取人脸的坐标,并用矩形框出            [x, y, w, h] = face_coor            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)            x0 = x            y0 = y            x1 = x + w            y1 = y + h            crop_img = frame[y0:y1, x0:x1]  # x0,y0为裁剪区域左上坐标;x1,y1为裁剪区域右下坐标            # crop_img = cv2.cvtColor(crop_img, cv2.COLOR_RGB2BGR)            crop_imgs = cv2.resize(crop_img, (50, 50), interpolation=cv2.INTER_CUBIC)            img_name = uuid.uuid1()            cv2.imwrite('C:/Users/kiven/Desktop/Doimgs/faces/%s.jpg' % img_name, crop_imgs)  # save_path为保存路径
原文:https://juejin.cn/post/7096792473002836004


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/AI/1225.html