Создать YOLO * текстовый файл в R: ограничивающая рамка не совпадает - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы создать ограничивающий прямоугольник в формате * txt в R для будущего обучения YOLO. Я хотел бы использовать изображение jpg с одним подарком эллипса, который был создан в пакете ggplot2. В моем примере:

#Packages
library(ggplot2)
library(ggforce)
library(raster)

#Create a ellipse using ggplot2
ell.sim<-ggplot() +
  geom_ellipse(aes(x0 = 200, y0 = 200, a = 150, b = 50, angle = 0), fill="black") +
  coord_fixed(xlim=c(0,1000),ylim=c(0,1000)) + 
  scale_y_continuous(expand = c(0, 0)) +scale_x_continuous(expand = c(0, 0))

ell.sim2 <- ell.sim + theme_void()
plot(ell.sim2)

#Save in JPG format with 100 DPI 
ggsave(
  filename="ellipse_test.jpg",
  plot = ell.sim2,
  width = 10,
  height = 10,
  dpi = 100) 

#Extract the ellipse limits for the bounding boxes creation
ell.sim.coords <- ggplot_build(ell.sim2)

Создать YOLO * текстовый файл с ограничивающими прямоугольниками

<object-class> <x> <y> <width> <height>

<class_number> (<absolute_x> / <image_width>) (<absolute_y> / <image_height>) (<absolute_width> / <image_width>) (<absolute_height> / <image_height>)

#absolute_x 
img <- stack(paste0("ellipse_test.jpg"))
x = (max(ell.sim.coords$data[[1]]$x)-min(ell.sim.coords$data[[1]]$x))/2
#absolute_y 
y = (max(ell.sim.coords$data[[1]]$y)-min(ell.sim.coords$data[[1]]$y))/2
#absolute_height 
nrow(img)
#absolute_width 
ncol(img)

Creeate YOLO * txt

class_number<-0
absolute_x_image_width<-x/ncol(img)
absolute_y_image_width<-y/nrow(img)
absolute_width_image_width<-(max(ell.sim.coords$data[[1]]$x)-min(ell.sim.coords$data[[1]]$x))/ncol(img)
absolute_height_image_height<-(max(ell.sim.coords$data[[1]]$y)-min(ell.sim.coords$data[[1]]$y))/nrow(img)
bb<-data.frame(class_number,absolute_x_image_width,absolute_y_image_width,absolute_width_image_width,absolute_height_image_height)
write.table(bb, file = paste0("ellipse_test.txt"), row.names = FALSE, col.names = FALSE)
#

#Open *txt file for look <class_number> (<absolute_x> / <image_width>) (<absolute_y> / <image_height>) (<absolute_width> / <image_width>) (<absolute_height> / <image_height>)

В 10 * 10 pi c есть объект [x, y, w, h] = [200 200 150 150] 0

read.table("ellipse_test.txt",h=F)
0 0.15625 0.05208333 0.3125 0.1041667

Follow yolo, нормализованное расположение к [0.15625, 0.05208333, 0.3125, 0.3125]

Для тестирования созданного файла * txt и созданного jpg я использую программное обеспечение labelImg, а эллипс и ограничивающий прямоугольник не совпадают в image:

labelImg

И labelImg дает мне правильные ограничивающие рамки, что-то вроде:

0 0.200000 0.800000 0.300000 0.100000

Пожалуйста, какие-либо типы для выполнения этой операции в R?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...