Пример #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());
            }
        }
Пример #2
0
        public static List <(string ImageFilename, List <(string Label, float Score)> TagList)> GetObjectList(string imagesFolder, string modelFilePath)
        {
            List <(string ImageFilename, List <(string Label, float Score)> TagList)> result = new List <(string ImageFilename, List <(string Label, float Score)> TagList)>();

            MLContext mlContext = new MLContext();

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

            var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);

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

            YoloOutputParser parser = new YoloOutputParser();

            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);

                result.Add((imageFileName, ExtractDetectedObjects(detectedObjects)));
            }

            return(result);
        }
Пример #3
0
        public static IList <BoundingBox> ObtainBoundingBoxes(string base64Image)
        {
            var opencvImage = Image.ConvertFromBase64ToMat(base64Image);
            var tensor      = new DenseTensor <float>(new int[] { channels, opencvImage.Height, opencvImage.Width });

            using (var mat = new MatOfByte3(opencvImage))
            {
                var indexer = mat.GetIndexer();
                for (int y = 0; y < opencvImage.Height; y++)
                {
                    for (int x = 0; x < opencvImage.Width; x++)
                    {
                        Vec3b color = indexer[y, x];
                        tensor[0, y, x] = (float)color.Item2;
                        tensor[1, y, x] = (float)color.Item1;
                        tensor[2, y, x] = (float)color.Item0;
                    }
                }
            }

            var transform  = tensor.Reshape(new ReadOnlySpan <int>(new[] { channels *opencvImage.Height *opencvImage.Width }));
            var yoloParser = new YoloOutputParser();
            var yoloModel  = YoloModel.Instance;
            var results    = yoloModel.Evaluate(new[] { transform });

            return(yoloParser.ParseOutputs(results.First().ToArray()));
        }
Пример #4
0
        public IDictionary <string, IList <YoloBoundingBox> > DetectObjectsFromImages(List <string> imageFilePaths,
                                                                                      string uploadFolderPath, string outputFolderPath)
        {
            MLContext mlContext = new MLContext();
            IDictionary <string, IList <YoloBoundingBox> > detectedObjectsDict = new Dictionary <string, IList <YoloBoundingBox> >();

            try
            {
                IEnumerable <ImageNetData> images = ImageNetData.ReadFromFiles(imageFilePaths);
                IDataView imageDataView           = mlContext.Data.LoadFromEnumerable(images);
                var       modelScorer             = new OnnxModelScorer(this.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, .7F));

                for (var i = 0; i < images.Count(); i++)
                {
                    string imageFileName = images.ElementAt(i).Label;
                    string imageFilePath = images.ElementAt(i).ImagePath;
                    IList <YoloBoundingBox> detectedObjects = boundingBoxes.ElementAt(i);
                    detectedObjectsDict.Add(imageFilePath, detectedObjects);
                    DrawBoundingBox(imageFilePath, outputFolderPath, imageFileName, detectedObjects);
                }

                return(detectedObjectsDict);
            }
            catch
            {
                throw;
            }
        }
Пример #5
0
        public JsonResult CheckImage()
        {
            string isPersonOnImage = "no";

            var file          = Request.Files[0];
            var currentPath   = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
            var modelFilePath = currentPath + @"\Content\Model\TinyYolo2_model.onnx";
            //var modelFilePath = @"C:\Users\Ragnus\Desktop\120819\praca\Thesis\Thesis\Content\Model\TinyYolo2_model.onnx";

            var sourceImage = Image.FromStream(file.InputStream);
            var fileExt     = Path.GetExtension(file.FileName);
            var filename    = Guid.NewGuid() + fileExt; // Unikalny identyfikator + rozszerzenie

            var outputFolder = currentPath + @"\Content\ImageToReturn\";

            //var outputFolder = @"C:\Users\Ragnus\Desktop\120819\praca\Thesis\Thesis\Content\ImageToReturn\";
            var path = Path.Combine(Server.MapPath(AppConfig.ImagesUserFolder), filename);

            sourceImage.Save(path);

            MLContext mlContext = new MLContext();
            IEnumerable <ImageNetData> images   = ImageNetData.ReadFrom1File(path);
            IDataView             imageDataView = mlContext.Data.LoadFromEnumerable(images);
            var                   modelScorer   = new OnnxModelScorer(path, modelFilePath, mlContext);
            IEnumerable <float[]> probabilities = modelScorer.Score(imageDataView);
            YoloOutputParser      parser        = new YoloOutputParser();

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

            // 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);

                if (detectedObjects.Count > 0 && detectedObjects[0].Label == "person")
                {
                    isPersonOnImage = "yes";
                }
                DrawBoundingBox(path, outputFolder, imageFileName, detectedObjects);

                LogDetectedObjects(imageFileName, detectedObjects);
            }

            var img = Image.FromFile(outputFolder + filename);

            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();
            System.IO.File.Delete(path);

            img.Dispose();
            System.IO.File.Delete(outputFolder + filename);
            return(Json(new { isPerson = isPersonOnImage }
                        , JsonRequestBehavior.AllowGet));
        }
Пример #6
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();
        }
Пример #7
0
        public string Detect()
        {
            List <DetectionResult> result = new List <DetectionResult>();
            // 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);

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

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

                // 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);

                    DetectionResult detectionResult = new DetectionResult(imageFileName);

                    foreach (var detObject in detectedObjects)
                    {
                        detectionResult.DetectedObjects.Add(new DetectedObjects(detObject.Label, detObject.Confidence));
                    }

                    LogDetectedObjects(imageFileName, detectedObjects);
                    result.Add(detectionResult);
                }
                return(JsonConvert.SerializeObject(result));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }
Пример #8
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            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");

            //Create the Machine Learning context
            MLContext mlContext = new MLContext();

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

                //Score the model
                var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);

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

                //Post-processing - understanding the results
                YoloOutputParser parser = new YoloOutputParser();

                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();
        }
Пример #9
0
        public List <List <Predict> > Pipe(string imgPath, IWebHostEnvironment _env)
        {
            string assetsPath    = GetAbsolutePath("assets");
            var    modelFilePath = Path.Combine(assetsPath, "Model", "Model.onnx");
            var    absolutePath  = Path.Combine(_env.WebRootPath, "assets", imgPath);
            var    imagesFolder  = Path.Combine(assetsPath, "images");
            var    outputFolder  = Path.Combine(assetsPath, "images", "output");

            var predicted = new List <List <Predict> >();

            MLContext mlContext = new MLContext();

            try
            {
                ImageNetData[] img = new ImageNetData[] { new ImageNetData {
                                                              ImagePath = absolutePath, Label = imgPath
                                                          } };
                IEnumerable <ImageNetData> images = ImageNetData.ReadFromFile(imagesFolder);
                IDataView imageDataView           = mlContext.Data.LoadFromEnumerable(img);

                var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);

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

                YoloOutputParser parser = new YoloOutputParser();

                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);
                    predicted.Add(LogDetectedObjects(imageFileName, detectedObjects));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine("========= End of Process..Hit any Key ========");
            //Console.ReadLine();

            return(predicted);
        }
        public List <string> GenerateAnalysis(string guidName)
        {
            List <string> stringsToReturn = new List <string>();

            var    assetsRelativePath = @"../../../../DemoMLNet.Task.ObjectDetection.Console/assets";
            string assetsPath         = ProgramService.GetAbsolutePath(assetsRelativePath);
            var    modelFilePath      = Path.Combine(assetsPath, "Model", "TinyYolo2_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);

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

                YoloOutputParser parser = new YoloOutputParser();

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

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

                        ProgramService.DrawBoundingBox(imagesFolder, outputFolder, imageFileName, detectedObjects);

                        stringsToReturn = ProgramService.LogDetectedObjects(imageFileName, detectedObjects);
                    }
                    //Console.WriteLine("========= End of Process..Hit any Key ========");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            return(stringsToReturn);
        }
Пример #11
0
        static void Main(string[] args)
        {
            try
            {
                var relativePath = @"../../../assets";
                var filehelper   = new FileHelper(relativePath);
                var images       = ImageNetData.ReadFromFile(filehelper.ImagesFolder);

                var mlContext = new MLContext();

                // Загруэаем данные
                var imageDataView = mlContext.Data.LoadFromEnumerable(images);

                // Создаем экземпляр OnnxModelScorer и используем его для оценки загруженных данных
                var modelScorer   = new OnnxModelScorer(filehelper.ImagesFolder, filehelper.ModelFilePath, mlContext);
                var probabilities = modelScorer.Score(imageDataView);

                // Создаем экземпляр YoloOutputParser и используем его для обработки выходных данных модели
                YoloOutputParser parser = new YoloOutputParser();

                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;
                    var    detectedObjects = boundingBoxes.ElementAt(i);
                    var    imageWithLabels = ImageHelper.DrawBoundingBox(filehelper.ImagesFolder, filehelper.OutputFolder, imageFileName, detectedObjects);

                    if (!Directory.Exists(filehelper.OutputFolder))
                    {
                        Directory.CreateDirectory(filehelper.OutputFolder);
                    }

                    imageWithLabels.Save(Path.Combine(filehelper.OutputFolder, imageFileName));

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

            Console.WriteLine("========= End of Process..Hit any Key ========");
            Console.ReadLine();
        }
Пример #12
0
        public byte[] Classify(string imagePath, string imageName)
        {
            var modelFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..", "assets", "Model", "TinyYolo2_model.onnx");

            MLContext mlContext = new MLContext();

            try
            {
                // Load Data
                ImageNetData data = new ImageNetData()
                {
                    ImagePath = Path.Combine(imagePath, imageName),
                    Label     = imageName
                };
                IEnumerable <ImageNetData> image = new List <ImageNetData>()
                {
                    data
                };
                IDataView imageDataView = mlContext.Data.LoadFromEnumerable(image);

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

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

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

                var boundingBoxes =
                    probabilities
                    .Select(probability => parser.ParseOutputs(probability))
                    .Select(boxes => parser.FilterBoundingBoxes(boxes, 5, .5F)).First();

                // Draw bounding boxes for detected objects in each of the images
                IList <YoloBoundingBox> detectedObjects = boundingBoxes;

                return(DrawBoundingBox(imagePath, imageName, detectedObjects));
            }
            catch (Exception)
            {
                return(null); //TODO
            }
        }
        internal static void Start()
        {
            //var assetsRelativePath = @"../../../assets";
            //string assetsPath = GetAbsolutePath(assetsRelativePath);
            var modelFilePath = Path.Combine(projectDirectory, "Model", "TinyYolo2_model.onnx");
            var imagesFolder  = Path.Combine(projectDirectory, "images");
            var outputFolder  = Path.Combine(projectDirectory, "images", "output");

            MLContext mlContext = new MLContext();

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

                //Затем создайте экземпляр OnnxModelScorer и используйте его для оценки загруженных данных.
                var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);
                // Use model to score data
                IEnumerable <float[]> probabilities = modelScorer.Score(imageDataView);

                /*
                 * Теперь пора выполнить шаг постобработки. Создайте экземпляр YoloOutputParser и используйте его для обработки выходных данных модели.
                 */
                YoloOutputParser parser = new YoloOutputParser();

                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());
            }
        }
Пример #14
0
        public void TestYoloOutputParserCorrectlyNamesCat()
        {
            var cat_jpg = File.ReadAllBytes("assets/001-cat.jpg");

            var result = scorer.Score(new[] { cat_jpg });

            Assert.NotNull(result);

            YoloOutputParser parser = new YoloOutputParser();
            var boundingBoxes       =
                result
                .Select(probability => parser.ParseOutputs(probability))
                .Select(boxes => parser.FilterBoundingBoxes(boxes, 5, .5F));

            Assert.NotNull(boundingBoxes);
            var first_setOfBoxes = boundingBoxes.First();

            Assert.NotNull(first_setOfBoxes);
            Assert.AreEqual(first_setOfBoxes[0].Label, "cat");
        }
Пример #15
0
        public byte[] Predict(string fileName)
        {
            var imageDataView = MlContext.Data.LoadFromEnumerable(new List <ImageDataInputItem> {
                new ImageDataInputItem {
                    ImagePath = fileName
                }
            });

            var scoredData = _model.Transform(imageDataView);

            var probabilities = scoredData.GetColumn <float[]>(TinyYoloModelSettings.ModelOutput);

            var parser = new YoloOutputParser();

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

            return(DrawBoundingBox(fileName, boundingBoxes.FirstOrDefault()));
        }
Пример #16
0
        static void Main(string[] args)
        {
            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");

            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);
                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("Does it work? ... Hit Any Key ======");
            Console.ReadLine();
        }
Пример #17
0
        public CameraFrameProcessingResult Process(byte[] image)
        {
            if (image == null || image.Length == 0)
            {
                return(null);
            }

            try
            {
                // This is a list of float arrays, one per image.
                // We are set up to only process 1 image at a time.
                IEnumerable <float[]> probabilities = scorer.Score(new[] { image });

                // This is the minimum confidence we consider returning for any bounding box.
                var thresholdConfidence = 0.5f;

                YoloOutputParser parser = new YoloOutputParser();
                var boundingBoxSets     =
                    probabilities
                    .Select(probability => parser.ParseOutputs(probability))
                    .Select(boxes => parser.FilterBoundingBoxes(boxes, 10, thresholdConfidence));

                FramesProcessed++;

                return(new CameraFrameProcessingResult()
                {
                    Processor = this,               // the processor that generated this result.
                    Image = image,                  // the original image for reference.
                    Boxes = boundingBoxSets.First() // bounding boxes for the first (only) image.
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }
Пример #18
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;
        }
Пример #19
0
 public RecognitionStage(ObjectRecognizer objectRecognizer, YoloOutputParser outputParser)
 {
     _objectRecognizer = objectRecognizer ?? throw new ArgumentNullException(nameof(objectRecognizer));
     _outputParser     = outputParser ?? throw new ArgumentNullException(nameof(outputParser));
 }