private void Check(GpuConfig gpuConfig) { var yoloWrapper = new YoloWrapper("yolov2-tiny-voc.cfg", "yolov2-tiny-voc.weights", "voc.names", gpuConfig); var files = Directory.GetFiles(@".\Images"); var retrys = 10; var sw = new Stopwatch(); foreach (var file in files) { var elapsed = 0.0; var fileInfo = new FileInfo(file); var imageData = File.ReadAllBytes(file); for (var i = 0; i < retrys; i++) { sw.Restart(); yoloWrapper.Detect(imageData); sw.Stop(); elapsed += sw.Elapsed.TotalMilliseconds; } var average = elapsed / retrys; Console.WriteLine($"{fileInfo.Name} {average}ms"); } yoloWrapper.Dispose(); }
private void Initialize(YoloConfiguration config) { try { if (this._yoloWrapper != null) { this._yoloWrapper.Dispose(); } var gpuConfig = new GpuConfig(); var useOnlyCpu = false; if (useOnlyCpu) { gpuConfig = null; } this._yoloWrapper = new YoloWrapper(config.ConfigFile, config.WeightsFile, config.NamesFile, gpuConfig); var action = new MethodInvoker(delegate() { var deviceName = this._yoloWrapper.GetGraphicDeviceName(gpuConfig); }); } catch (Exception exception) { MessageBox.Show($"{nameof(Initialize)} - {exception}", "Error Initialize", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Instantiates the model / gets the wrapper up and running /// </summary> public void WalkThisWay() { var gpuConfig = new GpuConfig(); try { this.yoloWrapper = new YoloWrapper(configurationFilename: this.modelDetailsCfg, weightsFilename: this.modelDetailsWeights, namesFilename: this.modelDetailsNames, gpuConfig: gpuConfig); Console.WriteLine(" GPU is ready to be used. Welcome to the fast lane!"); gpuAvailable = true; } catch { Console.WriteLine(" GPU is not able to be used. See documentation for details."); Console.WriteLine(" Running with CPU config instead..."); this.yoloWrapper = new YoloWrapper(configurationFilename: this.modelDetailsCfg, weightsFilename: this.modelDetailsWeights, namesFilename: this.modelDetailsNames, gpuConfig: null); gpuAvailable = false; } }
public void run() { detect = true; const int screenWidth = 1920; const int screenHeight = 1080; const int captureRegionWidth = 1200; const int captureRegionHeight = 675; Console.WriteLine("Starting YOLO object detection ..."); var gpuConfig = new GpuConfig(); var yoloConfig = new YoloConfiguration("yolov4-valorant.cfg", "yolov4-valorant_last.weights", "valorant.names"); using (var yoloWrapper = new YoloWrapper(yoloConfig, gpuConfig)) { Console.WriteLine("Starting detection loop ..."); Stopwatch watch = new Stopwatch(); Rectangle capRegion = new Rectangle((screenWidth / 2) - (captureRegionWidth / 2), (screenHeight / 2) - (captureRegionHeight / 2), captureRegionWidth, 675); while (detect) { watch.Restart(); Bitmap bmp = cap.CaptureRegion(capRegion); byte[] jpgBytes = (byte[]) new ImageConverter().ConvertTo(bmp, typeof(byte[])); var detectedObjects = yoloWrapper.Detect(jpgBytes); using (Graphics capturedScreen = Graphics.FromImage(bmp)) { foreach (var detectedObject in detectedObjects) { Color color; switch (detectedObject.Type) { case "player": color = Color.LawnGreen; break; case "head_player": color = Color.Red; break; default: color = Color.Black; break; } capturedScreen.DrawRectangle(new Pen(color), detectedObject.X, detectedObject.Y, detectedObject.Width, detectedObject.Height); capturedScreen.DrawString( detectedObject.Type + "(" + Math.Round(detectedObject.Confidence * 100) + "%)", new Font(FontFamily.GenericMonospace, 15), new SolidBrush(color), detectedObject.X, detectedObject.Y); } watch.Stop(); capturedScreen.DrawString( (1000 / watch.ElapsedMilliseconds) + "FPS (" + watch.ElapsedMilliseconds + "ms)", new Font(FontFamily.GenericMonospace, 15), new SolidBrush(Color.LimeGreen), 10, 10); } form.pictureBox1.Image = bmp; } } }