Commit 0ddeb16d by tangjiale

废弃mixins和behaviors,原生小程序受限无法动态配置

parent 1b60b956
...@@ -3,14 +3,11 @@ ...@@ -3,14 +3,11 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-01-13 17:47:44 * @Date: 2022-01-13 17:47:44
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 15:08:24 * @LastEditTime: 2022-06-08 10:39:10
*/ */
// wx.setStorageSync('host', 'https://sdb.youchengzhang.cn/'); //正式环境 // wx.setStorageSync('host', 'https://sdb.youchengzhang.cn/'); //正式环境
wx.setStorageSync('host', 'https://test.xiaobentiyu.cn'); //测试环境 wx.setStorageSync('host', 'https://test.xiaobentiyu.cn'); //测试环境
//引入混合模式
require('./wx-mixins.js')
//ai姿势识别 //ai姿势识别
const fetchWechat = require('fetch-wechat') const fetchWechat = require('fetch-wechat')
const tf = require('@tensorflow/tfjs-core') const tf = require('@tensorflow/tfjs-core')
...@@ -22,7 +19,7 @@ App({ ...@@ -22,7 +19,7 @@ App({
onLaunch: function () { onLaunch: function () {
this.autoUpdate(); this.autoUpdate();
wx.setStorageSync('appId', 'wxd56eb1b3b99e5cf0'); wx.setStorageSync('appId', 'wx7d7fbc0e6746baf5');
plugins.configPlugin({ plugins.configPlugin({
// polyfill fetch function // polyfill fetch function
......
...@@ -44,8 +44,8 @@ ...@@ -44,8 +44,8 @@
}, },
"compileType": "miniprogram", "compileType": "miniprogram",
"libVersion": "2.17.0", "libVersion": "2.17.0",
"appid": "wxd56eb1b3b99e5cf0", "appid": "wx7d7fbc0e6746baf5",
"projectname": "wx-tfs-demo", "projectname": "奔腾宝贝",
"simulatorType": "wechat", "simulatorType": "wechat",
"simulatorPluginLibVersion": {}, "simulatorPluginLibVersion": {},
"editorSetting": { "editorSetting": {
......
...@@ -58,7 +58,7 @@ Page({ ...@@ -58,7 +58,7 @@ Page({
that.data.innerAudioContext.obeyMuteSwitch = false; that.data.innerAudioContext.obeyMuteSwitch = false;
that.data.innerAudioContext2.obeyMuteSwitch = false; that.data.innerAudioContext2.obeyMuteSwitch = false;
that.loadMoveNet(); // that.loadMoveNet();
}) })
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 16:42:40 * @LastEditTime: 2022-06-08 11:01:27
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -16,148 +16,151 @@ var angle_boby = 0; ...@@ -16,148 +16,151 @@ var angle_boby = 0;
var angle_hand_l = 0; var angle_hand_l = 0;
module.exports = { module.exports = Behavior({
onLoad:function(option){ onLoad:function(option){
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/push-ups-bg.png'
}, },
actionSend(object,app){ // 识别点 methods:{
var that = this; actionSend(object,app){ // 识别点
//console.log('app.globalData.movenet',app.globalData.movenet) var that = this;
app.globalData.movenet.estimatePoses(object).then(function (res) { //console.log('app.globalData.movenet',app.globalData.movenet)
var ctx = that.ctx, app.globalData.movenet.estimatePoses(object).then(function (res) {
keypoimts = res[0].keypoints var ctx = that.ctx,
ctx.clearRect(0, 0, that.canvas.width, that.canvas.height) keypoimts = res[0].keypoints
//console.log('关键点',keypoimts); ctx.clearRect(0, 0, that.canvas.width, that.canvas.height)
//判断当前点位信任度,信任度低过多的舍弃, //console.log('关键点',keypoimts);
var num = 0; //判断当前点位信任度,信任度低过多的舍弃,
for(var i = 0; i < keypoimts.length; i++){ var num = 0;
if(keypoimts[i].score < 0.3){ for(var i = 0; i < keypoimts.length; i++){
num++ if(keypoimts[i].score < 0.3){
} num++
if(num > 7){ }
//console.log('不合格') if(num > 7){
return false; //console.log('不合格')
} return false;
}
//计算俯卧撑关键点
angle_boby = that.angle(keypoimts[12],keypoimts[6],keypoimts[16]);
//计算俯卧撑关键点
angle_hand_l = that.angle(keypoimts[8],keypoimts[6],keypoimts[10]);
console.log(angle_hand_l)
if(that.data.aiState == 1){
if(angle_boby >= 60){
correct++;
console.log('姿势识别成功',correct)
if(correct >= 5){
that.setData({
aiState:2
},()=>{
that.start();
})
} }
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
}
//通过角度判断个数
if(that.data.aiState == 3){ //计算俯卧撑关键点
if(angle_boby >= 150 && angle_hand_l >= 130){ angle_boby = that.angle(keypoimts[12],keypoimts[6],keypoimts[16]);
if(dir == 0){ //计算俯卧撑关键点
count = count + 0.5; angle_hand_l = that.angle(keypoimts[8],keypoimts[6],keypoimts[10]);
dir = 1; console.log(angle_hand_l)
that.setData({ if(that.data.aiState == 1){
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', if(angle_boby >= 60){
aiCount:Math.floor(count) correct++;
},()=>{ console.log('姿势识别成功',correct)
setTimeout(()=>{ if(correct >= 5){
that.setData({ that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', aiState:2
}) },()=>{
},200) that.start();
}) })
}
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
//console.log('起身')
} }
//站直 //通过角度判断个数
if(angle_boby >= 150 && angle_hand_l <= 85){ if(that.data.aiState == 3){
if(dir == 1){ if(angle_boby >= 150 && angle_hand_l >= 130){
count = count + 0.5; if(dir == 0){
dir = 0; count = count + 0.5;
that.setData({ dir = 1;
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', that.setData({
aiCount:Math.floor(count) levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
},()=>{ aiCount:Math.floor(count)
setTimeout(()=>{ },()=>{
that.setData({ setTimeout(()=>{
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', that.setData({
}) levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
},200) })
}) },200)
})
}
//console.log('起身')
} }
//站直
if(angle_boby >= 150 && angle_hand_l <= 85){
if(dir == 1){
count = count + 0.5;
dir = 0;
that.setData({
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
aiCount:Math.floor(count)
},()=>{
setTimeout(()=>{
that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
})
},200)
})
}
}
//console.log('下去')
} }
//console.log('下去') }).catch(function (err) {
} console.log(err)
}).catch(function (err) { });
console.log(err) },
});
},
//上传成绩
save(){
//上传成绩 var that = this;
save(){ if(that.data.aiCount == 0){
var that = this;
if(that.data.aiCount == 0){
that.setData({
aiState:4
})
return false;
}
var postData = {
projectId: 14, //项目id
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
sportTime: that.data.sportTime,//运动时长 单位为s
isDev:0,
videoUrl:that.data.uuid
}
console.log('当前的参数',postData)
API.requestAll('/project/addReord', postData, (res) => {
clearTimeout(this.data.loading);
var uid = res.data.id;
if(res.code == 200){
// wx.redirectTo({
// url: '../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1',
// })
}else{
that.setData({ that.setData({
aiState:4 aiState:4
}) })
return false;
} }
}) var postData = {
}, projectId: 14, //项目id
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
//计算角度 sportTime: that.data.sportTime,//运动时长 单位为s
angle(one,two,three){ isDev:0,
var that = this; videoUrl:that.data.uuid
let A = {X:one.x,Y:one.y} }
let B = {X:two.x,Y:two.y} console.log('当前的参数',postData)
let C = {X:three.x,Y:three.y} API.requestAll('/project/addReord', postData, (res) => {
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2)); clearTimeout(that.data.waitTimer);
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2)); var uid = res.data.id;
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2)); if(res.code == 200){
var cosA = ( // wx.redirectTo({
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2) // url: '../../../packageA/pushUp/share/share?share=0' + '&id=' + uid + '&showMedal=1&sportTime='+that.formatSeconds(that.data.sportTime),
) / ( // })
2 * AB * AC }else{
); that.setData({
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI ); aiState:4
return angleA; })
}, }
} })
},
//计算角度
angle(one,two,three){
var that = this;
let A = {X:one.x,Y:one.y}
let B = {X:two.x,Y:two.y}
let C = {X:three.x,Y:three.y}
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2));
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2));
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2));
var cosA = (
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2)
) / (
2 * AB * AC
);
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );
return angleA;
},
}
})
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 16:20:56 * @LastEditTime: 2022-06-08 11:13:58
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -16,147 +16,151 @@ var angle_foot = 0; ...@@ -16,147 +16,151 @@ var angle_foot = 0;
var angle_hand = 0; var angle_hand = 0;
var correct = 0;//识别成功次数 var correct = 0;//识别成功次数
module.exports = { module.exports = Behavior({
onLoad:function(option){ onLoad:function(option){
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png'
}, },
actionSend(object,app){ // 识别点 methods:{
var that = this; actionSend(object,app){ // 识别点
//console.log('app.globalData.movenet',app.globalData.movenet) console.log('什么鬼啊------------')
app.globalData.movenet.estimatePoses(object).then(function (res) { var that = this;
var ctx = that.ctx, //console.log('app.globalData.movenet',app.globalData.movenet)
keypoimts = res[0].keypoints app.globalData.movenet.estimatePoses(object).then(function (res) {
ctx.clearRect(0, 0, that.canvas.width, that.canvas.height) var ctx = that.ctx,
//console.log('关键点',keypoimts); keypoimts = res[0].keypoints
//判断当前点位信任度,信任度低过多的舍弃, ctx.clearRect(0, 0, that.canvas.width, that.canvas.height)
var num = 0; //console.log('关键点',keypoimts);
for(var i = 0; i < keypoimts.length; i++){ //判断当前点位信任度,信任度低过多的舍弃,
if(keypoimts[i].score < 0.3){ var num = 0;
num++ for(var i = 0; i < keypoimts.length; i++){
} if(keypoimts[i].score < 0.3){
if(num > 7){ num++
//console.log('不合格') }
return false; if(num > 7){
} //console.log('不合格')
} return false;
//计算开合跳脚部关键点
angle_foot = that.angle(keypoimts[11],keypoimts[15],keypoimts[16]);
//计算开合跳手部关键点
angle_hand = that.angle(keypoimts[5],keypoimts[11],keypoimts[7]);
if(that.data.aiState == 1){
console.log('我是开合跳')
if(angle_hand < 60){
correct++;
console.log('姿势识别成功',correct)
if(correct >= 10){
that.setData({
aiState:2
},()=>{
that.start();
})
} }
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
}
//通过角度判断个数
if(that.data.aiState == 3){ //计算开合跳脚部关键点
console.log('当前参数帧数',that.data.showTime,angle_foot) angle_foot = that.angle(keypoimts[11],keypoimts[15],keypoimts[16]);
if(angle_foot >= 20 && angle_hand > 120){ //计算开合跳手部关键点
if(dir == 0){ angle_hand = that.angle(keypoimts[5],keypoimts[11],keypoimts[7]);
count = count + 0.5; if(that.data.aiState == 1){
dir = 1; console.log('我是开合跳')
that.setData({ if(angle_hand < 60){
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', correct++;
aiCount:Math.floor(count) console.log('姿势识别成功',correct)
},()=>{ if(correct >= 10){
setTimeout(()=>{ that.setData({
that.setData({ aiState:2
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', },()=>{
}) that.start();
},200) })
}) }
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
} }
//站直 //通过角度判断个数
if(angle_foot <= 20 && angle_hand < 30){ if(that.data.aiState == 3){
if(dir == 1){ console.log('当前参数帧数',that.data.showTime,angle_foot)
count = count + 0.5; if(angle_foot >= 20 && angle_hand > 120){
dir = 0; if(dir == 0){
that.setData({ count = count + 0.5;
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', dir = 1;
aiCount:Math.floor(count) that.setData({
},()=>{ levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
setTimeout(()=>{ aiCount:Math.floor(count)
that.setData({ },()=>{
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', setTimeout(()=>{
}) that.setData({
},200) levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
}) })
},200)
})
}
}
//站直
if(angle_foot <= 20 && angle_hand < 30){
if(dir == 1){
count = count + 0.5;
dir = 0;
that.setData({
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
aiCount:Math.floor(count)
},()=>{
setTimeout(()=>{
that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
})
},200)
})
}
} }
} }
} }).catch(function (err) {
}).catch(function (err) { console.log(err)
console.log(err) });
}); },
},
//上传成绩
//上传成绩 save(){
save(){ var that = this;
var that = this; if(that.data.aiCount == 0){
if(that.data.aiCount == 0){
that.setData({
aiState:4
})
return false;
}
var postData = {
projectId: 11, //项目id 比如跳绳
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
sportTime: that.data.sportTime,//运动时长 单位为s
isDev:0,
videoUrl:that.data.uuid
}
console.log('当前的参数',postData)
API.requestAll('/project/addReord', postData, (res) => {
clearTimeout(this.data.loading);
var uid = res.data.id;
if(res.code == 200){
// wx.redirectTo({
// url: '../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1',
// })
}else{
that.setData({ that.setData({
aiState:4 aiState:4
}) })
return false;
} }
}) var postData = {
}, projectId: 11, //项目id 比如跳绳
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
//计算角度 sportTime: that.data.sportTime,//运动时长 单位为s
angle(one,two,three){ isDev:0,
var that = this; videoUrl:that.data.uuid
let A = {X:one.x,Y:one.y} }
let B = {X:two.x,Y:two.y} console.log('当前的参数',postData)
let C = {X:three.x,Y:three.y} API.requestAll('/project/addReord', postData, (res) => {
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2)); clearTimeout(that.data.waitTimer);
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2)); var uid = res.data.id;
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2)); if(res.code == 200){
var cosA = ( // wx.redirectTo({
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2) // url: '../../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1&sportTime='+that.formatSeconds(that.data.sportTime),
) / ( // })
2 * AB * AC }else{
); that.setData({
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI ); aiState:4
return angleA; })
}, }
} })
},
//计算角度
angle(one,two,three){
var that = this;
let A = {X:one.x,Y:one.y}
let B = {X:two.x,Y:two.y}
let C = {X:three.x,Y:three.y}
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2));
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2));
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2));
var cosA = (
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2)
) / (
2 * AB * AC
);
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );
return angleA;
},
}
})
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 16:34:33 * @LastEditTime: 2022-06-08 11:03:58
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -15,148 +15,151 @@ var dir = 0;// 0躺下 1坐起 ...@@ -15,148 +15,151 @@ var dir = 0;// 0躺下 1坐起
var angle_boby = 0; var angle_boby = 0;
var angle_tui = 0; var angle_tui = 0;
module.exports = { module.exports = Behavior({
onLoad:function(option){ onLoad:function(option){
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png'
}, },
actionSend(object,app){ // 识别点 methods:{
var that = this; actionSend(object,app){ // 识别点
//console.log('app.globalData.movenet',app.globalData.movenet) var that = this;
app.globalData.movenet.estimatePoses(object).then(function (res) { //console.log('app.globalData.movenet',app.globalData.movenet)
var ctx = that.ctx, app.globalData.movenet.estimatePoses(object).then(function (res) {
keypoimts = res[0].keypoints var ctx = that.ctx,
ctx.clearRect(0, 0, that.canvas.width, that.canvas.height) keypoimts = res[0].keypoints
//console.log('关键点',keypoimts); ctx.clearRect(0, 0, that.canvas.width, that.canvas.height)
//判断当前点位信任度,信任度低过多的舍弃, //console.log('关键点',keypoimts);
var num = 0; //判断当前点位信任度,信任度低过多的舍弃,
for(var i = 0; i < keypoimts.length; i++){ var num = 0;
if(keypoimts[i].score < 0.3){ for(var i = 0; i < keypoimts.length; i++){
num++ if(keypoimts[i].score < 0.3){
} num++
if(num > 7){ }
//console.log('不合格') if(num > 7){
return false; //console.log('不合格')
} return false;
}
//计算深蹲关键点
angle_boby = that.angle(keypoimts[12],keypoimts[6],keypoimts[16]);
//计算深蹲关键点
angle_tui = that.angle(keypoimts[13],keypoimts[11],keypoimts[15]);
//console.log('当前参数',angle_boby,angle_tui)
if(that.data.aiState == 1){
if(angle_boby >= 150){
correct++;
console.log('姿势识别成功',correct)
if(correct >= 5){
that.setData({
aiState:2
},()=>{
that.start();
})
} }
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
}
//通过角度判断个数
if(that.data.aiState == 3){ //计算深蹲关键点
if(angle_tui > 170){ angle_boby = that.angle(keypoimts[12],keypoimts[6],keypoimts[16]);
if(dir == 1){ //计算深蹲关键点
count = count + 0.5; angle_tui = that.angle(keypoimts[13],keypoimts[11],keypoimts[15]);
dir = 0; //console.log('当前参数',angle_boby,angle_tui)
that.setData({ if(that.data.aiState == 1){
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', if(angle_boby >= 150){
aiCount:Math.floor(count) correct++;
},()=>{ console.log('姿势识别成功',correct)
setTimeout(()=>{ if(correct >= 5){
that.setData({ that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', aiState:2
}) },()=>{
},200) that.start();
}) })
}
}else{
correct = 0;
console.log('姿势识别失败',correct)
} }
console.log('下蹲')
} }
//站直 //通过角度判断个数
if(angle_tui <= 100){ if(that.data.aiState == 3){
if(dir == 0){ if(angle_tui > 170){
count = count + 0.5; if(dir == 1){
dir = 1; count = count + 0.5;
that.setData({ dir = 0;
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', that.setData({
aiCount:Math.floor(count) levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
},()=>{ aiCount:Math.floor(count)
setTimeout(()=>{ },()=>{
that.setData({ setTimeout(()=>{
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', that.setData({
}) levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
},200) })
}) },200)
})
}
console.log('下蹲')
}
//站直
if(angle_tui <= 100){
if(dir == 0){
count = count + 0.5;
dir = 1;
that.setData({
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
aiCount:Math.floor(count)
},()=>{
setTimeout(()=>{
that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
})
},200)
})
}
console.log('站直')
} }
console.log('站直')
} }
} }).catch(function (err) {
}).catch(function (err) { console.log(err)
console.log(err) });
}); },
},
//上传成绩
//上传成绩 save(){
save(){ var that = this;
var that = this; if(that.data.aiCount == 0){
if(that.data.aiCount == 0){
that.setData({
aiState:4
})
return false;
}
var postData = {
projectId: 13, //项目id
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
sportTime: that.data.sportTime,//运动时长 单位为s
isDev:0,
videoUrl:that.data.uuid
}
console.log('当前的参数',postData)
API.requestAll('/project/addReord', postData, (res) => {
clearTimeout(this.data.loading);
var uid = res.data.id;
if(res.code == 200){
// wx.redirectTo({
// url: '../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1',
// })
}else{
that.setData({ that.setData({
aiState:4 aiState:4
}) })
return false;
} }
}) var postData = {
}, projectId: 13, //项目id
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
//计算角度 sportTime: that.data.sportTime,//运动时长 单位为s
angle(one,two,three){ isDev:0,
var that = this; videoUrl:that.data.uuid
let A = {X:one.x,Y:one.y} }
let B = {X:two.x,Y:two.y} console.log('当前的参数',postData)
let C = {X:three.x,Y:three.y} API.requestAll('/project/addReord', postData, (res) => {
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2)); clearTimeout(that.data.waitTimer);
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2)); var uid = res.data.id;
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2)); if(res.code == 200){
var cosA = ( // wx.redirectTo({
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2) // url: '../../../packageA/deepSquat/share/sahre?share=0' + '&id=' + uid + '&showMedal=1&sportTime='+that.formatSeconds(that.data.sportTime),
) / ( // })
2 * AB * AC }else{
); that.setData({
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI ); aiState:4
return angleA; })
}, }
} })
},
//计算角度
angle(one,two,three){
var that = this;
let A = {X:one.x,Y:one.y}
let B = {X:two.x,Y:two.y}
let C = {X:three.x,Y:three.y}
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2));
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2));
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2));
var cosA = (
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2)
) / (
2 * AB * AC
);
var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );
return angleA;
},
}
})
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 17:21:47 * @LastEditTime: 2022-06-08 11:05:18
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -13,142 +13,144 @@ var correct = 0;//识别成功次数 ...@@ -13,142 +13,144 @@ var correct = 0;//识别成功次数
var dir = 0;// 0躺下 1坐起 var dir = 0;// 0躺下 1坐起
module.exports = { module.exports = Behavior({
onLoad:function(option){ onLoad:function(option){
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/bg-sit.png'
}, },
actionSend(object,app){ // 识别点 methods:{
var that = this; actionSend(object,app){ // 识别点
//console.log('app.globalData.movenet',app.globalData.movenet) var that = this;
app.globalData.movenet.estimatePoses(object).then(function (res) { //console.log('app.globalData.movenet',app.globalData.movenet)
var ctx = that.ctx, app.globalData.movenet.estimatePoses(object).then(function (res) {
keypoimts = res[0].keypoints var ctx = that.ctx,
ctx.clearRect(0, 0, that.canvas.width, that.canvas.height) keypoimts = res[0].keypoints
//console.log('关键点',keypoimts); ctx.clearRect(0, 0, that.canvas.width, that.canvas.height)
//判断当前点位信任度,信任度低过多的舍弃, //console.log('关键点',keypoimts);
var num = 0; //判断当前点位信任度,信任度低过多的舍弃,
for(var i = 0; i < keypoimts.length; i++){ var num = 0;
if(keypoimts[i].score < 0.3){ for(var i = 0; i < keypoimts.length; i++){
num++ if(keypoimts[i].score < 0.3){
num++
}
if(num > 7){
//console.log('不合格')
return false;
}
} }
if(num > 7){
//console.log('不合格') that.angle(keypoimts[11],keypoimts[5],keypoimts[13])
return false;
} }).catch(function (err) {
} console.log(err)
});
that.angle(keypoimts[11],keypoimts[5],keypoimts[13]) },
}).catch(function (err) {
console.log(err) //上传成绩
}); save(){
}, var that = this;
if(that.data.aiCount == 0 || that.data.aiCount > 100){
//上传成绩
save(){
var that = this;
if(that.data.aiCount == 0){
that.setData({
aiState:4
})
return false;
}
var postData = {
projectId: 2, //项目id
sportValue: that.data.aiCount,//运动值
sourceType: 21, //1 活动,2课程
sportTime: that.data.sportTime,//运动时长 单位为s
isDev:0,
videoUrl:that.data.uuid
}
console.log('当前的参数',postData)
API.requestAll('/project/addReord', postData, (res) => {
clearTimeout(this.data.loading);
var uid = res.data.id;
if(res.code == 200){
// wx.redirectTo({
// url: '../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1',
// })
}else{
that.setData({ that.setData({
aiState:4 aiState:4
}) })
return false;
} }
}) var postData = {
}, projectId: 2, //项目id
sportValue: that.data.aiCount,//运动值
//计算角度 sourceType: 21, //1 活动,2课程
angle(one,two,three){ sportTime: that.data.sportTime,//运动时长 单位为s
var that = this; isDev:0,
let A = {X:one.x,Y:one.y} videoUrl:that.data.uuid
let B = {X:two.x,Y:two.y} }
let C = {X:three.x,Y:three.y} console.log('当前的参数',postData)
var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2)); API.requestAll('/project/addReord', postData, (res) => {
var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2)); clearTimeout(that.data.waitTimer);
var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2)); var uid = res.data.id;
var cosA = ( if(res.code == 200){
Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2) // wx.redirectTo({
) / ( // url: '../../../packageA/sitUp/share/share?share=0' + '&id=' + uid + '&showMedal=1&sportTime='+that.formatSeconds(that.data.sportTime),
2 * AB * AC // })
); }else{
var angleA = 0; that.setData({
if(that.data.aiState > 0){ aiState:4
angleA = Math.round( Math.acos(cosA) * 180 / Math.PI ); })
} }
//console.log('当前的状态',that.data.type,angleA) })
if(that.data.aiState == 1){ },
if(angleA >= 120 && angleA <= 150){
correct ++; //计算角度
console.log('姿势识别成功',correct); angle(one,two,three){
if(correct >= 5){ var that = this;
that.setData({ let A = {X:one.x,Y:one.y}
aiState:2 let B = {X:two.x,Y:two.y}
},()=>{ let C = {X:three.x,Y:three.y}
that.start(); var AB = Math.sqrt(Math.pow(A.X - B.X, 2) + Math.pow(A.Y - B.Y, 2));
}) var AC = Math.sqrt(Math.pow(A.X - C.X, 2) + Math.pow(A.Y - C.Y, 2));
} var BC = Math.sqrt(Math.pow(B.X - C.X, 2) + Math.pow(B.Y - C.Y, 2));
}else{ var cosA = (
correct = 0; Math.pow(AB, 2) + Math.pow(AC, 2) - Math.pow(BC, 2)
) / (
2 * AB * AC
);
var angleA = 0;
if(that.data.aiState > 0){
angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );
} }
} //console.log('当前的状态',that.data.type,angleA)
//通过角度判断个数 if(that.data.aiState == 1){
if(that.data.aiState == 3){ if(angleA >= 120 && angleA <= 150){
if(angleA <= 55){ correct ++;
if(dir == 0){ console.log('姿势识别成功',correct);
count = count + 0.5; if(correct >= 5){
dir = 1; that.setData({
that.setData({ aiState:2
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', },()=>{
aiCount:Math.floor(count) that.start();
},()=>{ })
setTimeout(()=>{ }
that.setData({ }else{
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', correct = 0;
})
},200)
})
} }
} }
if(angleA >= 120){ //通过角度判断个数
if(dir == 1){ if(that.data.aiState == 3){
count = count + 0.5; if(angleA <= 55){
dir = 0; if(dir == 0){
that.setData({ count = count + 0.5;
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;', dir = 1;
aiCount:Math.floor(count) that.setData({
},()=>{ levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
setTimeout(()=>{ aiCount:Math.floor(count)
that.setData({ },()=>{
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;', setTimeout(()=>{
}) that.setData({
},200) levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
}) })
},200)
})
}
}
if(angleA >= 120){
if(dir == 1){
count = count + 0.5;
dir = 0;
that.setData({
levelfontsize: 'font-size:40px;color:#FFFF00;line-height:44px;',
aiCount:Math.floor(count)
},()=>{
setTimeout(()=>{
that.setData({
levelfontsize: 'font-size:34px;color:#FFFFFF;line-height:48px;',
})
},200)
})
}
} }
} }
} },
}, }
} })
var app = getApp() var app = getApp()
var poseDetection = require('@tensorflow-models/pose-detection'); var poseDetection = require('@tensorflow-models/pose-detection');
//引入混合模式
var flagTimer = null; var flagTimer = null;
var time = 0; var time = 0;
var iosNum = 0;//ios不能重复播放同一地址音频,后加一位数,加时间戳不行 var iosNum = 0;//ios不能重复播放同一地址音频,后加一位数,加时间戳不行
const aiSportType = app._aiSportType || '1' const aiSportType = app._aiSportType || '1'
var ts = require('../ai-mixins/ai-gtjz-mixins.js') //跳绳 var ts = require('../ai-mixins/ai-ts-mixins.js') //跳绳
var ywqz = require('../ai-mixins/ai-ywqz-mixins.js') //仰卧起坐 var ywqz = require('../ai-mixins/ai-ywqz-mixins.js') //仰卧起坐
var tjz = require('../ai-mixins/ai-tjz-mixins.js') //踢毽子 var tjz = require('../ai-mixins/ai-tjz-mixins.js') //踢毽子
var kht = require('../ai-mixins/ai-kht-mixins.js') //开合跳 var kht = require('../ai-mixins/ai-kht-mixins.js') //开合跳
...@@ -28,8 +30,12 @@ const sportObj = { ...@@ -28,8 +30,12 @@ const sportObj = {
16:ydtt, //原地踢腿 16:ydtt, //原地踢腿
17:ydp, //原地跑 17:ydp, //原地跑
} }
console.log('aiSportType',aiSportType)
Page({ Page({
mixins: [sportObj[aiSportType]], // mixins: [sportObj[aiSportType]],
behaviors: [sportObj[aiSportType]],
name:'ai-sport',
data: { data: {
fps:20,//控制频率 fps:20,//控制频率
...@@ -58,6 +64,7 @@ Page({ ...@@ -58,6 +64,7 @@ Page({
levelfontsize:'', levelfontsize:'',
sportTime:60, //运动时长 sportTime:60, //运动时长
skipType:1, //当前跳绳模式 0两者都行 1 双脚 2 单双脚交替
}, },
onLoad: function (options) { onLoad: function (options) {
...@@ -68,7 +75,7 @@ Page({ ...@@ -68,7 +75,7 @@ Page({
//运动时长(秒) //运动时长(秒)
if(options.sportTime){ if(options.sportTime){
// 30/60/120/180 // 30/60/120/180
this.setData({sportTime:options.sportTime}) this.setData({sportTime:options.sportTime,skipType:options.type})
} }
// 音频/语音交互相关 // 音频/语音交互相关
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<canvas type="2d" id="myCanvas" class="canvas"></canvas> <canvas type="2d" id="myCanvas" class="canvas"></canvas>
</camera> </camera>
<view wx:if="{{aiState == 1 || aiState == 6}}"> <view wx:if="{{aiState == 1 || aiState == 6}}">
<image class="help-img" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png"></image> <image class="help-img" wx:if="{{showImageUrl}}" src="{{showImageUrl}}"></image>
<view class="help"> <view class="help">
<view class="title">互动小提示</view> <view class="title">互动小提示</view>
<view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view> <view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view>
......
...@@ -109,7 +109,7 @@ Page({ ...@@ -109,7 +109,7 @@ Page({
start(e){ start(e){
//运动时常 //运动时常
let time = this.data.timeList[this.data.popupActive].value let time = this.data.timeList[this.data.popupActive].value
if(this.data.sportDetail.id == 2){ //仰卧起坐 if(this.data.sportDetail.id == 2){ //仰卧起坐
wx.navigateTo({ wx.navigateTo({
url:'../../../subPages/sport/ai-ywqz-sport/ai-ywqz-sport?sportTime=' + time, url:'../../../subPages/sport/ai-ywqz-sport/ai-ywqz-sport?sportTime=' + time,
......
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-05-11 17:06:34
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 15:16:02
*/
//代码转自:https://blog.csdn.net/yezi__6/article/details/118362069
//微信小程序中优先级为 Page > Mixins,所以需要劫持并改写 Page 函数,最后再重新把它释放出来
function mixinPage () {
// 保存原生的 Page 函数
const originPage = Page
Page = (options) => {
const mixins = options.mixins
// mixins 必须为数组
if (Array.isArray(mixins)) {
delete options.mixins
// mixins 注入并执行相应逻辑
options = mergePage(mixins, options)
}
originPage(options)
}
}
const ORIGIN_PROPERTIES_PAGE = [
'data'
]
const ORIGIN_METHODS = [
'onLoad',
'onReady',
'onShow',
'onHide',
'onUnload',
'onPullDownRefresh',
'onReachBottom',
'onShareAppMessage',
'onPageScroll',
'onResize',
'onTabItemTap'
]
function mergePage (mixins, options) {
mixins.forEach((mixin) => {
if (typeof mixin == 'object') {
// 遍历 mixin 里面的所有属性
for (let key in mixin) {
// for (let [key, value] of Object.entries(mixin)) {
if (ORIGIN_PROPERTIES_PAGE.includes(key)) {
// 内置对象属性混入
options[key] = { ...mixin[key], ...options[key] }
} else if (ORIGIN_METHODS.includes(key)) {
// 内置方法属性混入,优先执行混入的部分
const originFunc = options[key]
options[key] = function (...args) {
mixin[key].call(this, ...args)
return originFunc && originFunc.call(this, ...args)
}
} else {
// 自定义方法混入
options = { ...mixin, ...options }
}
}
}
})
return options
}
mixinPage()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment