Search code examples
object-detectionyolodarknet

convert a .csv file to yolo darknet format


I have a few annotations that is originally in .csv format. I would need to convert it to yolo darknet format inorder to train my model with yolov4.

my .csv file : enter image description here

YOLO format is : object-class x y width height

where, object_class, widht, height is know from my .csv format. But finding x,y is confusing .Note that x and y are center of rectangle (are not top-left corner).

Any help would be appreciated :)


Solution

  • You can use this function to convert bounding boxes to the yolo format. Of course you will need to write some code to read the csv. Just use this function as a template for your needs.

    This function was extracted from the labelimg app: https://github.com/tzutalin/labelImg/blob/master/libs/yolo_io.py

        def BndBox2YoloLine(self, box, classList=[]):
            xmin = box['xmin']
            xmax = box['xmax']
            ymin = box['ymin']
            ymax = box['ymax']
    
            xcen = float((xmin + xmax)) / 2 / self.imgSize[1]
            ycen = float((ymin + ymax)) / 2 / self.imgSize[0]
    
            w = float((xmax - xmin)) / self.imgSize[1]
            h = float((ymax - ymin)) / self.imgSize[0]
    
            # PR387
            boxName = box['name']
            if boxName not in classList:
                classList.append(boxName)
    
            classIndex = classList.index(boxName)
    
            return classIndex, xcen, ycen, w, h