Skip to content

Commit 5230393

Browse files
Merge branch 'release/1.3.0.0'
2 parents c49143a + e4ee126 commit 5230393

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+1611
-386
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[submodule "src/DlibDotNet"]
22
path = src/DlibDotNet
3-
url = https://github.com/takuya-takeuchi/DlibDotNet
3+
url = https://github.com/takuya-takeuchi/DlibDotNet

FaceRecognitionDotNet.sln

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FaceDetection", "examples\F
2121
EndProject
2222
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCVSharpSample", "examples\OpenCVSharpSample\OpenCVSharpSample.csproj", "{3F6F21E5-DEF8-4F1A-BE8F-741A35B528D1}"
2323
EndProject
24-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelenTraining", "examples\HelenTraining\HelenTraining.csproj", "{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4}"
25-
EndProject
2624
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FindFacesInBatches", "examples\FindFacesInBatches\FindFacesInBatches.csproj", "{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC}"
2725
EndProject
28-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenderTraining", "examples\GenderTraining\GenderTraining.csproj", "{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F}"
29-
EndProject
30-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AgeTraining", "examples\AgeTraining\AgeTraining.csproj", "{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD}"
31-
EndProject
3226
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FaceRecognitionDotNet.Tests", "test\FaceRecognitionDotNet.Tests\FaceRecognitionDotNet.Tests.csproj", "{28A36B74-6D83-47B4-9AD6-A252902DBC99}"
3327
EndProject
3428
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomClassificationDemo", "examples\CustomClassificationDemo\CustomClassificationDemo.csproj", "{F4092804-340D-4553-B9E5-7C6555D317B7}"
3529
EndProject
30+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{8C8838E0-B002-426F-9B25-4C1F65A6D33D}"
31+
EndProject
32+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AgeTraining", "tools\AgeTraining\AgeTraining.csproj", "{AF7429BE-0747-4E9A-AB2F-17480A8D485E}"
33+
EndProject
34+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenderTraining", "tools\GenderTraining\GenderTraining.csproj", "{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18}"
35+
EndProject
36+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelenTraining", "tools\HelenTraining\HelenTraining.csproj", "{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA}"
37+
EndProject
3638
Global
3739
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3840
Debug|Any CPU = Debug|Any CPU
@@ -63,22 +65,10 @@ Global
6365
{3F6F21E5-DEF8-4F1A-BE8F-741A35B528D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
6466
{3F6F21E5-DEF8-4F1A-BE8F-741A35B528D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
6567
{3F6F21E5-DEF8-4F1A-BE8F-741A35B528D1}.Release|Any CPU.Build.0 = Release|Any CPU
66-
{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
67-
{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
68-
{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
69-
{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4}.Release|Any CPU.Build.0 = Release|Any CPU
7068
{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
7169
{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
7270
{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
7371
{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC}.Release|Any CPU.Build.0 = Release|Any CPU
74-
{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
75-
{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
76-
{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
77-
{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F}.Release|Any CPU.Build.0 = Release|Any CPU
78-
{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
79-
{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
80-
{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
81-
{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD}.Release|Any CPU.Build.0 = Release|Any CPU
8272
{28A36B74-6D83-47B4-9AD6-A252902DBC99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
8373
{28A36B74-6D83-47B4-9AD6-A252902DBC99}.Debug|Any CPU.Build.0 = Debug|Any CPU
8474
{28A36B74-6D83-47B4-9AD6-A252902DBC99}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -87,6 +77,18 @@ Global
8777
{F4092804-340D-4553-B9E5-7C6555D317B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
8878
{F4092804-340D-4553-B9E5-7C6555D317B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
8979
{F4092804-340D-4553-B9E5-7C6555D317B7}.Release|Any CPU.Build.0 = Release|Any CPU
80+
{AF7429BE-0747-4E9A-AB2F-17480A8D485E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
81+
{AF7429BE-0747-4E9A-AB2F-17480A8D485E}.Debug|Any CPU.Build.0 = Debug|Any CPU
82+
{AF7429BE-0747-4E9A-AB2F-17480A8D485E}.Release|Any CPU.ActiveCfg = Release|Any CPU
83+
{AF7429BE-0747-4E9A-AB2F-17480A8D485E}.Release|Any CPU.Build.0 = Release|Any CPU
84+
{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
85+
{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18}.Debug|Any CPU.Build.0 = Debug|Any CPU
86+
{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18}.Release|Any CPU.ActiveCfg = Release|Any CPU
87+
{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18}.Release|Any CPU.Build.0 = Release|Any CPU
88+
{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
89+
{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
90+
{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
91+
{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA}.Release|Any CPU.Build.0 = Release|Any CPU
9092
EndGlobalSection
9193
GlobalSection(SolutionProperties) = preSolution
9294
HideSolutionNode = FALSE
@@ -98,12 +100,12 @@ Global
98100
{32599FBF-8E91-43BA-B0B6-38E3C7A02530} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
99101
{49ED9EF1-7E3E-4959-B152-52545B973906} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
100102
{3F6F21E5-DEF8-4F1A-BE8F-741A35B528D1} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
101-
{FCCD585F-1D3E-4AFB-9644-DAEC7B8CA6C4} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
102103
{5F7CB2DF-54E3-461F-9FA9-F8B4BAFC54AC} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
103-
{EAB3D0C4-D2E0-4F6A-A663-041B5584FF1F} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
104-
{8595BAC7-7EEC-49E6-9D78-01AFB15A30FD} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
105104
{28A36B74-6D83-47B4-9AD6-A252902DBC99} = {501D0145-416F-42A7-B636-02A4F783C97C}
106105
{F4092804-340D-4553-B9E5-7C6555D317B7} = {FEEAC07F-70D7-4C12-B92C-153CEE0F2539}
106+
{AF7429BE-0747-4E9A-AB2F-17480A8D485E} = {8C8838E0-B002-426F-9B25-4C1F65A6D33D}
107+
{44781AB4-D08C-4FDA-92EF-55C7CE9D5A18} = {8C8838E0-B002-426F-9B25-4C1F65A6D33D}
108+
{86A8F7D7-E3D6-4478-856E-B0FA91F5ABFA} = {8C8838E0-B002-426F-9B25-4C1F65A6D33D}
107109
EndGlobalSection
108110
GlobalSection(ExtensibilityGlobals) = postSolution
109111
SolutionGuid = {4D44C572-D749-4A76-A199-8C598A08AE8A}

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ This package supports cross platform, Windows, Linux and MacOSX!!
3939
|face_landmarks|FaceLandmarks|And support **Helen dataset** :warning:|
4040
|face_locations|FaceLocations||
4141
|load_image_file|LoadImageFile||
42+
|-|CropFaces|Crop image with specified locations|
4243
|-|LoadImage|From memory data|
4344
|-|PredictAge|Use **Adience Benchmark Of Unfiltered Faces For Gender And Age Classification dataset** :warning:|
4445
|-|PredictGender|Use **UTKFace dataset** :warning:|
@@ -51,9 +52,9 @@ You must train dataset by yourself.
5152
I will **NOT** provide pretrained model file due to avoiding license issue.
5253
You can check the following examples to train dataset.
5354

54-
* examples/AgeTraining
55-
* examples/GenderTraining
56-
* examples/HelenTraining
55+
* tools/AgeTraining
56+
* tools/GenderTraining
57+
* tools/HelenTraining
5758

5859
## Demo
5960

examples/CustomClassificationDemo/Program.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Drawing;
2+
using System.IO;
23
using System.Linq;
34
using FaceRecognitionDotNet;
5+
using FaceRecognitionDotNet.Extensions;
46

57
namespace CustomClassificationDemo
68
{
@@ -21,29 +23,27 @@ private static void Main()
2123
{
2224
var box = fr.FaceLocations(image, model: Model.Cnn).FirstOrDefault();
2325

24-
using (var p = new Pen(Color.Red, bitmap.Width / 200f))
26+
using (var p = new Pen(Color.Red, bitmap.Width / 200f))
2527
g.DrawRectangle(p, box.Left, box.Top, box.Right - box.Left, box.Bottom - box.Top);
2628

27-
var ageRange = new[]
29+
// load custom estimator
30+
using (var ageEstimator = new SimpleAgeEstimator(Path.Combine("models", "adience-age-network.dat")))
31+
using (var genderEstimator = new SimpleGenderEstimator(Path.Combine("models", "utkface-gender-network.dat")))
2832
{
29-
"(0, 2)",
30-
"(4, 6)",
31-
"(8, 13)",
32-
"(15, 20)",
33-
"(25, 32)",
34-
"(38, 43)",
35-
"(48, 53)",
36-
"(60, 100)"
37-
};
38-
var age = ageRange[fr.PredictAge(image, box)];
39-
var gender = fr.PredictGender(image, box);
40-
41-
var agePos = new PointF(box.Left + 10, box.Top + 10);
42-
var genderPos = new PointF(box.Left + 10, box.Bottom - 50);
43-
g.DrawString(gender.ToString(), SystemFonts.CaptionFont, Brushes.Blue, agePos );
44-
g.DrawString(age, SystemFonts.CaptionFont, Brushes.Green, genderPos);
45-
46-
bitmap.Save("result.png");
33+
fr.CustomAgeEstimator = ageEstimator;
34+
fr.CustomGenderEstimator = genderEstimator;
35+
36+
var ageRange = ageEstimator.Groups.Select(range => $"({range.Start}, {range.End})").ToArray();
37+
var age = ageRange[fr.PredictAge(image, box)];
38+
var gender = fr.PredictGender(image, box);
39+
40+
var agePos = new PointF(box.Left + 10, box.Top + 10);
41+
var genderPos = new PointF(box.Left + 10, box.Bottom - 50);
42+
g.DrawString(gender.ToString(), SystemFonts.CaptionFont, Brushes.Blue, agePos);
43+
g.DrawString(age, SystemFonts.CaptionFont, Brushes.Green, genderPos);
44+
45+
bitmap.Save("result.png");
46+
}
4747
}
4848
}
4949

nuget/nuspec/FaceRecognitionDotNet.ARM.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet.ARM</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet (for ARM)</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

nuget/nuspec/FaceRecognitionDotNet.CPU.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

nuget/nuspec/FaceRecognitionDotNet.CUDA100.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet.CUDA100</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet for CUDA 10.0</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

nuget/nuspec/FaceRecognitionDotNet.CUDA101.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet.CUDA101</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet for CUDA 10.1</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

nuget/nuspec/FaceRecognitionDotNet.CUDA92.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet.CUDA92</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet for CUDA 9.2</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

nuget/nuspec/FaceRecognitionDotNet.MKL.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>FaceRecognitionDotNet.MKL</id>
5-
<version>1.2.3.14</version>
5+
<version>1.3.0.0</version>
66
<title>FaceRecognitionDotNet for MKL</title>
77
<authors>Takuya Takeuchi</authors>
88
<owners>Takuya Takeuchi</owners>

0 commit comments

Comments
 (0)