Detecção de Objetos em Imagens com Yolo
Olá
A ideia deste artigo é demonstrar como podemos implementar um sistema com detecção de objetos utilizando o Yolo, mais rápido que RCC e FAST-RCNN.
Para este laboratório, vamos criar um projeto windows forms no Visual Studio 2017.
Feito isso, vamos criar uma tela, será simples, contendo um elemento picturebox e dois buttons, lembre-se de ajustar o dimensionamento do picturebox para StretchImage.
Na ação do botão de Load, vamos adicionar o seguinte código para carregar a imagem.
var openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files|*jpg;*.png";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
picImage.Image = Image.FromFile(openFileDialog.FileName);
}
No botão detectar, adicione o seguinte código:
var configDetection = new ConfigurationDetector();
var config = configDetection.Detect();
var yolo = new YoloWrapper(config);
var memoryStream = new MemoryStream();
picImage.Image.Save(memoryStream,ImageFormat.Png);
var _items = yolo.Detect(memoryStream.ToArray()).ToList();
drawingPictureBox( picImage, _items);
E na mesma classe, vamos criar o método drawingPictureBox
void drawingPictureBox(PictureBox pictureBoxTorender,List<YoloItem> items)
{
var img = pictureBoxTorender.Image;
var font = new Font("Arial",15,FontStyle.Bold);
var brush = new SolidBrush(Color.Blue);
var graphics = Graphics.FromImage(img);
foreach (var item in items)
{
var x = item.X;
var y = item.Y;
var width = item.Width;
var heigth = item.Height;
var rect = new Rectangle(x, y, width, heigth);
var pen = new Pen(Color.Red,5);
var point = new Point(x,y);
graphics.DrawRectangle(pen,rect);
graphics.DrawString(item.Type,font,brush, point);
}
pictureBoxTorender.Image = img;
}
Precisamos configurar a plataforma de destino para 64 bits, pois não funciona em 32.
Agora vamos adicionar as bibliotecas ao projeto, abra o console nuget e procure por yolo, e adicione as bibliotecas indicadas na imagem abaixo.
Feito isso, basta executar o projeto e testar:
A aplicabilidade é ilimitada, mas é um ponto de partida para a ferramenta.
Obrigado pela visita!