Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HUP-872] ML Kit Skeleton Detection Feature #166

Open
wants to merge 1 commit into
base: Development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions hms-sdk-unity/HuaweiMobileServices/ML/SkeletonDetection/MLJoint.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using HuaweiMobileServices.Utils;
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

namespace HuaweiMobileServices.ML.SkeletonDetection
{
public class MLJoint : JavaObjectWrapper
{
private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLJoint";
private static readonly AndroidJavaClass sJavaClass = new AndroidJavaClass(CLASS_NAME);

public MLJoint(AndroidJavaObject javaObject) : base(javaObject)
{
}

public MLJoint(string javaObjectCanonicalName, params object[] args) : base(javaObjectCanonicalName, args)
{
}

public static int TYPE_HEAD_TOP => sJavaClass.GetStatic<int>(nameof(TYPE_HEAD_TOP));
public static int TYPE_LEFT_ANKLE => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_ANKLE));
public static int TYPE_LEFT_ELBOW => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_ELBOW));
public static int TYPE_LEFT_HIP => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_HIP));
public static int TYPE_LEFT_KNEE => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_KNEE));
public static int TYPE_LEFT_SHOULDER => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_SHOULDER));
public static int TYPE_LEFT_WRIST => sJavaClass.GetStatic<int>(nameof(TYPE_LEFT_WRIST));
public static int TYPE_NECK => sJavaClass.GetStatic<int>(nameof(TYPE_NECK));
public static int TYPE_RIGHT_ANKLE => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_ANKLE));
public static int TYPE_RIGHT_ELBOW => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_ELBOW));
public static int TYPE_RIGHT_HIP => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_HIP));
public static int TYPE_RIGHT_KNEE => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_KNEE));
public static int TYPE_RIGHT_SHOULDER => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_SHOULDER));
public static int TYPE_RIGHT_WRIST => sJavaClass.GetStatic<int>(nameof(TYPE_RIGHT_WRIST));



public float GetPointX() => Call<float>("getPointX");
public float GetPointY() => Call<float>("getPointY");
public float GetScore() => Call<float>("getScore");
public float GetType() => Call<float>("getType");

public override bool Equals(object other) => CallAsBool("equals", other);
public override int GetHashCode() => Call<int>("hashCode");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using HuaweiMobileServices.Base;
using HuaweiMobileServices.Utils;
using System.Collections.Generic;
using UnityEngine;

namespace HuaweiMobileServices.ML.SkeletonDetection
{
public class MLSkeleton : JavaObjectWrapper
{

private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLSkeleton";

public MLSkeleton(AndroidJavaObject javaObject) : base(javaObject)
{
}

public MLSkeleton(string javaObjectCanonicalName, params object[] args) : base(javaObjectCanonicalName, args)
{
}

public IList<MLJoint> GetJoints() => CallAsWrapperList<MLJoint>("getJoints");


public MLJoint GetJointPoint(int pointType) => CallAsWrapper<MLJoint>("getJointPoint", pointType);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using HuaweiMobileServices.Base;
using HuaweiMobileServices.ML.Common;
using HuaweiMobileServices.ML.TextRecognition;
using HuaweiMobileServices.Utils;
using System.Collections.Generic;
using UnityEngine;

namespace HuaweiMobileServices.ML.SkeletonDetection
{
public class MLSkeletonAnalyzer: JavaObjectWrapper
{
private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer";

public MLSkeletonAnalyzer(AndroidJavaObject javaObject) : base(javaObject)
{
}

public MLSkeletonAnalyzer(string javaObjectCanonicalName, params object[] args) : base(javaObjectCanonicalName, args)
{
}

//SparseArray<MLSkeleton>
public IList<MLSkeleton> AnalyseFrame(MLFrame mLFrame) => CallAsWrapperList<MLSkeleton>("analyseFrame", mLFrame);

public ITask<IList<MLSkeleton>> AsyncAnalyseFrame(MLFrame mlFrame)
{
var task = Call<AndroidJavaObject>("asyncAnalyseFrame", mlFrame);
return new TaskWrapper<IList<MLSkeleton>>(task, AndroidJavaObjectExtensions.AsListFromWrappable<MLSkeleton>);
}

public float CaluteSimilarity(IList<MLSkeleton> skeleton1, IList<MLSkeleton> skeleton2) => Call<float>("getScore", skeleton1 ,skeleton2);

public void Stop() => Call("stop");

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using HuaweiMobileServices.ML.Common;
using HuaweiMobileServices.ML.LanguageDetection;
using HuaweiMobileServices.ML.LanguageDetection.Local;
using HuaweiMobileServices.Utils;
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

namespace HuaweiMobileServices.ML.SkeletonDetection
{
public class MLSkeletonAnalyzerFactory : JavaObjectWrapper
{
private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerFactory";
private static readonly AndroidJavaClass sJavaClass = new AndroidJavaClass(CLASS_NAME);

public MLSkeletonAnalyzerFactory(AndroidJavaObject javaObject) : base(javaObject)
{
}

public MLSkeletonAnalyzerFactory(string javaObjectCanonicalName, params object[] args) : base(javaObjectCanonicalName, args)
{
}

public MLSkeletonAnalyzerFactory(MLApplication mlApplication) : base(CLASS_NAME, mlApplication) { }

public static MLSkeletonAnalyzerFactory GetInstance() => sJavaClass.CallStaticAsWrapper<MLSkeletonAnalyzerFactory>("getInstance");

public MLSkeletonAnalyzer GetSkeletonAnalyzer() => CallAsWrapper<MLSkeletonAnalyzer>("getSkeletonAnalyzer");
public MLSkeletonAnalyzer GetSkeletonAnalyzer(MLSkeletonAnalyzerSetting setting) => CallAsWrapper<MLSkeletonAnalyzer>("getSkeletonAnalyzer", setting);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

using HuaweiMobileServices.ML.LanguageDetection.Local;
using HuaweiMobileServices.Utils;
using UnityEngine;

namespace HuaweiMobileServices.ML.SkeletonDetection
{
public class MLSkeletonAnalyzerSetting : JavaObjectWrapper
{
private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting";
private static readonly AndroidJavaClass sJavaClass = new AndroidJavaClass(CLASS_NAME);
public MLSkeletonAnalyzerSetting(AndroidJavaObject javaObject) : base(javaObject)
{
}

public MLSkeletonAnalyzerSetting(string javaObjectCanonicalName, params object[] args) : base(javaObjectCanonicalName, args)
{
}

public static int TYPE_NORMAL => sJavaClass.GetStatic<int>(nameof(TYPE_NORMAL));
public static int TYPE_YOGA => sJavaClass.GetStatic<int>(nameof(TYPE_YOGA));



public class Factory : JavaObjectWrapper
{
private const string CLASS_NAME = "com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting$Factory";
public Factory(AndroidJavaObject javaObject) : base(javaObject) { }
public Factory() : base(CLASS_NAME) { }

public MLSkeletonAnalyzerSetting Create() => CallAsWrapper<MLSkeletonAnalyzerSetting>("create");

public Factory SetAnalyzerType(int analyzerType) => CallAsWrapper<Factory>("setAnalyzerType", analyzerType);

}

}
}