labelme视频标注(detectron2偷懒)全程操作

1. 用ffmpeg将视频分割成图片

ffmpeg -i video_name.mp4 %04d.png

参考网址:https://blog.csdn.net/weixin_43905212/article/details/105453796

截取视频中特定部分:

ffmpeg  -i ./plutopr.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 ./cutout1.mp4 -y

参考网址:https://blog.csdn.net/bowangting/article/details/105122845/

ffmpeg安装教程:https://www.jianshu.com/p/2b609afb9800
其它操作(加水印等):https://blog.csdn.net/gui694278452/article/details/90633114
https://www.jianshu.com/p/838aa600e07f

2.用detectron2对图片进行初步标注

由于windows系统安装detectron2问题过多,没有安装成功,所以在colab上使用detectron2,网址:https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=dq9GY37ml1kr

训练好模型后,插入代码块:

r = range(1,51)
for i in r:
  im=cv2.imread('./'+str(i)+'.png')
  cfg = get_cfg()
  cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
  cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
  cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
  predictor = DefaultPredictor(cfg)
  outputs = predictor(im)
  #v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
  #out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
  #cv2_imshow(out.get_image()[:, :, ::-1])
  filename= str(i)+'.json'
  with open(filename,'w') as f_obj:
    json.dump(outputs["instances"].pred_boxes.tensor.cpu().numpy().tolist(), f_obj)

将1到50张图片上传到colab端,运行代码后生成对应json文件。

!zip -r aa.zip ./*json

将生成的json文件进行打包后下载。

!rm -rf ./*

清除所有文件。
重复以上步骤至所有图片标注完成。

3.将下载的json文件按labelme标注格式进行修改

第二步下载的json文件只含有坐标点,需按照labelme生成的标准json文件格式进行修改后才能被labelme打开。

import numpy
import json
#打开下载的json文件,numbers为加载的数据
for x in range(1,101):
  with open('4-json(2)/'+str(x)+'.json') as f_obj:
    numbers =json.load(f_obj)
#labelme的标准json文件格式是字典,将a_1字典写好
  a_1 = {}    
  a_1['version'] = '4.5.6'    
  a_1['flags'] = {}    
  a_1['imagePath'] = "4-1\\"+str(x)+".png"    
  a_1['imageData'] = None    
  a_1['imageHeight'] = 1080    
  a_1['imageWidth'] = 1920    
  a_1['shapes'] = []

  for i in range(1,len(numbers)):        
    new_shape = {'label': 'sheep_'+str(i),'points':[numbers[i-1][:2], numbers[i-1][2:4]],'group_id': None, 'shape_type':'rectangle','flags':{}}        
    a_1['shapes'].append(new_shape)
#将a_1字典写入新json文件
  filename = '4_2_'+str(x)+'.json'    
  with open(filename, 'w') as file_object:        
    json.dump(a_1, file_object)

4.手动修改完善

第三步写好的json文件由于缺少原始图片数据imagedata,所以用labelme打开时,需要将原始图片文件夹放入json文件夹后即可用labelme正常打开,人工修改完善后,保存的json文件会含有imagedata,不需要原图片也可以单独打开。

5.将json文件批量转成label图片

参考步骤:https://blog.csdn.net/weixin_41319671/article/details/82684334?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159792816319724842918293%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159792816319724842918293&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-2-82684334.first_rank_v2_rank_v25&utm_term=%E6%89%B9%E9%87%8F%E5%B0%86.json%E6%96%87%E4%BB%B6%E8%BD%AC%E6%8D%A2%E6%88%90img.png&spm=1018.2118.3001.4187

异常问题解决方法:

(1)出现UnicodeDecodeError: ‘gbk’ codec can’t decode byte … in position 2: illegal multibyte sequence:
将json文件夹和生成图片的文件夹都放到cli文件夹下。

(2)出现AttributeError: module ‘labelme.utils’ has no attribute 'draw_label:
https://blog.csdn.net/zheshigeren/article/details/104471684/

6.将图片合成为视频

ffmpeg -f image2 -i %*.png out.mp4

参考网址:
https://blog.csdn.net/weixin_43905212/article/details/105453796
https://www.cnblogs.com/wangyarui/p/11200551.html

你可能感兴趣的:(python,机器学习)