1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Drawing ;
4+ using System . Drawing . Imaging ;
5+ using System . IO ;
6+ using System . Windows ;
7+ using System . Windows . Media . Imaging ;
8+ using Microsoft . Win32 ;
9+ using Yolov5Net . Scorer ;
10+ using Yolov5Net . Scorer . Models ;
11+
12+ namespace ml_yolov7_wpf_demo ;
13+
14+ /// <summary>
15+ /// Interaction logic for MainWindow.xaml
16+ /// </summary>
17+ public partial class MainWindow : Window
18+ {
19+ public string ImageFilePath = "" ;
20+ public YoloScorer < YoloCocoP5Model > Scorer ;
21+
22+ public MainWindow ( )
23+ {
24+ InitializeComponent ( ) ;
25+ }
26+
27+ private void btnLoad_Click ( object sender , RoutedEventArgs e )
28+ {
29+ var op = new OpenFileDialog ( ) ;
30+ op . Title = "Select an image" ;
31+ op . Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
32+ "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
33+ "Portable Network Graphic (*.png)|*.png" ;
34+ if ( op . ShowDialog ( ) == true )
35+ {
36+ ImageFilePath = op . FileName ;
37+ imgPhoto . Source = new BitmapImage ( new Uri ( op . FileName ) ) ;
38+ }
39+ }
40+
41+ private void btnProcess_Click ( object sender , RoutedEventArgs e )
42+ {
43+ var image = Image . FromFile ( ImageFilePath ) ;
44+ List < YoloPrediction > predictions = Scorer . Predict ( image ) ;
45+
46+ using var graphics = Graphics . FromImage ( image ) ;
47+ foreach ( var prediction in predictions )
48+ {
49+ var score = Math . Round ( prediction . Score , 2 ) ;
50+
51+ graphics . DrawRectangles ( new Pen ( prediction . Label . Color , 3 ) ,
52+ new [ ] { prediction . Rectangle } ) ;
53+
54+ var ( x , y ) = ( prediction . Rectangle . X - 3 , prediction . Rectangle . Y - 23 ) ;
55+
56+ graphics . DrawString ( $ "{ prediction . Label . Name } ({ score } )",
57+ new Font ( "Consolas" , 16 , GraphicsUnit . Pixel ) , new SolidBrush ( prediction . Label . Color ) ,
58+ new PointF ( x , y ) ) ;
59+ }
60+
61+ var bitmap = new BitmapImage ( ) ;
62+
63+ using ( var stream = new MemoryStream ( ) )
64+ {
65+ image . Save ( stream , ImageFormat . Jpeg ) ;
66+
67+ stream . Seek ( 0 , SeekOrigin . Begin ) ;
68+
69+ bitmap . BeginInit ( ) ;
70+ bitmap . StreamSource = stream ;
71+ bitmap . CacheOption = BitmapCacheOption . OnLoad ;
72+ bitmap . EndInit ( ) ;
73+ }
74+
75+ imgPhoto . Source = bitmap ;
76+ }
77+
78+ private void btnLoadModel_Click ( object sender , RoutedEventArgs e )
79+ {
80+ var op = new OpenFileDialog ( ) ;
81+ op . Title = "Select an ONNX model file" ;
82+ op . Filter = "Onnx mode file|*.onnx;" ;
83+ if ( op . ShowDialog ( ) == true )
84+ {
85+ var modelFilePath = op . FileName ;
86+ Scorer = new YoloScorer < YoloCocoP5Model > ( modelFilePath ) ;
87+ }
88+ }
89+ }
0 commit comments