Beispiel #1
0
        static void Main(string[] args)
        {
            var mL = new MLContext();

            try
            {
                IEnumerable <ImageNetData> images = ImageNetData.ReadFromFile(imagesFolder);
                IDataView imageDataView           = mL.Data.LoadFromEnumerable(images);

                var modelScorer = new OnnxModelScorer(imagesFolder, modelPath, mL);

                IEnumerable <float[]> probabilities = modelScorer.Score(imageDataView);

                YoloOutputParser parser = new YoloOutputParser();

                var boundingBoxes = probabilities
                                    .Select(x => parser.ParseOutputs(x))
                                    .Select(x => parser.FilterBoundingBoxes(x, 5, .5f));

                for (var i = 0; i < images.Count(); i++)
                {
                    string imageFileName = images.ElementAt(i).Label;
                    IList <YoloBoundingBox> detectedObjects = boundingBoxes.ElementAt(i);

                    DrawBoundingBox(imagesFolder, outputFolder, imageFileName, detectedObjects);
                    LogDetectedObjects(imageFileName, detectedObjects);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Beispiel #2
0
        public static void Main()
        {
            var    assetsRelativePath = @"../../../assets";
            string assetsPath         = GetAbsolutePath(assetsRelativePath);
            var    modelFilePath      = Path.Combine(assetsPath, "Model", "TinyYolo2_model.onnx");
            var    imagesFolder       = Path.Combine(assetsPath, "images");
            var    outputFolder       = Path.Combine(assetsPath, "images", "output");

            // Initialize MLContext
            MLContext mlContext = new MLContext();

            try
            {
                // Load Data
                IEnumerable <ImageNetData> images = ImageNetData.ReadFromFile(imagesFolder);
                IDataView imageDataView           = mlContext.Data.LoadFromEnumerable(images);

                // Create instance of model scorer
                var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);

                // Use model to score data
                IEnumerable <float[]> probabilities = modelScorer.Score(imageDataView)
                                                      .ToList(); // remove!!!

                // Post-process model output
                YoloOutputParser parser = new YoloOutputParser();

                var boundingBoxes =
                    probabilities
                    .Select(probability => parser.ParseOutputs(probability))
                    .Select(boxes => parser.FilterBoundingBoxes(boxes, 5, .5F))
                    .ToList(); // remove!!!

                // Draw bounding boxes for detected objects in each of the images
                for (var i = 0; i < images.Count(); i++)
                {
                    string imageFileName = images.ElementAt(i).Label;
                    IList <YoloBoundingBox> detectedObjects = boundingBoxes.ElementAt(i);

                    DrawBoundingBox(imagesFolder, outputFolder, imageFileName, detectedObjects);

                    LogDetectedObjects(imageFileName, detectedObjects);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine("========= End of Process..Hit any Key ========");
            Console.ReadLine();
        }
Beispiel #3
0
        public static void Main()
        {
            var    assetsRelativePath = @"../../../assets";
            string assetsPath         = GetAbsolutePath(assetsRelativePath);
            var    modelFilePath      = Path.Combine(assetsPath, "Model", "TinyYolo2_model.onnx");
            var    imagesFolder       = Path.Combine(assetsPath, "images");

            try
            {
                var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath);
                modelScorer.Score();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("========= End of Process..Hit any Key ========");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            var    assetsRelativePath = @"../../../assets";
            string assetsPath         = GetAbsolutePath(assetsRelativePath);
            var    modelFilePath      = Path.Combine(assetsPath, "Model", "tiny_yolov2/Model.onnx");
            var    imagesFolder       = Path.Combine(assetsPath, "images");
            var    outputFolder       = Path.Combine(assetsPath, "images", "output");

            MLContext mlContext = new MLContext();

            try
            {
                IEnumerable <ImageNetData> images = ImageNetData.ReadFromFile(imagesFolder);
                IDataView imageDataView           = mlContext.Data.LoadFromEnumerable(images);
                var       modelScorer             = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);

                YoloOutputParser      parser        = new YoloOutputParser();
                IEnumerable <float[]> probabilities = modelScorer.Score(imageDataView); // Use model to score data
                var boundingBoxes =
                    probabilities
                    .Select(probability => parser.ParseOutputs(probability))
                    .Select(boxes => parser.FilterBoundingBoxes(boxes, 5, .5F));

                for (var i = 0; i < images.Count(); i++)
                {
                    string imageFileName = images.ElementAt(i).Label;
                    IList <YoloBoundingBox> detectedObjects = boundingBoxes.ElementAt(i);
                    DrawBoundingBox(imagesFolder, outputFolder, imageFileName, detectedObjects);
                    LogDetectedObjects(imageFileName, detectedObjects);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine("========= End of Process..Hit any Key ========");
            Console.ReadLine();
        }
Beispiel #5
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            // Frame image buffer
            Mat image = new Mat();

            _isRunning       = true;
            btnStart.Enabled = false;

            var mlContext = new MLContext();

            // Create instance of model scorer
            var modelScorer = new OnnxModelScorer(modelFilePath, mlContext);
            // Load model only once
            var model = modelScorer.LoadModel();

            while (_isRunning)
            {
                _capture.Read(image); // read frame from webcam

                if (image.Empty())
                {
                    break;
                }

                // Store frame as in-memory source for ML.NET
                ImageNetData[] inMemoryCollection = new ImageNetData[]
                {
                    new ImageNetData
                    {
                        InputImage = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image),
                        Label      = "",
                    }
                };
                var imageDataView = mlContext.Data.LoadFromEnumerable <ImageNetData>(inMemoryCollection);

                // Make another copy of the frame. We will use it to draw bounding boxes on it
                _mySharpImage = (Image)OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);

                // Use model to score data
                IEnumerable <float[]> probabilities = modelScorer.Score(model, imageDataView);

                // Post-process model output
                YoloOutputParser parser = new YoloOutputParser();

                var boundingBoxes =
                    probabilities
                    .Select(probability => parser.ParseOutputs(probability))
                    .Select(boxes => parser.FilterBoundingBoxes(boxes, 5, .5F));
                // Since we only have a single frame, it is OK to have i = 0. Otherwise we would need
                // to iterate through images.
                var i = 0;
                IList <YoloBoundingBox> detectedObjects = boundingBoxes.ElementAt(i);
                DrawBoundingBox(ref _mySharpImage, detectedObjects);

                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Image    = _mySharpImage;
                Cv2.WaitKey(1);

                _mySharpImage.Dispose();
                inMemoryCollection[0].InputImage.Dispose();
            }
            btnStart.Enabled = true;
        }