Skip to content

Commit ac39185

Browse files
authored
Merge pull request #34 from AIRLegend/dev
Refactor, Bugfixing and new features
2 parents 7362e27 + 11c235b commit ac39185

35 files changed

+991
-532
lines changed

AITracker/src/data.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "data.h"
22

3-
FaceData::FaceData()
3+
FaceData::FaceData():
4+
landmark_coords{0}
45
{
56
rotation = new double[3]{ 0,0,0 };
67
translation = new double[3]{ 0,0,0 };
@@ -22,15 +23,6 @@ std::string FaceData::to_string()
2223
std::to_string(this->translation[1]) + ", Z: " +
2324
std::to_string(this->translation[2]) ;
2425

25-
26-
/*datastring +=
27-
std::string("\n\Crop coords: ") +
28-
std::to_string(this->face_coords[0]) + ", " +
29-
std::to_string(this->face_coords[1]) + ", " +
30-
std::to_string(this->face_coords[2]) + ", " +
31-
std::to_string(this->face_coords[3]);
32-
*/
33-
3426
return datastring;
3527
}
3628

AITracker/src/filters.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "filters.h"
22

3+
#include <cstring>
4+
35
MAFilter::MAFilter(int steps, int array_size)
46
{
57
this->n_steps = steps;
@@ -41,6 +43,8 @@ EAFilter::EAFilter(int array_size)
4143
{
4244
this->array_size = array_size;
4345
this->last_value = new float[array_size];
46+
//If the last value is not 0, the first readings could bounce
47+
std::memset(last_value, 0, array_size * sizeof(float));
4448
}
4549

4650
EAFilter::~EAFilter()

AITracker/src/model.cpp

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,45 +8,31 @@
88

99

1010

11-
Tracker::Tracker(PositionSolver* solver, std::wstring& detection_model_path, std::wstring& landmark_model_path):
12-
improc()
11+
Tracker::Tracker(std::unique_ptr<PositionSolver>&& solver, std::wstring& detection_model_path, std::wstring& landmark_model_path):
12+
improc(),
13+
memory_info(allocator.GetInfo()),
14+
enviro(std::make_unique<Ort::Env>(ORT_LOGGING_LEVEL_WARNING, "env")),
15+
detection_input_node_names{ "input" },
16+
detection_output_node_names{ "output", "maxpool" },
17+
landmarks_input_node_names{ "input" },
18+
landmarks_output_node_names{ "output" }
1319
{
14-
15-
this->solver = solver;
16-
17-
18-
session_options = new Ort::SessionOptions();
19-
session_options->SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
20-
session_options->SetInterOpNumThreads(1);
21-
session_options->SetInterOpNumThreads(1);
22-
allocator = new Ort::AllocatorWithDefaultOptions();
23-
memory_info = (Ort::MemoryInfo*)allocator->GetInfo();
24-
enviro = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, "env");
25-
26-
enviro->DisableTelemetryEvents();
27-
20+
this->solver = std::move(solver);
2821

29-
session = new Ort::Session(*enviro, detection_model_path.data(), *session_options);
30-
session_lm = new Ort::Session(*enviro, landmark_model_path.data(), *session_options);
22+
auto session_options = Ort::SessionOptions();
23+
session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
24+
session_options.SetInterOpNumThreads(1);
25+
session_options.SetIntraOpNumThreads(1);
3126

32-
tensor_input_size = tensor_input_dims[1] * tensor_input_dims[2] * tensor_input_dims[3];
27+
enviro->DisableTelemetryEvents();
3328

34-
detection_input_node_names = {"input"};
35-
detection_output_node_names = {"output", "maxpool"};
36-
landmarks_input_node_names = {"input"};
37-
landmarks_output_node_names = {"output"};
38-
}
29+
session = std::make_unique<Ort::Session>(*enviro, detection_model_path.data(), session_options);
30+
session_lm = std::make_unique<Ort::Session>(*enviro, landmark_model_path.data(), session_options);
3931

40-
Tracker::~Tracker()
41-
{
42-
delete this->session_options;
43-
delete this->enviro;
44-
delete this->session;
45-
delete this->session_lm;
46-
delete this->solver;
32+
tensor_input_size = tensor_input_dims[1] * tensor_input_dims[2] * tensor_input_dims[3];
4733
}
4834

49-
void Tracker::predict(cv::Mat& image, FaceData& face_data, IFilter* filter)
35+
void Tracker::predict(cv::Mat& image, FaceData& face_data, const std::unique_ptr<IFilter>& filter)
5036
{
5137
cv::Mat img_copy = image.clone();
5238
img_copy.convertTo(img_copy, CV_32F);
@@ -95,7 +81,7 @@ void Tracker::detect_face(const cv::Mat& image, FaceData& face_data)
9581
improc.normalize(resized);
9682
improc.transpose((float*)resized.data, buffer_data);
9783

98-
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(*memory_info, buffer_data, tensor_input_size, tensor_input_dims, 4);
84+
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(memory_info, buffer_data, tensor_input_size, tensor_input_dims, 4);
9985

10086

10187
auto output_tensors = session->Run(Ort::RunOptions{ nullptr },
@@ -107,7 +93,7 @@ void Tracker::detect_face(const cv::Mat& image, FaceData& face_data)
10793

10894
cv::Mat out(4, tensor_detection_output_dims, CV_32F, output_arr);
10995
cv::Mat maxpool(4, tensor_detection_output_dims, CV_32F, maxpool_arr);
110-
96+
11197

11298
cv::Mat first(56, 56, CV_32F, out.ptr<float>(0,0));
11399
cv::Mat second(56, 56, CV_32F, out.ptr<float>(0,1));
@@ -123,7 +109,7 @@ void Tracker::detect_face(const cv::Mat& image, FaceData& face_data)
123109

124110

125111
face_data.face_detected = c > .6 ? true : false;
126-
112+
127113
if (face_data.face_detected)
128114
{
129115
float face[] = { x - r, y - r, 2 * r, 2 * r };
@@ -144,7 +130,7 @@ void Tracker::detect_face(const cv::Mat& image, FaceData& face_data)
144130
face_data.face_coords[2] = face[2];
145131
face_data.face_coords[3] = face[3];
146132
}
147-
133+
148134
}
149135

150136

@@ -156,10 +142,10 @@ void Tracker::detect_landmarks(const cv::Mat& image, int x0, int y0, float scale
156142
improc.normalize(resized);
157143
improc.transpose((float*)resized.data, buffer_data);
158144

159-
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(*memory_info, buffer_data, tensor_input_size, tensor_input_dims, 4);
145+
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(memory_info, buffer_data, tensor_input_size, tensor_input_dims, 4);
160146

161147

162-
auto output_tensors = session_lm->Run(Ort::RunOptions{ nullptr },
148+
auto output_tensors = session_lm->Run(Ort::RunOptions{ nullptr },
163149
landmarks_input_node_names.data(), &input_tensor, 1, landmarks_output_node_names.data(), 1);
164150

165151
float* output_arr = output_tensors[0].GetTensorMutableData<float>();

AITracker/src/model.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,21 @@ class Tracker
1111
{
1212

1313
public:
14-
PositionSolver* solver;
14+
std::unique_ptr<PositionSolver> solver;
1515

16-
Tracker(PositionSolver* solver, std::wstring& detection_model_path, std::wstring& landmark_model_path);
17-
~Tracker();
18-
void predict(cv::Mat& image, FaceData& face_data, IFilter *filter=nullptr);
16+
Tracker(std::unique_ptr<PositionSolver>&& solver, std::wstring& detection_model_path, std::wstring& landmark_model_path);
17+
18+
void predict(cv::Mat& image, FaceData& face_data, const std::unique_ptr<IFilter>& filter = {});
1919

2020
private:
2121
ImageProcessor improc;
22+
Ort::AllocatorWithDefaultOptions allocator = {};
23+
const OrtMemoryInfo* memory_info;
2224

2325
std::string detection_model_path;
24-
Ort::Env* enviro;
25-
Ort::SessionOptions* session_options;
26-
Ort::Session* session;
27-
Ort::Session* session_lm;
28-
Ort::AllocatorWithDefaultOptions* allocator;
29-
Ort::MemoryInfo* memory_info;
26+
std::unique_ptr<Ort::Env> enviro;
27+
std::unique_ptr<Ort::Session> session;
28+
std::unique_ptr<Ort::Session> session_lm;
3029

3130
std::vector<const char*> detection_input_node_names;
3231
std::vector<const char*> detection_output_node_names;

Client/Client.vcxproj

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
</PropertyGroup>
7373
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
7474
<ClCompile>
75-
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;$(QTDIR)\include;$(QTDIR)\include\QtUiTools;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtQuick;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtQml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;$(Platform)\$(Configuration)\uic;$(Platform)\$(Configuration)\moc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
75+
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;$(QTDIR)\include;$(QTDIR)\include\QtUiTools;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtQuick;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtQml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;$(Platform)\$(Configuration)\uic;$(Platform)\$(Configuration)\moc;.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
7676
</ClCompile>
7777
<Link>
7878
<AdditionalLibraryDirectories>$(Qt_LIBPATH_);$(SolutionDir)Dependencies\libusb\MS64\static;$(SolutionDir)Dependencies\OpenCV\lib;$(SolutionDir)Dependencies\onnxruntime\lib\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -86,7 +86,7 @@
8686
</ItemDefinitionGroup>
8787
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debugg|x64'">
8888
<ClCompile>
89-
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(ProjectDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
89+
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(ProjectDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
9090
</ClCompile>
9191
<Link>
9292
<AdditionalLibraryDirectories>$(Qt_LIBPATH_);C:\Users\Alvaro\source\repos\Camera\Dependencies\libusb\MS64\static;C:\Users\Alvaro\source\repos\Camera\Dependencies\OpenCV\lib;$(SolutionDir)Dependencies\onnxruntime\lib\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -105,7 +105,7 @@
105105
<AdditionalDependencies>$(Qt_LIBS_);opencv_world430d.lib;onnxruntime.lib;Ws2_32.lib;legacy_stdio_definitions.lib;libusb-1.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
106106
</Link>
107107
<ClCompile>
108-
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)PS3Driver\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;$(QTDIR)\include;$(QTDIR)\include\QtUiTools;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtQuick;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtQml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;$(Platform)\$(Configuration)\uic;$(Platform)\$(Configuration)\moc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108+
<AdditionalIncludeDirectories>$(Qt_INCLUDEPATH_);$(SolutionDir)Dependencies\libusb\include\libusb-1.0;$(SolutionDir)Dependencies\OpenCV\include\;$(SolutionDir)Dependencies\onnxruntime\include\;$(SolutionDir)PS3Driver\include\;$(SolutionDir)AITracker\src\;$(ProjectDir)Include;$(QTDIR)\include;$(QTDIR)\include\QtUiTools;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtQuick;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtQml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;$(Platform)\$(Configuration)\uic;$(Platform)\$(Configuration)\moc;.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
109109
</ClCompile>
110110
<ProjectReference>
111111
<UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
@@ -178,23 +178,20 @@
178178
<ClCompile Include="src\camera\OCVCamera.cpp" />
179179
<ClCompile Include="src\camera\CameraFactory.cpp" />
180180
<ClCompile Include="src\model\Config.cpp" />
181-
<ClCompile Include="src\model\IPResolver.cpp" />
182181
<ClCompile Include="src\camera\Ps3Camera.cpp" />
183182
<ClCompile Include="src\presenter\presenter.cpp" />
184183
<ClCompile Include="src\Main.cpp" />
185184
<ClCompile Include="src\model\UDPSender.cpp" />
185+
<ClCompile Include="src\view\ConfigWindow.cpp" />
186186
<ClCompile Include="src\view\WindowMain.cpp" />
187187
<ClCompile Include="src\tracker\TrackerFactory.cpp" />
188188
<ClCompile Include="src\tracker\TrackerWrapper.cpp" />
189189
<QtRcc Include="res\Resource.qrc" />
190-
<QtRcc Include="src\view\qml.qrc" />
190+
<CustomBuild Include="src\view\Resource.qrc" />
191191
</ItemGroup>
192192
<ItemGroup>
193193
<QtMoc Include="src\view\WindowMain.h" />
194194
</ItemGroup>
195-
<ItemGroup>
196-
<QtUic Include="src\view\MainWindow.ui" />
197-
</ItemGroup>
198195
<ItemGroup>
199196
<ClInclude Include="src\camera\CameraSettings.h" />
200197
<ClInclude Include="src\camera\Camera.h" />
@@ -204,12 +201,12 @@
204201
<ClInclude Include="Include\ps3eye.h" />
205202
<ClInclude Include="resource.h" />
206203
<ClInclude Include="src\model\Config.h" />
207-
<ClInclude Include="src\model\IPResolver.h" />
208204
<ClInclude Include="src\camera\Ps3Camera.h" />
209205
<ClInclude Include="src\presenter\i_presenter.h" />
210206
<ClInclude Include="src\presenter\presenter.h" />
211207
<ClInclude Include="src\model\UDPSender.h" />
212208
<ClInclude Include="src\tracker\ITrackerWrapper.h" />
209+
<QtMoc Include="src\view\ConfigWindow.h" />
213210
<ClInclude Include="src\view\i_view.h" />
214211
<ClInclude Include="src\tracker\TrackerFactory.h" />
215212
<ClInclude Include="src\tracker\TrackerWrapper.h" />
@@ -229,6 +226,10 @@
229226
<Image Include="res\logo.png" />
230227
<Image Include="res\logo_256px.ico" />
231228
</ItemGroup>
229+
<ItemGroup>
230+
<QtUic Include="src\view\ConfigWindow.ui" />
231+
<QtUic Include="src\view\MainWindow.ui" />
232+
</ItemGroup>
232233
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
233234
<ImportGroup Condition="Exists('$(SolutionDir)\QtMsBuild\qt.targets')">
234235
<Import Project="$(SolutionDir)\QtMsBuild\qt.targets" />

Client/Client.vcxproj.filters

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<ItemGroup>
4-
<ClCompile Include="src\model\IPResolver.cpp" />
54
<ClCompile Include="src\camera\Ps3Camera.cpp" />
65
<ClCompile Include="src\presenter\presenter.cpp" />
76
<ClCompile Include="src\Main.cpp" />
@@ -28,10 +27,12 @@
2827
<ClCompile Include="src\camera\CameraSettings.cpp">
2928
<Filter>Source Files</Filter>
3029
</ClCompile>
30+
<ClCompile Include="src\view\ConfigWindow.cpp">
31+
<Filter>Source Files</Filter>
32+
</ClCompile>
3133
</ItemGroup>
3234
<ItemGroup>
3335
<ClInclude Include="Include\ps3eye.h" />
34-
<ClInclude Include="src\model\IPResolver.h" />
3536
<ClInclude Include="src\camera\Ps3Camera.h" />
3637
<ClInclude Include="src\presenter\i_presenter.h" />
3738
<ClInclude Include="src\presenter\presenter.h" />
@@ -70,16 +71,15 @@
7071
</ItemGroup>
7172
<ItemGroup>
7273
<QtMoc Include="src\view\WindowMain.h" />
74+
<QtMoc Include="src\view\ConfigWindow.h">
75+
<Filter>Header Files</Filter>
76+
</QtMoc>
7377
</ItemGroup>
7478
<ItemGroup>
75-
<QtRcc Include="src\view\qml.qrc" />
7679
<QtRcc Include="res\Resource.qrc">
7780
<Filter>Resource Files</Filter>
7881
</QtRcc>
7982
</ItemGroup>
80-
<ItemGroup>
81-
<QtUic Include="src\view\MainWindow.ui" />
82-
</ItemGroup>
8383
<ItemGroup>
8484
<Filter Include="Source Files">
8585
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
@@ -96,6 +96,11 @@
9696
<Extensions>qrc;*</Extensions>
9797
<ParseFiles>false</ParseFiles>
9898
</Filter>
99+
<Filter Include="Form Files">
100+
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
101+
<Extensions>ui</Extensions>
102+
<ParseFiles>true</ParseFiles>
103+
</Filter>
99104
</ItemGroup>
100105
<ItemGroup>
101106
<ResourceCompile Include="Client.rc" />
@@ -104,4 +109,17 @@
104109
<Image Include="res\logo.png" />
105110
<Image Include="res\logo_256px.ico" />
106111
</ItemGroup>
112+
<ItemGroup>
113+
<QtUic Include="src\view\MainWindow.ui">
114+
<Filter>Form Files</Filter>
115+
</QtUic>
116+
<QtUic Include="src\view\ConfigWindow.ui">
117+
<Filter>Form Files</Filter>
118+
</QtUic>
119+
</ItemGroup>
120+
<ItemGroup>
121+
<CustomBuild Include="src\view\Resource.qrc">
122+
<Filter>Resource Files</Filter>
123+
</CustomBuild>
124+
</ItemGroup>
107125
</Project>

Client/src/Main.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
#include "tracker/TrackerFactory.h"
1212

1313

14+
1415
int main(int argc, char *argv[])
1516
{
16-
17+
1718
SetEnvironmentVariable(LPWSTR("OMP_NUM_THREADS"), LPWSTR("1"));
1819
omp_set_num_threads(1); // Disable ONNX paralelization so we dont steal all cpu cores.
1920
omp_set_dynamic(0);
@@ -27,10 +28,10 @@ int main(int argc, char *argv[])
2728
WindowMain w;
2829
w.show();
2930

30-
ConfigMgr conf_mgr("./prefs.ini");
31-
TrackerFactory t_factory("./models/");
32-
33-
Presenter p((IView&)w, &t_factory, (ConfigMgr*)&conf_mgr);
31+
auto conf_mgr = std::make_unique<ConfigMgr>("./prefs.ini");
32+
auto t_factory = std::make_unique<TrackerFactory>("./models/");
33+
34+
Presenter p((IView&)w, std::move(t_factory), std::move(conf_mgr));
3435

3536
return app.exec();
3637
}

0 commit comments

Comments
 (0)