如何将Darknet标签文件转换为常规的x,y,w,h?

时间:2019-09-03 02:46:01

标签: javascript darknet

很抱歉在这里问这个问题,但是我已经待了好几天了,所以我不知道要使用什么公式。我希望有人知道我能做什么,谢谢!

因此,我正在尝试制作用于Darknet的GUI工具,但前面显示的小方块位置错误。

image

图片尺寸:1024 x 683 标签文件中的注释行:0 0.6681250000000001 0.510788 0.09750000000000003 0.15103200000000006

我正在尝试像这样获得x,y,w,h

    var convertDarknetImageLabelsToMatrices = function(loadedImage){
        // loadedImage = {
        //     annotation: "0 0.6681250000000001 0.510788 0.09750000000000003 0.15103200000000006",
        //     dimensions: {
        //         height: 683,
        //         width: 1024
        //     }
        // }
            var width = loadedImage.dimensions.width
            var height = loadedImage.dimensions.height
            var matrices = []
            var labels = loadedImage.annotation.split('\n')
            labels.forEach(function(label){
                if(!label)return
                var lineParts = label.split(' ')
                var classNumber = lineParts[0]
                var x = lineParts[1] * width / 2
                var y = lineParts[2] * height / 2
                var w = lineParts[3] * width
                var h = lineParts[4] * height
                matrices.push({
                    classNumber: classNumber,
                    tag: loadedImage.className,
                    x: x,
                    y: y,
                    w: w,
                    h: h,
                    imageWidth: width,
                    imageHeight: height
                })
            })
            return matrices
    }

解析部分是

                var x = lineParts[1] * width / 2
                var y = lineParts[2] * height / 2
                var w = lineParts[3] * width
                var h = lineParts[4] * height

我添加了/2,因为它看起来更近了。在某些图像上,它在单轴上几乎是精确的,例如X会对齐但Y会偏离。我试图计算出一个静态公式,但每次打开另一张图像时,它总是会朝其他方向关闭。

培训本身就很好,我稍后不能在用户界面中编辑/查看框:(

谢谢!如果您需要更多信息,请告诉我!

1 个答案:

答案 0 :(得分:0)

感谢所有查看并考虑回答的人。我只是想通了!这是我需要用于解析的东西。

                var w = lineParts[3] * width
                var h = lineParts[4] * height
                var x = (lineParts[1] * width) - w / 2
                var y = (lineParts[2] * height) - h / 2