SqueezeBrains SDK 1.18
RetinaMultiProject.cs
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using sb_cs;
7using Tutorials_Common;
8
10{
29 {
30 static SbError execute()
31 {
32 SbProject slice = null;
33 SbProject hole = null;
34 SbRoi roi = null;
35 SbImage img = null;
36 SbRes res_slice = null;
37 SbRes res_hole = null;
38 SbError err = SbError.SB_ERR_NONE;
39
41 Console.WriteLine("Sb Init");
42 err = Sb.Init("../../../sb.lic");
43 if (err != SbError.SB_ERR_NONE)
44 {
45 Console.WriteLine("Sb.Init failed with error " + err);
46 return err;
47 }
48
50 Console.WriteLine("Wait for license...");
51 err = Common.WaitLicense();
52 if (err != SbError.SB_ERR_NONE)
53 {
54 Console.WriteLine("SbLicense.WaitLicense failed with error " + err);
55 goto FnExit;
56 }
57
60 String solution_file = "../../solution/tutorial_7_retina_multi_project." + SbDefines.SbSolutionExt;
61 SbSolutionInfo solutionInfo = SbSolution.GetInfo(solution_file);
62 if (solutionInfo == null || solutionInfo.Error() != SbError.SB_ERR_NONE)
63 {
64 err = solutionInfo == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : solutionInfo.Error();
65 Console.WriteLine("SbSolution.GetInfo failed");
66 goto FnExit;
67 }
68 else if (solutionInfo.projects.Length == 0)
69 {
70 err = SbError.SB_ERR_PROJECT_NOT_FOUND;
71 Console.WriteLine("SbSolution.GetInfo no projects found");
72 goto FnExit;
73 }
74 Console.WriteLine("SbSolutionInfo.GetInfo, found " + solutionInfo.projects.Length + " projects");
75
77 slice = SbProject.Load(solution_file, solutionInfo.projects[0].uuid, SbProjectMode.SB_PROJECT_MODE_DETECTION_ONLY);
78 if (slice == null || slice.Error() != SbError.SB_ERR_NONE)
79 {
80 err = slice == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : slice.Error();
81 Console.WriteLine("SbProject.Load failed with error " + err);
82 goto FnExit;
83 }
84
86 hole = SbProject.Load(solution_file, solutionInfo.projects[1].uuid, SbProjectMode.SB_PROJECT_MODE_DETECTION_ONLY);
87 if (hole == null || hole.Error() != SbError.SB_ERR_NONE)
88 {
89 err = hole == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : hole.Error();
90 Console.WriteLine("SbProject.Load failed with error " + err);
91 goto FnExit;
92 }
93
94 SbFolder folder = SbFolder.Load("../../dataset", "png", true, 0);
95 if (folder != null)
96 {
97 for (int i = 0; i < folder.files.Length; i++)
98 {
99 // Load the image from file.
100 img = SbImage.Load(folder.files[i]);
101 if (img == null || img.Error() != SbError.SB_ERR_NONE)
102 {
103 Console.WriteLine("SbImage.Load " + folder.files[i] + " failed");
104 err = img == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : img.Error();
105 break;
106 }
107
108 // Create the ROI
109 roi = SbRoi.Create(img.Width(), img.Height());
110 if (roi == null || roi.Error() != SbError.SB_ERR_NONE)
111 {
112 Console.WriteLine("SbRoi.Create failed");
113 err = roi == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : roi.Error();
114 break;
115 }
116
117 // Set a rectangular ROI equal to image dimensions.
118 err = roi.SetRect(255, new SbRect(0, 0, img.Width(), img.Height()), true);
119 if (err != SbError.SB_ERR_NONE)
120 {
121 Console.WriteLine("SbRoi.SetRect failed with error " + err);
122 break;
123 }
124
126 err = slice.Detection(img, roi);
127 if (err != SbError.SB_ERR_NONE)
128 {
129 Console.WriteLine("SbProject.Detection failed with error " + err);
130 break;
131 }
132
133 // Get the results.
134 res_slice = slice.GetRes(false);
135 if (res_slice == null || slice.Error() != SbError.SB_ERR_NONE)
136 {
137 err = res_slice == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : slice.Error();
138 Console.WriteLine("SbProject.GetRes failed with error " + err);
139 break;
140 }
141
142 Console.WriteLine(" slice detection time=" + (res_slice.timeUs / 1000.0f) + "ms, " + res_slice.samples.Length + " slices found");
143
144 for (int j = 0; j < res_slice.samples.Length; ++j)
145 {
147 err = roi.SetRect(255, new SbRect(res_slice.samples[j].centre.x - 115, res_slice.samples[j].centre.y - 65, 230, 130), true);
148 if (err != SbError.SB_ERR_NONE)
149 {
150 Console.WriteLine("SbRoi.SetRect failed with error " + err);
151 break;
152 }
153
155 err = hole.Detection(img, roi);
156 if (err != SbError.SB_ERR_NONE)
157 {
158 Console.WriteLine("SbProject.Detection failed with error " + err);
159 break;
160 }
161
162 // Get the results.
163 res_hole = hole.GetRes(false);
164 if (res_hole == null || hole.Error() != SbError.SB_ERR_NONE)
165 {
166 err = res_hole == null ? SbError.SB_ERR_INSUFFICIENT_FREE_MEMORY : hole.Error();
167 Console.WriteLine("SbProject.GetRes failed with error " + err);
168 break;
169 }
170 Console.WriteLine(" slice " + j + ": hole detection time=" + (res_hole.timeUs / 1000.0f) + ", " + res_hole.samples.Length + " holes found");
171 // Print the results
172 for (int k = 0; k < res_hole.samples.Length; ++k)
173 Console.WriteLine(" centre=(" + res_hole.samples[k].centre.x + "," + res_hole.samples[k].centre.y + ") weight=" + res_hole.samples[k].weight);
174
175 if (res_hole != null)
176 {
177 res_hole.Dispose();
178 res_hole = null;
179 }
180 }
181 if (img != null)
182 {
183 img.Dispose();
184 img = null;
185 }
186 if (roi != null)
187 {
188 roi.Dispose();
189 roi = null;
190 }
191 if (res_slice != null)
192 {
193 res_slice.Dispose();
194 res_slice = null;
195 }
196 }
197 }
198
199 FnExit:
200
202 if (slice != null)
203 slice.Dispose();
204 if (hole != null)
205 hole.Dispose();
206 if (img != null)
207 img.Dispose();
208 if (roi != null)
209 roi.Dispose();
210 if (res_slice != null)
211 res_slice.Dispose();
212 if (res_hole != null)
213 res_hole.Dispose();
214
215 Console.WriteLine("Release SqueezeBrains library");
216 Sb.Release();
217
218 Console.WriteLine("Press ENTER to terminate");
219 Console.ReadKey();
220
221 return err;
222 }
223
224 static void Main(string[] args)
225 {
226 execute();
227 }
228 }
229}
Tutorial 7 - Retina - How to use more than one project to detect objects.
SbError Error()
Returns the error code of the last operation. If no error SbError.SB_ERR_NONE is returned.
Defines class
Definition: cs_common.h:309
static const String SbSolutionExt
Solution file extension
Definition: cs_common.h:315
Folder Class that wraps the sb_t_folder structure
Definition: cs_folder.h:16
static SbFolder Load(String^ path, String ^ext, bool sort, int verbosity)
Creates the list of the name of the files in a specified folder.
array< String^> files
Array of files.
Definition: cs_folder.h:22
Sb Main Class
Definition: cs_sb.h:401
static SbError Release()
Releases all the resources allocated in the library
static SbError Init(String ^ license_file)
Init the SB Library. The function initializes all the functionalities of the library including the li...
SbImage class that wraps the sb_t_image structure. You must call the Dispose() method to free all the...
Definition: cs_image.h:66
int Height()
Height, in pixel, of the image.
static SbImage Load(String^ filename)
Loads an image from file.
int Width()
Width, in pixel, of the image.
Project Class You must call the Dispose() method to free all the resources of the returned instance.
Definition: cs_project.h:51
static SbProject Load(String^ solution_file, String^ project_uuid, SbProjectMode mode)
Loads an existing project from file.
SbRes GetRes(bool details)
Retrieves the results of the last processed image
SbError Detection(SbImage ^img, SbRoi ^roi)
The function elaborates the image inside the ROI. For Surface projects the function computes also the...
Rectangle class that wraps the sb_t_rect structure
Definition: cs_sb.h:214
Class of the results of the image elaboration with the SbProject::Detection method....
Definition: cs_res.h:229
long long timeUs
Detection time
Definition: cs_res.h:265
array< SbSample^> samples
Samples results. Only Retina projects
Definition: cs_res.h:250
ROI Class that wraps the sb_t_roi structure. You must call the Dispose() method to free all the resou...
Definition: cs_roi.h:18
static SbRoi Create(int width, int height)
Creates a ROI.
SbError SetRect(int gl, SbRect^ rect, bool reset_roi)
Sets a rectangular ROI.
Solution class
Definition: cs_solution.h:44
static SbSolutionInfo GetInfo(String^ solution_file)
Returns the information contained in the solution_file.
Solution Info Class that wraps the sb_t_solution_info structure
Definition: cs_solution.h:17
array< SbProjectInfo^> projects
Array of the projects information of the solution. sb_t_solution_info.projects
Definition: cs_solution.h:23
SbError
Enum error codes
Definition: cs_common.h:13
SbProjectMode
Project loading or saving mode that wraps the sb_t_project_mode enum
Definition: cs_project.h:18
SB Namespace
Definition: cs_common.h:3