Prefacio
Recientemente, he estado haciendo cálculos en tiempo real. Inicialmente utilicé la segmentación semántica unet y descubrí que su inferencia es muy lenta en la GPU a nivel de servidor, pero la precisión no es mala. Sin embargo, lo que perseguimos es el rendimiento en tiempo real, por lo que Todavía usamos la detección de objetivos. Finalmente seleccioné yolov5
Como todos sabemos sobre el conjunto de datos yolov5, necesitamos conocer cada cuadro de anclaje, lo que requiere imagen y texto, y mi conjunto de datos de segmentación semántica tiene un archivo json, como se muestra en la figura #!/usr/bin/
python
8
anotación carpeta a continuación A continuación se muestra cómo
se ven algunos archivos en formato json en formato json:
Aquí solo hay una categoría, los puntos son las coordenadas de algunos cuadros marcados en la imagen original (no marcados con labelme), por ejemplo, hay un agujero de ratón en mi tierra, necesito marcarlo para generarlo. archivo en formato json
import argparse
import json
import os
import os.path as osp
import base64
import warnings
import PIL.Image
import yaml
from labelme import utils
def main():
json_file = "D:/sd/裁切/8标注"
# freedom
list_path = os.listdir(json_file)
print('freedom =', json_file)
for i in range(0, len(list_path)):
path = os.path.join(json_file, list_path[i])
if os.path.isfile(path):
data = json.load(open(path))
img = utils.img_b64_to_arr(data['imageData'])
lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
lbl_viz = utils.draw_label(lbl, img, captions)
# out_dir = osp.basename(path).replace('.', '_')
out_dir = osp.basename(path).split('.json')[0]
save_file_name = out_dir
# out_dir = osp.join(osp.dirname(path), out_dir)
if not osp.exists(json_file + 'mask'):
os.mkdir(json_file + 'mask')
maskdir = json_file + 'mask'
if not osp.exists(json_file + 'mask_viz'):
os.mkdir(json_file + 'mask_viz')
maskvizdir = json_file + 'mask_viz'
out_dir1 = maskdir
# if not osp.exists(out_dir1):
# os.mkdir(out_dir1)
# PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png')
PIL.Image.fromarray(lbl).save(out_dir1 + '/' + save_file_name + '.png')
PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' + save_file_name +
'_label_viz.png')
with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f:
for lbl_name in lbl_names:
f.write(lbl_name + '\n')
warnings.warn('info.yaml is being replaced by label_names.txt')
info = dict(label_names=lbl_names)
with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
yaml.safe_dump(info, f, default_flow_style=False)
print('Saved to: %s' % out_dir1)
if __name__ == '__main__':
# base64path = argv[1]
main()
Resultado de la conversión:
Generamos un archivo txt correspondiente a la imagen,
como 100_0001_0007_1_4.jpg, que corresponde al txt en la imagen de arriba, por lo que nuestro método le evita usar labelme para etiquetar uno por uno (si etiqueta uno por uno, se estima (que tomará un año detectar tantos objetos), por lo que este script en Python sigue siendo muy exitoso.
Representación de txt:
la primera es la categoría, porque solo hay una categoría, y las siguientes son los valores de cada cuadro de anclaje.
gracias a todos