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