package com.example.recscore;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class DanceScore {
private List<Map<String,Integer>> SCORE_RELU = new ArrayList<>();
DanceScore(){
Map<String,Integer> score_relu1 = new HashMap();
Map<String,Integer> score_relu4 = new HashMap();
Map<String,Integer> score_relu5 = new HashMap();
Map<String,Integer> score_relu6 = new HashMap();
Map<String,Integer> score_relu7 = new HashMap();
Map<String,Integer> score_relu3 = new HashMap();
Map<String,Integer> score_relu2 = new HashMap();
Map<String,Integer> score_relu8 = new HashMap();
Map<String,Integer> score_relu9 = new HashMap();
Map<String,Integer> score_relu10 = new HashMap();
score_relu1.put("st",0);
score_relu1.put("ed",3);
score_relu1.put("score",100);
SCORE_RELU.add(score_relu1);
score_relu2.put("st",5);
score_relu2.put("ed",10);
score_relu2.put("score",89);
SCORE_RELU.add(score_relu2);
score_relu3.put("st",10);
score_relu3.put("ed",15);
score_relu3.put("score",80);
SCORE_RELU.add(score_relu3);
score_relu4.put("st",15);
score_relu4.put("ed",20);
score_relu4.put("score",70);
SCORE_RELU.add(score_relu4);
score_relu5.put("st",20);
score_relu5.put("ed",30);
score_relu5.put("score",60);
SCORE_RELU.add(score_relu5);
score_relu6.put("st",30);
score_relu6.put("ed",50);
score_relu6.put("score",20);
SCORE_RELU.add(score_relu1);
score_relu7.put("st",90);
score_relu7.put("ed",180);
score_relu7.put("score",2);
SCORE_RELU.add(score_relu7);
score_relu8.put("st",-30);
score_relu8.put("ed",0);
score_relu8.put("score",20);
SCORE_RELU.add(score_relu8);
score_relu9.put("st",-90);
score_relu9.put("ed",-30);
score_relu9.put("score",2);
SCORE_RELU.add(score_relu9);
score_relu10.put("st",-180);
score_relu10.put("ed",-90);
score_relu10.put("score",20);
SCORE_RELU.add(score_relu10);
this.SCORE_RELU = SCORE_RELU;
}
//计算身体部位的夹角版本二:使用每个部位的开始点与结束点计算其与垂直正上方的夹角
public List<Map> getAngleByInfos_v2(List<Map> infs){
if (infs.size()>0) {
for (int i = 0; i < infs.size(); i++) {
double dx1 = (double)((int)infs.get(i).get("line_ed_x")-(int)infs.get(i).get("line_st_x"));
double dy1 = (double)((int)infs.get(i).get("line_ed_y")-(int)infs.get(i).get("line_st_y"));
double cosx1x2 = (dx1)/(Math.sqrt(Math.pow(dx1,2)+Math.pow(dy1,2)));
try{
int cobb;
cobb = (int)((dy1/Math.abs(dy1))* (Math.acos(cosx1x2) * 180 / Math.PI + 0.5));
Log.e("angles",String.valueOf(cobb));
infs.get(i).put("angles", (float) cobb);
}catch (Exception e){
System.out.println(e);
continue;
}
}
}
return infs;
}
//计算夹角
public List<Map> getAngleByInfos(List<Map> infs){
if (infs.size()>0){
for (int i = 0;i<infs.size();i++){
List<Map> inf__ = new ArrayList<>();
inf__.clear();
infs = helpAngleByInfos(infs,inf__,i,"st","ed","st","ed","ed");
infs = helpAngleByInfos(infs,inf__,i,"st","st","ed","st","ed");
infs = helpAngleByInfos(infs,inf__,i,"ed","ed","st","ed","st");
}
}
return infs;
}
public List<Map> helpAngleByInfos(List<Map> infs, List<Map> inf__,Integer i,String st,String ed,String st1,String mid1,String ed1){
for (int j = 0;j<infs.size();j++){
if (infs.get(j).get(st) == infs.get(i).get(ed) && i!=j){
inf__.add(infs.get(j));
}
}
if (inf__.size()>0){
for (int k = 0;k<inf__.size();k++){
double dx1 = (double)((int)inf__.get(k).get("line_ed_x")-(int)inf__.get(k).get("line_st_x"));
double dy1 = (double) ((int)inf__.get(k).get("line_ed_y")-(int)inf__.get(k).get("line_st_y"));
double dx = (double) ((int)infs.get(i).get("line_ed_x")-(int)infs.get(i).get("line_st_x"));
double dy = (double) ((int)infs.get(i).get("line_ed_y")-(int)infs.get(i).get("line_st_y"));
double cosx1x2 = (dx1*dx+dy1*dy)/(Math.sqrt(Math.pow(dx1,2)+Math.pow(dy1,2))*Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2)));
try {
int cobb = (int)(((dy1/Math.abs(dy1)))* (Math.acos(cosx1x2) * 180 / Math.PI + 0.5));
if (infs.get(i).containsKey("angles")) {
//List<Map> angles = (List<Map>) infs.get(i).get("angles");
Map<String, Float> angle = new HashMap();
angle.put("degree", (float) cobb);
angle.put("st", Float.valueOf( infs.get(i).get(st1).toString()));
angle.put("mid", Float.valueOf( infs.get(i).get(mid1).toString()));
angle.put("ed", Float.valueOf( inf__.get(k).get(ed1).toString()));
((List<Map>) infs.get(i).get("angles")).add(angle);
} else {
List<Map> angles = new ArrayList<>();
Map<String, Float> angle = new HashMap();
angle.put("degree", (float) cobb);
angle.put("st", Float.valueOf( infs.get(i).get(st1).toString()));
angle.put("mid", Float.valueOf( infs.get(i).get(mid1).toString()));
angle.put("ed", Float.valueOf( inf__.get(k).get(ed1).toString()));
angles.add(angle);
infs.get(i).put("angles", angles);
}
} catch (Exception e){
System.out.println(e);
continue;
}
}
}
return infs;
}
//计算得分的第二个版本:v2 2018 0821
public float getScoreByInfos_v2(List<Map> infsmother,List<Map> infsson,boolean debug,String summays){
Log.d("学生视频长度danceScore",""+infsson.size());
Log.d("标准视频长度danceScore",""+infsmother.size());
Map<String,Double> scoreinf = new HashMap();
Map<String,Double> scoreStd = new HashMap();
//{ {1, 2}, {1, 5}, {2, 3}, {3, 4}, {5, 6}, {6, 7}, {1, 8}, {8, 9}, {9, 10}, {1, 11},
// {11, 12}, {12, 13}, {1, 0}, {0, 14}, {14, 16}, {0, 15}, {15, 17}}
//身体各个部位的权重赋值
//脖子-肩膀
scoreStd.put("0.0",0.1);
scoreStd.put("1.0",0.1);
//肩膀到胳膊,手
scoreStd.put("2.0",0.3);
scoreStd.put("3.0",4.0);
//
scoreStd.put("4.0",0.3);
scoreStd.put("5.0",4.0);
//
scoreStd.put("6.0",0.01);
scoreStd.put("7.0",0.3);
scoreStd.put("8.0",4.0);
//
scoreStd.put("9.0",0.05);
scoreStd.put("10.0",0.5);
scoreStd.put("11.0",4.0);
//
scoreStd.put("12.0",0.1);
scoreStd.put("13.0",0.1);
scoreStd.put("14.0",0.05);
scoreStd.put("15.0",0.05);
scoreStd.put("16.0",0.01);
scoreStd.put("17.0",0.01);
if (infsmother.size()>0 && infsson.size()>0){
for (int i=0;i<infsmother.size();i++){
Map inf =infsmother.get(i);
int sign = 0;
for(int
没有合适的资源?快使用搜索试试~ 我知道了~
基于人体姿态识别的舞蹈打分androidapp开发源码+带apk.zip
共58个文件
xml:13个
png:10个
java:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 158 浏览量
2023-05-15
11:32:28
上传
评论 2
收藏 106.1MB ZIP 举报
温馨提示
基于人体姿态识别的舞蹈打分androidapp开发源码+带apk.zip 基于人体姿态识别的舞蹈打分androidapp开发源码+带apk.zip 基于人体姿态识别的舞蹈打分androidapp开发源码+带apk.zip 【资源项目介绍】 做的一个基于人体姿态识别的舞蹈打分android开发项目,个人负责了算法与模型模块的模块代码的开发,前端与界面来自另外一位android开发的朋友,由于时间过去两年多了,比较久远,许多模型与算法都已经有的长足的更新与改变,因此将这个以前的开发项目开放出来,偶尔把玩下,以后如果有时间可以更新下最新的模型与算法继续玩玩。
资源推荐
资源详情
资源评论
收起资源包目录
基于人体姿态识别的舞蹈打分androidapp开发源码+带apk.zip (58个子文件)
gradle.properties 726B
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 230B
app
src
androidTest
java
com
example
zhaowenzhu
humanpos
ExampleInstrumentedTest.java 746B
test
java
com
example
zhaowenzhu
humanpos
ExampleUnitTest.java 392B
main
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
colors.xml 208B
strings.xml 71B
styles.xml 383B
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 397B
proguard-rules.pro 751B
build.gradle 893B
.gitignore 7B
gradlew.bat 2KB
build.gradle 546B
.idea
codeStyles
Project.xml 2KB
runConfigurations.xml 564B
misc.xml 2KB
settings.gradle 28B
release
2.jpg 127KB
1.jpg 176KB
gradlew 5KB
说明文档.md 763B
dance.apk 72.33MB
recscore
src
androidTest
java
com
example
recscore
ExampleInstrumentedTest.java 729B
test
java
com
example
recscore
ExampleUnitTest.java 381B
main
assets
graph_opt.pb 7.44MB
graph_freeze.pb 7.61MB
graph.pb 2.09MB
java
com
example
recscore
HumanPoseGet.java 30KB
BodyPart.java 2KB
Usage.java 827B
recscore.rar 12KB
Human.java 3KB
DanceScore.java 30KB
res
values
strings.xml 71B
AndroidManifest.xml 107B
proguard-rules.pro 751B
libs
armeabi-v7a
libtensorflow_inference.so 13.34MB
libandroid_tensorflow_inference_java .jar 45KB
arm64-v8a
libtensorflow_inference.so 19.39MB
x86_64
libtensorflow_inference.so 20.8MB
x86
libtensorflow_inference.so 20.2MB
build.gradle 1KB
.gitignore 7B
共 58 条
- 1
资源评论
热爱编码的z同学
- 粉丝: 1791
- 资源: 2128
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功