--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+<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>
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
// 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
{
[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");
[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");
[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");
[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");
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();
[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");
--- /dev/null
+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";
+}
--- /dev/null
+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" };
+ }
+ }
+}
--- /dev/null
+// 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;
+ }
+ }
+}
--- /dev/null
+<?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>