[MediaVision][Non-ACR] Separate ImageClassifier to other TC package 17/282317/3
authorHaesu Gwon <haesu.gwon@samsung.com>
Fri, 30 Sep 2022 01:12:09 +0000 (10:12 +0900)
committerHaesu Gwon <haesu.gwon@samsung.com>
Tue, 4 Oct 2022 00:21:09 +0000 (09:21 +0900)
Change-Id: I47353f2e7d8e1fd4ed0b9a2da8c7f228ef9f25dc

16 files changed:
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Program.cs [new file with mode: 0755]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.csproj [new file with mode: 0755]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.sln [new file with mode: 0755]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/Tizen.MediaVision.ImageClassifier.Tests.png [new file with mode: 0755]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic.jpg [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_label.txt [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_tflite_model.tflite [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od.jpg [new file with mode: 0755]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_label.txt [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_tflite_model.tflite [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/TSImageClassificationResult.cs [moved from tct-suite-vs/Tizen.MediaVision.Tests/testcase/TSImageClassificationResult.cs with 95% similarity]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/TSImageClassifier.cs [moved from tct-suite-vs/Tizen.MediaVision.Tests/testcase/TSImageClassifier.cs with 96% similarity]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/Features.cs [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/InferenceImageTestBase.cs [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/TestHelper.cs [new file with mode: 0644]
tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/tizen-manifest.xml [new file with mode: 0755]

diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Program.cs b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Program.cs
new file mode 100755 (executable)
index 0000000..9524c25
--- /dev/null
@@ -0,0 +1,28 @@
+using System;
+using NUnitLite.TUnit;
+using Tizen.Applications;
+
+namespace TCT.Tizen
+{
+
+    class Program : ServiceApplication
+    {
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+
+            Console.WriteLine("TCT : OnCreate()");
+
+            TRunner t = new TRunner();
+            t.LoadTestsuite();
+            t.Execute();
+        }
+
+        static void Main(string[] args)
+        {
+            Console.WriteLine("TCT : Main()");
+            var app = new Program();
+            app.Run(args);
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.csproj b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.csproj
new file mode 100755 (executable)
index 0000000..5dcbd2e
--- /dev/null
@@ -0,0 +1,42 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <!-- Property Group for .NET Core Project -->
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>tizen10.0</TargetFramework>
+    <TargetFrameworkIdentifier>Tizen</TargetFrameworkIdentifier>
+  </PropertyGroup>
+
+  <!-- Property Group for Tizen Project -->
+  <PropertyGroup>
+    <TizenCreateTpkOnBuild>true</TizenCreateTpkOnBuild>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Folder Include="lib\" />
+  </ItemGroup>
+
+  <Import Project="..\Common\dependencies.props" />
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NET" Version="$(TizenNETVersion)">
+      <ExcludeAssets>Runtime</ExcludeAssets>
+    </PackageReference>
+    <PackageReference Include="Tizen.NET.Sdk" Version="$(TizenNETSdkVersion)" />
+  </ItemGroup>
+
+  <!-- Include Nuget Package for Tizen Project building -->
+  <ItemGroup>
+    <ProjectReference Include="..\nunit.framework\nunit.framework.csproj" />
+    <ProjectReference Include="..\nunitlite\nunitlite.csproj" />
+    <ProjectReference Include="..\Tizen.Multimedia.Support.Library\Tizen.Multimedia.Support.Library.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.sln b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/Tizen.MediaVision.ImageClassifier.Tests.sln
new file mode 100755 (executable)
index 0000000..56a61d9
--- /dev/null
@@ -0,0 +1,88 @@
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio Version 16\r
+VisualStudioVersion = 16.0.32602.291\r
+MinimumVisualStudioVersion = 15.0.26124.0\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.MediaVision.ImageClassifier.Tests", "Tizen.MediaVision.ImageClassifier.Tests.csproj", "{D92BEEAC-3B2A-45F8-8C53-53B92550404A}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\nunit.framework\nunit.framework.csproj", "{B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\nunitlite\nunitlite.csproj", "{FDB8025A-C029-461F-895E-287B4C65939B}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoTemplate", "..\Template\AutoTemplate\AutoTemplate.csproj", "{B11ABB0C-C3C1-4B5C-8251-A15628A775F3}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Multimedia.Support.Library", "..\Tizen.Multimedia.Support.Library\Tizen.Multimedia.Support.Library.csproj", "{80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Debug|x64 = Debug|x64\r
+               Debug|x86 = Debug|x86\r
+               Release|Any CPU = Release|Any CPU\r
+               Release|x64 = Release|x64\r
+               Release|x86 = Release|x86\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.Build.0 = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|x64.Build.0 = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {80EAC7DC-0D5E-4C2F-90C9-B521BDED2A8D}.Release|x86.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {ED382B91-9930-40B6-B3D7-362304C78680}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/Tizen.MediaVision.ImageClassifier.Tests.png b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/Tizen.MediaVision.ImageClassifier.Tests.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/Tizen.MediaVision.ImageClassifier.Tests.png differ
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic.jpg b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic.jpg
new file mode 100644 (file)
index 0000000..b4efc6c
Binary files /dev/null and b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic.jpg differ
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_label.txt b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_label.txt
new file mode 100644 (file)
index 0000000..d350ee6
--- /dev/null
@@ -0,0 +1,74 @@
+Apple
+Backpack
+Balloon
+Banana
+Barrel
+Baseball_bat
+Beer
+Bench
+Bicycle
+Book
+Bookcase
+Boot
+Camel
+Camera
+Cannon
+Canoe
+Car
+Castle
+Coat
+Computer_keyboard
+Cosmetics
+Couch
+Cowboy_hat
+Crab
+Cucumber
+Desk
+Dog
+Doll
+Door
+Dragonfly
+Drum
+Earrings
+Football
+Fountain
+Frog
+Guitar
+Ice_cream
+Jacket
+Jellyfish
+Kite
+Lamp
+Lemon
+Lipstick
+Mushroom
+Necklace
+Orange
+Parachute
+Pillow
+Pizza
+Rabbit
+Sandal
+Saxophone
+Scarf
+Shirt
+Shorts
+Snake
+Sock
+Spoon
+Strawberry
+Suit
+Sunglasses
+Surfboard
+Tank
+Taxi
+Television
+Tent
+Tie
+Tiger
+Traffic_light
+Train
+Umbrella
+Whale
+Wheel
+Wine
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_tflite_model.tflite b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_tflite_model.tflite
new file mode 100644 (file)
index 0000000..db26630
Binary files /dev/null and b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/ic_tflite_model.tflite differ
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od.jpg b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od.jpg
new file mode 100755 (executable)
index 0000000..8b20d8a
Binary files /dev/null and b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od.jpg differ
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_label.txt b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_label.txt
new file mode 100644 (file)
index 0000000..0338a61
--- /dev/null
@@ -0,0 +1,72 @@
+Car
+Wheel
+Suit
+Dog
+Guitar
+Bicycle
+Sunglasses
+Door
+Jacket
+Train
+Desk
+Drum
+Book
+Tie
+Shorts
+Shirt
+Camera
+Wine
+Beer
+Football
+Castle
+Bench
+Coat
+Tent
+Bookcase
+Doll
+Umbrella
+Computer_keyboard
+Couch
+Balloon
+Fountain
+Television
+Necklace
+Canoe
+Scarf
+Cowboy_hat
+Mushroom
+Traffic_light
+Surfboard
+Lamp
+Ice_cream
+Taxi
+Boot
+Frog
+Dragonfly
+Sandal
+Strawberry
+Pizza
+Pillow
+Snake
+Rabbit
+Baseball_bat
+Lipstick
+Apple
+Tank
+Parachute
+Spoon
+Tiger
+Orange
+Saxophone
+Cosmetics
+Cannon
+Camel
+Miniskirt
+Crab
+Jellyfish
+Banana
+Backpack
+Whale
+Sock
+Lemon
+Earrings
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_tflite_model.tflite b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_tflite_model.tflite
new file mode 100644 (file)
index 0000000..aee1d31
Binary files /dev/null and b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/shared/res/od_tflite_model.tflite differ
@@ -6,12 +6,9 @@
 // it only in accordance with the terms of the license agreement
 // you entered into with Samsung.
 
-using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Threading.Tasks;
 using NUnit.Framework;
-using Tizen.Multimedia.Util;
 
 namespace Tizen.Multimedia.Vision.Tests
 {
@@ -28,7 +25,7 @@ namespace Tizen.Multimedia.Vision.Tests
         [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")]
         public async Task Indice_READ_ONLY()
         {
-            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.TFLitePath + "/image_classifier/ic.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/ic.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
@@ -57,7 +54,7 @@ namespace Tizen.Multimedia.Vision.Tests
         [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")]
         public async Task Name_READ_ONLY()
         {
-            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.TFLitePath + "/image_classifier/ic.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/ic.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
@@ -86,7 +83,7 @@ namespace Tizen.Multimedia.Vision.Tests
         [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")]
         public async Task Confidence_READ_ONLY()
         {
-            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.TFLitePath + "/image_classifier/ic.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/ic.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
@@ -27,7 +27,7 @@ namespace Tizen.Multimedia.Vision.Tests
         [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")]
         public async Task ClassifyAsync_CHECK_RETURN_VALUE()
         {
-            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.TFLitePath + "/image_classifier/ic.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/ic.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
@@ -67,12 +67,14 @@ namespace Tizen.Multimedia.Vision.Tests
         public async Task ClassifyAsync_WITH_FACEDETECTOR_CHECK_RETURN_VALUE()
         {
             // First, we use object detector to get the location of each object.
-            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.TFLitePath + "/object_detector/od.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/od.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
             }
 
+            Log.Info("Tizen.MediaVision.Tests", $"frame size [{frame.Buffer.Length}]");
+
             using (var source = new MediaVisionSource(frame.Buffer, (uint)frame.Size.Width, (uint)frame.Size.Height, ColorSpace.Rgb888))
             {
                 _odConfig.LoadInferenceModel();
@@ -129,7 +131,7 @@ namespace Tizen.Multimedia.Vision.Tests
         [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")]
         public async Task ClassifyAsync_INFERENCE_THROWS_IF_CONFIG_IS_NULL()
         {
-            var frame = await TestHelper.GetBitampFrameFromImage($"{TestHelper.TFLitePath}/facial_landmark_detector/fld.jpg");
+            var frame = await TestHelper.GetBitampFrameFromImage(TestHelper.ResourcePath + "/ic.jpg");
             if (frame.Buffer == null || frame.Buffer.Length == 0)
             {
                 Assert.Fail("Failed to get buffer data from face image");
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/Features.cs b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/Features.cs
new file mode 100644 (file)
index 0000000..5634cf4
--- /dev/null
@@ -0,0 +1,5 @@
+internal static class Features
+{
+    public const string Inference = "http://tizen.org/feature/vision.inference";
+    public const string ImageClassification = "http://tizen.org/feature/vision.inference.image";
+}
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/InferenceImageTestBase.cs b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/InferenceImageTestBase.cs
new file mode 100644 (file)
index 0000000..438b9df
--- /dev/null
@@ -0,0 +1,80 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+
+namespace Tizen.Multimedia.Vision.Tests
+{
+    public class InferenceImageTestBase
+    {
+        protected InferenceModelConfiguration _odConfig;
+        protected InferenceModelConfiguration _icConfig;
+
+        [SetUp]
+        public void InitBase()
+        {
+            try
+            {
+                _odConfig = new InferenceModelConfiguration();
+                _icConfig = new InferenceModelConfiguration();
+
+                if (_odConfig.SupportedBackend.Any() &&
+                    _odConfig.SupportedBackend.Contains(InferenceBackendType.TFLite))
+                {
+                    Configure();
+                }
+                else
+                {
+                    Assert.Pass("Backend engine is not supported.");
+                }
+            }
+            catch (NotSupportedException) when (FeatureChecker.IsSupported(Features.Inference) == false ||
+                FeatureChecker.IsSupported(Features.ImageClassification) == false)
+            {
+                Assert.Pass("object detection is not supported");
+            }
+        }
+
+        [TearDown]
+        public void DestroyBase()
+        {
+            _odConfig?.Dispose();
+            _icConfig?.Dispose();
+        }
+
+        private void Configure()
+        {
+            _odConfig.WeightFilePath = TestHelper.ResourcePath + "od_tflite_model.tflite";
+            _odConfig.CategoryFilePath = TestHelper.ResourcePath + "od_label.txt";
+            _odConfig.MeanValue = 127.0;
+            _odConfig.StdValue = 127.0;
+            _odConfig.ConfidenceThreshold = 0.3;
+            _odConfig.Backend = InferenceBackendType.TFLite;
+            _odConfig.Device = InferenceTargetDevice.CPU;
+            _odConfig.DataType = InferenceDataType.Float32;
+            _odConfig.TensorSize = new Size(300, 300);
+            _odConfig.TensorChannels = 3;
+            _odConfig.InputNodeName = "normalized_input_image_tensor";
+            _odConfig.OutputNodeName = new string[]
+            {
+                "TFLite_Detection_PostProcess",
+                "TFLite_Detection_PostProcess:1",
+                "TFLite_Detection_PostProcess:2",
+                "TFLite_Detection_PostProcess:3"
+            };
+
+
+            _icConfig.WeightFilePath = TestHelper.ResourcePath + "ic_tflite_model.tflite";
+            _icConfig.CategoryFilePath = TestHelper.ResourcePath + "ic_label.txt";
+            _icConfig.MeanValue = 127.5;
+            _icConfig.StdValue = 127.5;
+            _icConfig.ConfidenceThreshold = 0.5;
+            _icConfig.Backend = InferenceBackendType.TFLite;
+            _icConfig.Device = InferenceTargetDevice.CPU;
+            _icConfig.DataType = InferenceDataType.Float32;
+            _icConfig.TensorSize = new Size(224, 224);
+            _icConfig.TensorChannels = 3;
+            _icConfig.InputNodeName = "input_2";
+            _icConfig.OutputNodeName = new string[] { "dense_3/Softmax" };
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/TestHelper.cs b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/testcase/support/TestHelper.cs
new file mode 100644 (file)
index 0000000..2a43827
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2022 by Samsung Electronics, Inc.,
+//
+// This software is the confidential and proprietary information
+// of Samsung Electronics, Inc. ("Confidential Information"). You
+// shall not disclose such Confidential Information and shall use
+// it only in accordance with the terms of the license agreement
+// you entered into with Samsung.
+
+using System.Linq;
+using System.Threading.Tasks;
+using Tizen.Multimedia.Util;
+
+namespace Tizen.Multimedia.Vision.Tests
+{
+    public static class TestHelper
+    {
+        internal static string ResourcePath = "/opt/usr/home/owner/apps_rw/Tizen.MediaVision.ImageClassifier.Tests/shared/res/";
+
+        internal static async Task<BitmapFrame> GetBitampFrameFromImage(string path)
+        {
+            JpegDecoder jpegDecoder = new JpegDecoder();
+
+            jpegDecoder.SetColorSpace(ColorSpace.Rgb888);
+
+            var frame = (await jpegDecoder.DecodeAsync(path)).FirstOrDefault();
+
+            jpegDecoder.Dispose();
+
+            return frame;
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/tizen-manifest.xml b/tct-suite-vs/Tizen.MediaVision.ImageClassifier.Tests/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..7abe9d0
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="Tizen.MediaVision.ImageClassifier.Tests" version="1.0.0" api-version="7" xmlns="http://tizen.org/ns/packages">
+    <profile name="common" />
+    <service-application appid="Tizen.MediaVision.ImageClassifier.Tests" exec="Tizen.MediaVision.ImageClassifier.Tests.dll" type="dotnet">
+        <icon>Tizen.MediaVision.ImageClassifier.Tests.png</icon>
+        <label>Tizen.MediaVision.ImageClassifier.Tests</label>
+        <background-category value="media" />
+        <background-category value="background-network" />
+        <background-category value="location" />
+        <background-category value="sensor" />
+        <background-category value="iot-communication" />
+        <splash-screens />
+    </service-application>
+    <shortcut-list />
+    <privileges>
+        <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        <privilege>http://tizen.org/privilege/externalstorage</privilege>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+        <privilege>http://tizen.org/privilege/content.write</privilege>
+    </privileges>
+    <provides-appdefined-privileges />
+</manifest>