Commit 1b60b956 by tangjiale

区分 横屏运动,因为小程序不能动态改横竖屏配置

parent 2190ab02
...@@ -10,14 +10,18 @@ ...@@ -10,14 +10,18 @@
"root": "subPages/organ", "root": "subPages/organ",
"name": "organ", "name": "organ",
"pages": [] "pages": []
},{ },
{
"root": "subPages/sport", "root": "subPages/sport",
"name": "sport", "name": "sport",
"pages": [ "pages": [
"detail/detail", "detail/detail",
"ai-sport/ai-sport" "ai-sport/ai-sport",
"ai-ywqz-sport/ai-ywqz-sport",
"ai-fwc-sport/ai-fwc-sport"
] ]
},{ },
{
"root": "subPages/login", "root": "subPages/login",
"name": "login", "name": "login",
"pages": [ "pages": [
......
var app = getApp()
var poseDetection = require('@tensorflow-models/pose-detection');
var flagTimer = null;
var time = 0;
var iosNum = 0;//ios不能重复播放同一地址音频,后加一位数,加时间戳不行
Page({
mixins: [require('../ai-mixins/ai-fwc-mixins.js')],
data: {
fps:20,//控制频率
//当前状态 0 提示 1 识别中 2 识别成功,读秒 3 进行中
// 4 成绩提交失败 5 等待成绩上传 6 开始前播报
aiState:6,
downTime:5, //开始倒计时
downTimeStg:'00:00',
uuid:'',//唯一标识
prepare:'',
aiCount:0, //当前个数
waitTimer:'', //等待结果定时器
beforeTimer:'', //开始前定时器
startTimer:'', //进行中定时器
startTips:'', //开始前语音 提醒
phoneType:'', //ios android
showCamera:true,
cameraFront:true, //镜头是否前置
src: '',//实时播报的路径
videoSrc:'',
fileCosFilePath:'',//截取视频
needUploadFilePath:'',
levelfontsize:'',
sportTime:60, //运动时长
},
onLoad: function (options) {
var that = this;
iosNum = 0;
time = 0;
//运动时长(秒)
if(options.sportTime){
// 30/60/120/180
this.setData({sportTime:options.sportTime})
}
// 音频/语音交互相关
this.ctx = wx.createCanvasContext('myCanvas');
that.ctxs = wx.createCameraContext();
this.setData({
innerAudioContext: wx.createInnerAudioContext(), //本地音乐组件
innerAudioContext2: wx.createInnerAudioContext() //倒计时播音组件
},()=>{
that.data.innerAudioContext.obeyMuteSwitch = false;
that.data.innerAudioContext2.obeyMuteSwitch = false;
that.loadMoveNet();
})
//初始化设备
this.initDevice()
},
onUnload(){
var that = this;
that.data.innerAudioContext.destroy();
that.data.innerAudioContext2.destroy();
clearInterval(flagTimer);
clearTimeout(that.data.prepare);
clearTimeout(that.data.waitTimer);
clearInterval(that.data.beforeTimer);
clearTimeout(that.data.startTimer);
},
loadMoveNet(){
var that = this;
if (app.globalData.movenet){
that.data.startTips = setTimeout(function () {
//开始识别
that.setData({
aiState:1
},()=>{
console.log('开始识别运动姿势')
})
},that.data.sportTime * 100 + 500)
that.canvasInit();
that.cameraFrame();
}else{
wx.showLoading({
mask:true,
title: '初始化中...',
})
var modelUrl = wx.getStorageSync('aiModelUrl'),
detectorConfig = {
modelType: poseDetection.movenet.modelType.SINGLEPOSE_LIGHTNING,
modelUrl: modelUrl
};
poseDetection.createDetector(poseDetection.SupportedModels.MoveNet, detectorConfig).then(function (detector) {
wx.hideLoading();
that.palyLocal('/images/ai/clues.mp3');
that.data.startTips = setTimeout(function () {
//开始识别
that.setData({
aiState:1
},()=>{
console.log('开始识别运动姿势')
})
},that.data.sportTime * 100 + 500)
app.globalData.movenet = detector;
that.canvasInit();
that.cameraFrame();
}).catch(function (err) {
console.log(err)
wx.showToast({
icon:'error',
title: '初始化失败',
success:function(){
wx.navigateBack({
delta: 1
})
},
})
})
}
},
canvasInit() { // 获取canvas
var that = this
wx.createSelectorQuery().select('#myCanvas')
.fields({ node: true, size: true })
.exec(function (res) {
var canvas = res[0].node
var ctx = canvas.getContext('2d')
var dpr = wx.getSystemInfoSync().pixelRatio
canvas.width = 480 * dpr
canvas.height = 640 * dpr
ctx.scale(dpr, dpr)
that.ctx = ctx
that.canvas = canvas
that.res0 = res[0]
})
},
cameraFrame() { // 视频流
var that = this,
store = [],
startTime = new Date(),
camera = wx.createCameraContext()
that.listener = camera.onCameraFrame(function (frame) {
//console.log(app.globalData.movenet)
if (frame && app.globalData.movenet) { //帧率控制
store.push(frame)
}
})
console.log('识别')
that.listener.start({
success: function () {
console.log('当前的识别频率',that.data.fps)
//flagTimer && clearInterval(flagTimer)
flagTimer = setInterval(function () { //帧率控制
if (store.length == 0) return;
var object = {
data: new Uint8Array(store[store.length - 1].data),
height: Number(store[store.length - 1].height),
width: Number(store[store.length - 1].width)
}
that.actionSend(object,app)
store = []
that.setData({
resultFps: that.data.resultFps + 1,
fpstime: parseInt((that.data.resultFps + 1) * 1000 / (new Date().getTime() - startTime))
})
}, 1000 / that.data.fps)
},
})
},
//播放本地音乐组件
palyLocal(url) {
var that = this;
this.data.innerAudioContext.autoplay = true;
this.data.innerAudioContext.volume = 1;
if(that.data.phoneType == 'ios'){
this.data.innerAudioContext.src = url + '?' + Date.now();
}else{
this.data.innerAudioContext.src = url;
}
this.data.innerAudioContext.onPlay(() => {
console.log('开始播放')
})
this.data.innerAudioContext.onEnded(() => {
console.log('播放结束')
//this.data.innerAudioContext.destroy()
})
},
//播放本地音乐组件
//播放本地音乐组件
palyLocal2(url) {
var that = this;
that.data.innerAudioContext2.autoplay = true;
that.data.innerAudioContext2.volume = 0.4;
that.data.innerAudioContext2.src = url;
that.data.innerAudioContext2.onPlay(() => {
console.log('开始播放22222222')
})
that.data.innerAudioContext2.onEnded(() => {
console.log('播放结束222222')
iosNum = iosNum + 1;
setTimeout(function(){
that.palyLocal2('https://cdn.xiaobentiyu.cn/mp3/2-LoopMelody(BPM130).mp3?a='+iosNum);
},200)
})
that.data.innerAudioContext2.onError((err) => {
console.log('err',err)
})
},
//执行开始
start(){
var that = this;
var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3');
that.data.prepare = setTimeout(()=>{
that.setData({
aiState:2
})
that.palyLocal('/images/ai/N5.mp3');
that.data.beforeTimer = setInterval(()=>{
downTime = downTime -1;
this.setData({ downTime: downTime });
if(downTime ===4){
that.palyLocal('/images/ai/N4.mp3');
}else if(downTime ===3){
that.palyLocal('/images/ai/N3.mp3');
}else if(downTime ===2){
that.palyLocal('/images/ai/N2.mp3');
}else if(downTime ===1){
that.palyLocal('/images/ai/N1.mp3');
}else if (downTime === 0) {
clearInterval(that.data.beforeTimer);
that.setData({ downTime: '开始' });
that.palyLocal('/images/ai/V_START.mp3')
setTimeout(function () {
that.setData({
aiState:3
})
that.startTime();
}, 1000);
}
},1000);
},1200)
},
//开始运动
startTime(){
//console.log('开始运动1111111',time)
var that = this;
//time = that.data.time;
time = time + 1;
var downTimeStg = that.formatSeconds(time);
that.setData({
downTimeStg:downTimeStg
},()=>{
that.palyLocal2('https://cdn.xiaobentiyu.cn/mp3/2-LoopMelody(BPM130).mp3');
})
if(time == 1){
//console.log('开始1')
}
if(time == that.data.sportTime - 5){
that.palyLocal('/images/ai/N5.mp3');
}
if(time == that.data.sportTime - 4){
that.palyLocal('/images/ai/N4.mp3');
}
if(time == that.data.sportTime - 3){
that.palyLocal('/images/ai/N3.mp3');
}
if(time == that.data.sportTime - 2){
that.palyLocal('/images/ai/N2.mp3');
}
if(time == that.data.sportTime - 1){
that.palyLocal('/images/ai/N1.mp3');
}
if(time == 10){
//console.log('开始2')
}
if((that.data.sportTime == 30 && time == 8) || (that.data.sportTime != 30 && time == 20)){
// that.startRecord();
}
if((that.data.sportTime == 30 && time == 18) || (that.data.sportTime != 30 && time == 32)){
}
// 时间已过半语音 暂时只支持60秒模式
if(that.data.sportTime == 60 && time == 30){
console.log('开始4')
that.palyLocal('/images/ai/30.mp3');
}
if(time == 40){
//console.log('开始5')
}
if(that.data.sportTime == 60 && time == 50){
//console.log('开始6')
that.palyLocal('/images/ai/50.mp3');
}
if(time == that.data.sportTime){
that.palyLocal('/images/ai/stop.mp3');
console.log('销毁定时器')
wx.showLoading({
title: '统计中...',
})
that.data.innerAudioContext2.destroy();
that.data.waitTimer = setTimeout(function(){
wx.hideLoading();
that.setData({
aiState:5
},()=>{
that.save();
})
},1500)
}
that.data.startTimer = setTimeout(function () {
if(time < that.data.sportTime){
that.startTime();
}
},1000)
},
//秒转换格式mm:ss
formatSeconds(value) {
let result = parseInt(value)
let h = Math.floor(result / 3600) < 10 ? Math.floor(result / 3600) : Math.floor(result / 3600);
let m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60));
let s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
var time = m + ":" + s
return time;
},
//错误知道了
errknow(){
wx.navigateBack({ changed: true});
},
//切换摄像头
switch(){
this.setData({cameraFront:!this.data.cameraFront})
},
//退出页面
exit(){
var that = this;
wx.showModal({
title: '提示',
content: '已开启AI运动模式,确定退出模式?',
cancelText:"继续训练",//默认是“取消”
confirmText:"退出模式",//默认是“确定”
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
clearTimeout(that.data.waitTimer);
clearInterval(that.data.beforeTimer);
clearTimeout(that.data.startTimer);
wx.navigateBack({
changed: true
});
} else {//这里是点击了取消以后
console.log('用户点击取消')
}
}
})
},
initDevice(){
let that = this
wx.getSystemInfo({
success: function (res) {
console.log('当前的系统',res)
if (res.platform == "devtools") {
that.setData({
phoneType: 'ios'
})
} else if (res.platform == "ios") {
that.setData({
phoneType: 'ios'
})
} else if (res.platform == "android") {
that.setData({
phoneType: 'android'
})
}
}
})
wx.getSetting({
success(res) {
if (!res.authSetting['scope.camera']){
wx.showModal({
title: '提示',
content: '请点击右上角设置授权摄像头',
showCancel: false,//是否显示取消按钮
confirmText:"知道了",//默认是“确定”
success: function (res) {
if (res.cancel) {
//点击取消,默认隐藏弹框
} else {
wx.navigateBack({
delta: 1
})
}
}
})
}else{
console.log('正常授权')
}
}
})
wx.openSetting({
success (res) {
if(res.authSetting['scope.camera']){
that.setData({
showCamera:true
})
}
}
})
}
})
\ No newline at end of file
{
"usingComponents": {},
"navigationStyle": "custom",
"pageOrientation":"landscape"
}
\ No newline at end of file
<camera device-position="{{!cameraFront?'back':'front'}}" flash="off" binderror="error" frame-size="medium" class="camera" id="camera">
<canvas type="2d" id="myCanvas" class="canvas"></canvas>
</camera>
<view wx:if="{{aiState == 1 || aiState == 6}}">
<image class="help-img" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png"></image>
<view class="help">
<view class="title">互动小提示</view>
<view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view>
</view>
</view>
<!-- 识别成功,读秒 -->
<view class="countdown" wx:if="{{aiState == 2}}">
<view class="second">{{downTime}}</view>
</view>
<!-- 进行中 -->
<view wx:if="{{aiState == 3}}">
<view class="time">{{downTimeStg}}</view>
<view class="number" style="{{levelfontsize}}">{{aiCount}}</view>
</view>
<!-- 成绩提交失败 -->
<view class="tips" wx:if="{{aiState == 4}}">
<view class="tips-type error-type">
抱歉,由于角度、光线等客观环境影响,AI识别失败!结束训练/重新开始训练
</view>
<view class="handle">
<!-- <view class="no-tips">不再提示</view> -->
<view class="know" bindtap="errknow">知道了</view>
</view>
</view>
<!-- 识别中 -->
<view class="switch" bindtap="switch" wx:if="{{aiState == 1}}">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/icon-flip.png"></image>
<view class="text">{{cameraFront?'切换家长拍模式':'切换自拍模式'}}</view>
</view>
<view class="exit" bindtap="exit">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/icon-exit.png"></image>
<view class="text">退出</view>
</view>
<audio src="{{src}}" id="myAudio" ></audio>
@font-face {
font-family: 'Number';
src: url('data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAACB8ABEAAAAAXXQAACAcAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4bqmQcMAZWAIJKCBwJFAr8dO8IC4FKAAE2AiQDgw4EIAWEKweBeAxDG5NUNWxbGhO7HYCq/2nriGpSGaOiTg5G1uz//5LcISp7wT4uMYeihK2cJ3YaHd7lHRcbJjvh2B8qIyJoolRTwy8o3lSiOtqso1nxphLVkcuHv++KLihRKLbPzGt2Q9mBtnFiW+iQ9EDgKLNH+p9cZ5be0l5cU4WLOCqpA+ZngDusaKrTf8Krer+CTlc1ZiX30tXJaCHWIbnzZA00TgCWcgXRj09g4HQDtM2YucKomIKF0dASZYKKHejCwGQJy0IXSS10e+POLFw2WMt8D6eVI83Ipcqtbbe91b7WV986fRoWgAJoUBAPPf6Urka6Kqm4wZ5ZoANG3xMlYfq2nIiSqExX2Qr3zTjChcEuNOvtZ7/1/e77jBRQEC55UCfKiXw5EVku/KjCFXzAfjB8UDd8LsOwPHy/12ZzZuemyAiXuMUR4bJv/kqfbPnDnU9RbZtCbfOU+hVdoSTCxFFldSAkQq6QVCcRwiGZb65PO/Pmw+7dFQC2wELelnhchUKhsjPJbCaT5FPuvc0xZvcIJ5uP2SIoYAfkfv4Boy5LAHaARrOulaxV60SFrirEEuc9SaFZTZgxUXP/zZqq/dZPPCwhDHvDYyp/JzqszlN1xojg6bnXUrPsWp9XsqWCq6Dx+lEACACSZ18WAFyMXhwx3ScAIRQ+lYFAGDbWATD0oRx10RqsQ6ceEpHxQ6ZPRHHowOvJ/atbadyIqRNhAb2L0B/hjCWdQvQv0xqvUAdWn32iHdGXGc2NP6I60MUyrU3BuTwmmLBEbfHNdFrorfC5SB51+GPHK5FL0aEZesaZfG7orfws/zICbc3wDrrb/2NUFdCQEIZEYpQRkzgBOJ6WcFJOxinQikAJqHCqQI1T5zRoOdCktYA2qssapDBs1oQzpc04c86Cs6StgDWw5eyAPefAOdJOwJl2Aa6oO+uVwrtZAwEHoTCKVGGmvgCbSoccbHluGybSzDQLUVFJJauoqWfjuTybrvX127gOosvr4fqEgdgQMRIb4yYSU85MYi4WuYxW1ra5w94hj8+d8uwu/w+vuBviznvgnoSX2BvxESsJMGFbUQyHAc5jElyKy3AFTJFQIlRwVUINV8c1MDmhiWkRurhe8/otGdZngptiZrg5boFbYlaENWGL2xH2uAPuiDkRzpgL4Y57NO/Zknd9cgEpQlFKTOBiwPCkhJEyMkaBVGSVWOUWVBhVVo1RZzRIOatJarHaQl1arzn9Fg2aMGzYhDElzRhzxoKxJK1Ya9amBVvGjrVnHBhH0ol1Jl1YV6E77dGcZ4teTXg3rCvAoE7DPRVBKIZ1XCzCYa5FQORBECvFqNwJlc1MiLLY69SSi3PvPm9Qm2Ei4xZNiHwIYqUYbTphu5kRURZ7t1pycm7xea/avBPJBLIfCVHEi7kIUDwh8XFKyf7uLBCKpBKp3JwKpUqqUeqUBiEnNQktUteXCWVKmFHmlAVlSViR1qRNc7aUHWlPOVCOhBPpTLiQ7r5QpOqQomKhpEIdqtohly92YMrQtFuKioWSCnWouoYcf/+XKW/TVMSc0DYr5SBec7O4KO2VBVmPZ47Wfre48X8m99XSXGFts2E9nidc3OsaGSy+wrJsyVoKy1a1VBZiOizLlqylsGxVS2VhaVr1QVO8gocCDABg2gQAEKZk3HIbMACAaRMAQJiScet73eZDGqRUQm8wIm00EdyomdHOiybHtSPm/3yPjiI9LH1sQ0yTBBtqLrQzoTnh2RHv5Y2bIg8sT2xvTG1ARMcy5hW70dA0HZphvKAZOnQYZovU4X27qXru6HtgYMCQzCQNCk2HZhgvaIYOHYb5XNKNyj3Vwx1PD7wMeJOpF0RAziFeowiKogiKeo2iKIqgyJpdiMro/sCQ4bLBahRBURRBUa9RFEURFFmD5UJUUvdfhrzTuZq0PSsibCJyx66yeSu5cNPOeNVJ7ti1MS9uJRdu2hm/dtJ3oQNM7Zvvu/9Ku61kKFunTWl8sXF9sCoRIauyGkJLYWprtzUANzn1pFPywDTGNqxk7gdvDbpNPg2nDB4ERYWrkhJUhYDVQAmXoCoErAaWsG5jObyHIzJOsHTzxeOZsTzPszzP8zzP8iz/OaUyHViX0xPr4waYIWTkkxPelDUbz3mLXEYra9vcYe8wOrJOA2eXb/mKucHunIfYE/fCvCEfTC64Y41BTiA6hM6J3ENNYp6IjeJGQFHeuKSotKisqAKTxcJKhVWyilrWl2w8l2dTtBa3XdfxXI9SX3J4yck3pjlL43lRi1zGyVVh68K2ucM+D0senzvlWVwWX11389yD0lPyffn8X8RKhJ/E7NQ2rwOvJ0FfhiGTP8zDS5Cx3EQasbCQjHMChEtEKlNU2i/zVRHVrKEub1rJdVDf6z5VX8+crbETbOFmmFtYWU9u+NqG29k7ODWXlDqo73Wfqq9nxrqPLRy7a5waPmQYUStN+0lGk+N1q61jUc/dojQovPGaUWHjIj7cx4ZaYdpPKpoTSrfabhY93C1Ag8Ktaz4+Kkc8uuqWqPCf7JnYWy4SpCS2Fth2ec2cdWl9iRc6XumZ1Dcjg9DJJEbhxpEmqWZt7eKaJ9aF9SVeuHnlYdLTjAxChxKfcOkUocCyJJNkiiTJZPJeemNYjyWZJFMkSSaT99Ibw02PgnuOqQAA0AHAKQAAdAB4fexxLuwZYkxIKEb0ecWdDFTD7LXdPyGoGlcNs3N1/6RgzQ2lGS3enlZYjowqFMoRUv4UyAvLEVGFQjkyyp9CKr4iAQXkPqJXSIq6LTaNm0ION2trs3lwa0HRnKJNW4dRvHCztjabB60WFM0p2lx1mFsr+IM4dbH/Erxk2bpFQ20cGie5/0tiJS/EoLzUXBdjiGE7RwnR+PSZ1OLLGJSZmvtiDDFsHxgVFwqJVIozSJQkRhohi0+KLkhsNDJWHxfuByiK9w1WjfrR+z65y6v4Xgpqlxaty+IEMWNi42kRDICdY3kA5sF7Qu+iPv5Snpwwxclzpk5DDGXLSm36/zC8vTSeHLe01Cq5BTsIgtvpqLqdCb0Pw/NlM8gwyg7XXn794gmXInPlXhADwEjpr+mGGfj/xP5EsX/S/4Y8X8zP0cnZxdXNfZ2HJwzu5e3j64fwDwgMCg4JDQuPiESi0BgsDk+IIpLIFCqNzmBGx8TGxSew2IlJyZyU1LT0DEi5zpf/0L+BAM4DyVyxUWhqfDV+IgfCIIhcAdnPxNldUXfGOabnmTnmpWFhbnNIFhwF/CNp34RAViuOrAdw9BDiQqoLTzgUrCsDFFvP1Rootp7j71oCjydr79poAGZhZlfowSsj7Ll06DT2ndxW6im2J5c2PlqG+ioMlpKoS6GvlnmLnkIDL2z7hmXNfsuhvaMtfV2XfuwF5oMR6u5svazS7JyluUt9bEDYKjpnaFiFBhlClzyTBFS2yBSNq6TYqOI57naOcHbIEZlTkiEuxbSkfCTBKWVrtJNsdb7JzfZ7ybOf2N4ck+ekHRJIUpNxmWq9h+fV3Ac3vlv1auyaVG5iainSvLTwk8h0z9v+xVC/8MA9B1PCMnbMjHsmKyLHcyVUQiYF8uyAPmI8a52DdewjxY+U3vC8zF3hq/cwXBlLxI6ZtDNy8K4sUufdVfJeK4dlqbtvju+k7F1VE3Br7Vcik6uETMhNcLNI9NpvkeccbfCHrnrvm3AzE9K+KDbsVvKyU7aS8Uox3ZmOGbeFdMYJcEBApMCMIbkzKIqII8CVmM2n4W8a9GVs70nY9xF09/F0npIIcEqnc2Epzzk0p65MyH0ydqnqMgxBhLz2e+s4V520Kud5qX2B58lVAB/mE3mc/P5XQ8LLNuB07b7xJODypixzAPrM+San1PrHOUqYApxxLTRMy1TsYPedZwp2grDBaMmuy4VPmiefQcGNKBThauHGDk+cWml4oqWbExjtVtsv/Dp7ia4acRcUZnMVIpYJGJk852KLlH2AyPMBrvR6nT/FuusAt9XuRmlnLQ1K2Tusyaq7EuWStfYLv8FBlbfSXRwdAa7ZtK6nf3DuZmFIro8LnwidG41w1EDnSIXBQzCVBlEUk70KNSWqGDb0voTf4hFPqcboR2WY2gc6XJOrStrW5apzcrYEM1UTMo8+7zPtxc/DfvxDjrU51/TU81Whj+CIXFf4/S8qSU/lET9hbjwpfGek1OARomP88EbFwVHFBMNzePbATCGCYT9unrm7mt6O74+vl5jew7h90ggbyWt9gXNiRp3rDDGg64AToiIxEtx2Q8GwnzVa+Gkyjs6Mi2AUISbAWRiCrwS/S0dOYZajB+k8KHRhCIsbYjZGcd/b2Nkullc5WU85IHIYDwqWI0aP4dnRSPATHg6iw3NU2OKB2XyumhO4KjbXdJSvOPVp9bOeQ3lvQEc6Mx4cgavBdnWe5srdr3TYPZuRL+onB/DsZReywJOUl+QxjvHgI5TUlimp/v0U7S/fXUwG4hQFt8TSJiDMh9BxuER4rpijxOz6GHxgLp8rBgyacJRnZ/JBA0VWjsgdl86rzhVmhxEhFSIVBjcFQkrMUbQRsvK/A1VZ3JY8J075oEQWNwGib5HIuwfm1jzU9Hit/WPr+wLvDPINyrEp3WAtaYj36444dipfNqmf7NbkP/zdVTY58d1r+4CTqS9NofVquzjZPp6wb9gpnhez0/HjXW9nwpye0TR20hmM/XViMC0e6QbUh4B+OgUNALwszTe7rKzlJgqjxnH+n++6vhuwAoa83QDEGfcwnVZAt+u7TGAMgDjjpo4/VZpPu7w7vRw4jFQ/lcLmx+iwWpPLrMLy/NhaG9vWrimZNro6S/IMoOKo/NL8+GgXrHdcdjqMHphRYsFsZZL1bBKYq/jtdtrkMJ4vQhobGE9ky+tQ/vE4ghMqID3D9Lo5MjkJiUpqeQ7QUWQnIx9kmkHywBxZ9B49j0pMPhJjI0XiKZfdcOzoXykpLnXThJcIfR1oniOU7VHoAHlJZWbp+oYD1CpvSmY6PK/Mk7SV78ICjvpuEnrEOuGciQSnXThqPcUecx5ZTsvmB0Z9iGiilcMLzDZlbgkK3g6CDZUdvs77dwX7tLE1DIXBkQRKBnWXta01NhSRdj5Hw1git7JeH2wZl+hf6l6J+s/oSE3QzTTbdTz/jVXh+IrAJp7TB4B2G3EpqAaXE7KmfS82J6iGp//+A88psAnHrQoPqHKvRvWatNYGdaWudq9ElIY4Gv48YpFb2JhK2Ba1rTm1pPiQmd+hbWjjYy3GJ3ZhY0cv/xX+rddsNqob7MbuZnjuJiAV3qB3OLILAIBIpyH/Y3btScfoh615cmkNTyarlfDkFs2TymsH1Gstl8sfYNIgNf362r4cauVjtKvjpXwVWQPDv5bKiY7eWivrqG0I2mCDKm9dCks2WLGWp86FvE6qJfLkeuMvJzXGV63LcGDgg3+4B9LtEqXrvDuLcq43VZH6xk8Xh33PtK4pCgPQQfYd1lswMZRU4WY6m8Co8l+Pi729KQYOSy3DZwpSWIlxDTypvMb2OjQ0QlyInDR6bQFYVIFVOoAOjQpsPb6lTt/JHXrT+bJTbUi8L2m7jiCBFRPXUMtk0+JqbdqgIVok1g+Dyiq/wAo7B98NPi4OoNQdLLHMlNvCdWAwHfhvZDCNFx4fQN56f4WxsfXUeh6DddkokmTWfqZjYMRNPJb1O+HFDZ/2auDB5wPcaJ8tka55rgfmQL0Dbh1N53ow/TwPK2t1MV0gbgUlTuMm2cU9kUbAVhPodDZflzGA3ZHyMmZDd5uVOZd7kOXfUWERccufeqhbEy44aGauaKDZmZr7LG42whqqMTOfY7GvjuUbv/mORV8J77S0mrhpWA7awqEwGBT+BxVCrSUebBtVi0/cQbV3FsEom7f5wAo9xyh9Mn5tHrIL7AYVIADGqX5pMbsZHrvjZgEA4HhgOltkV2VtIq7O9gLksJAvbNZvO8VoGHZu/e/LXSOSXZNdLzB1+n6EWhQeV9kvk02q97GwJ4Pkq/FxnGSH9KBI1ODvkS1mBGlgu+2qSgz9LtNUoolFgSCYRNDrnXbNa24hHSdIrHi8kKBMcXjPhigzcdZY6dm6jr4c2+hFn/bQneRyVPrBrgRRHiAtxievQgNFV/R1Q8AZG5RbQvXY+5+jKreQ1V+2HBaKPj65caCWbF9fEUrYF5CDEDtX8SM4E4FoN3xuo58tzHYIKpUaYSflsKdt+jncO2EVSmVZxg6h+NjlmVLr0OQexpwHfgbaPcd7o2e0A/I7wYOwt5Oe5pTR55lfH4qnt9NZ1nFyL1qCUxA9t0j3lWi7e3A/2FYGez8H/8Okg3KeXJq6z6NWKq9xV7l/peyrdGB5ajkc6bkH9sGTm4BSWQCchGWQ8wEK/gfWjEH3PH3yml4/8gHYDRRR+L+BIagEjV4ZdU9+w4z/ASWAfGHJk0lqo6Yt5N9MFXtvLcEmOoj/C4SgCuxRguNqGD55NvRHgFVXAu548v+ASleoN6/e36ypAoxWY4yOrKkwKNXPUuluJZEA1YQextERUBWaDH7jyeQs0sJ56UoGl3mpqSm6SZtyBzOeHN14Iy0vfpDe/mMwH7EPdy8X9gHGOWzFdMUKva7s8mO9JN2ny5WaAfWLGV0LxjZpU4qI8Ujythubs5IEDpPcB2Wr7uQUFwULXnM1cEUTLvlZjPlUWGlUwCT+mGbm9bVrihS/jl1peErlHHISXQjujFQxNwGPyM8meHKxPC1mW70nJUTk42Fd5aECcOOKOGNsL1ug6Xpn3cYAGjDqBrALoTyptHasY4SoOR8ZGquTixn2OhrK4VVPZ1b9PDOs00FZhDh7ra/1nPYCcaa4XZs6ZYgSRfkcCH5P7Nm5d+fEt/XfSmYFTTuaZmWtVoev/ftAIejb0Tf77wH0PMnlgBIwHihK7nbrNr5dxAHKNYwREWBDV0N3BCvyHLUbSjxG12z/cIgICAf2DcsyPCg5ntKEvzzpfP8nKgXIWcGIIFzDeJs822Z9sE4/gldjaYKoACziXHPCc9Jab2HrnpIeMQJKfprQfA6LiAoQ9OVti8JqpGM1o7bmMTVMKtogWo/aIk6MHkg/YwGm2uqg+wTEALTfhSbWFBkKR6TtLg3g+EDJU6xrAfHzqR+l48Gw8i/KN/S+lEeNLc9V38PxQzuZ2R/KozJLstVfHOe7be+gXLfbjEZtpqQpEa4qbo4Mp1AB4rd/xvc5HJ/GJ3lCOjsqmTSNwfkZ+/L3KwBVPn1//b+dv+8Obl8Z/1+6e6glrb7Z4tZKVSSDClOvtGgBIW9qHsPMacwYkD3BMARJHVkiI7RXhAubUZVpqiDv447ZU1zBBsgwO062Zf/jbKbmlyZ1WeRJLH1n9Azh9cm0rps0SXW9wuNMy/KiKAmNFFwG4XGei8kHoAEJMB4bx1Fsaq0fBqHv7z13HWMeRbFlHU0nnitOm6PSXK/WlfQF7FKRJqEI8izGiFkt1MGJNziKY2SfugHsX/WnqnMJtO/SVErsYw5uoNlGW/PhQT1i7fT2fKZj6O2FQDvm8ILXksQTmi/mmuAQKpW9komMNKTkcSLMxif0MMUjn57U8/XHh8f7+7v7B931u6w/6oaqPMxYoCdx3+H52e0WZ1MUB7mw3ohlLQ7W/d0SWDyUHwEfXS4DanRSQ4UA1iMZmIYv6Gnjbfjtm/pOP58/E2+2R4IEv+PyHMtbbI/C/Cxme9JvmMDliRQyWsVJkDRJI8zF3+jby/FptgkShArBtzpMEhjAEM1UMk1V1i2E7E5strvqHCMbT5iP0+L0NY5jlVhk+mIoNgczcYziaTf0d5uEt/Rmyxy99P8h4DoHWRY/rkEh0ALMwA7509vRmZtLYaGyXL8XV4epIkNVvBUVo7sxC6brNNU+Lxb4mI5pOfa/r56bIV4VIYTSQHyizPHzJIk7KZFuBpK6YhVUHWRGF3YRigL52RQGv7So5uqOT5GgiJKCQ8sqmbYGC8Bbvd11rRokMdfjsscXnBMekNXVhqgu+763MQ1XUD1iSbNtVgrDXoRUFv0LoNCHjlRKaVPAOBoyN+GW+7065G6bJnEU5pUmbXu/3fAdzLl+V9BhRHESE+MJjuSGVKfLqa69//pn7dUbzlgCe7T/XN3z8lJd3R2jUBNy07b0ao1c7rVhwOPojA8HV5wDPcq3wJ5qRPYqdENMYQe4RJfD3tNbN9+WOc1vd8Mcc4llkAJwtFIK1inqhVnAZSrjnR/ipRDms0oMsCJvTQ7cbtWude0sFuzhOuFRWFfcandXDCH3u4K8h0D31z3zrPiQRlj1bmcNc2amsBC21lann6PX1+pmPVtI3yo82TGE3Jr7uL5ZGphynhFd7SlqImBnFYtj2hhMYRlco2vROfQhYOGm26qoY+4SrtPQnQOkM5EGGWSsCxWu/mne8dMn9Rmkc8RA3mBVHvbcyLcrvoQ1vXvw5JzwNCEEcwL/qKNClg5NSb/X/YTCKdgwafLUcx9tfFylfMhwcb5apphwYYdk3CNAgROsUIeAYs6DVA5kinquYZJh5qYi2uiwwW+HbWmPzSHpc8ee8Qx7s6w0DT/SY+koBcykgWxzb17S0YA7T5QUBRgBoWiquc+9G4zuA8vGg9+XPt0DWA2j1cbpqHD2R3ETprU0WsMraM1mXswFMjVPD1UTUTePDFj/bQMl6uOEzbJi16neqsyxr6yWNna5u3BxHnG6vaAVtCtgV/QvyWZZnGA1dKj7dtzy50/1i91rVymDb33HVq3Wdn3X9ddoPkf5kV97K27dC+0vcXwhnIeijB1NUHQZn07ybY+8iPjn4vLzJZiJ/9BPcUOtCXv15oIEgwKfEZ2T+PqEaDqySutxog7PAKnz6FS2/RBOO1J/Xo2jOjt0htUSC85wjYcbblwqCG4vRLsaDsSEPAdISrQop65V1XDabEnP0Sj6tCLT64rs44iTXi5hY3K1trGfEexJ+hOgBmTV5e3sIpkuFAW7mHO9TwKRxd12qzSMbnoUkginKWjLzp+phZIMFHvJ1oiMrpIhaMVRQzih+vOwsjeDkAMYTbbJtM57FV1OOH01rRS2cIUI3UKW20qTHgB5zNc7O4Sy1PDpD1ws1LI742rNLe1vc31yF1cqmjQGUEeQjSDLGgxxq3hB4JrHcqNCVEZPDWkVbgNB8iaVvRFXHVbz8lIYDuUwiVggCugnDyiywDxO9vYXlFIFMMLXRXbopruVCrocoAOMKzYwgT2S4u06N1Eb3ipHH1UtIxFgRLpHZbVofQz0PqC4Mhnr19bua78sewUQGI4JldRi0+EwRU0IQGGYl2iSFEhr4pzusnkxm3lyEORf/nhbnxBhK8kohBjMihz64NIKfPPPFGQKY1iQaw6k7xJE83kqbDlCMU3UvMEqXQ1NRUHWNFodajiAaHIBqHG7x0yBvi0kWrGr4z4ep/X52DLLVG5hYGGTOU5d7nYUklkHkmB0TJDDJ9CTD8IxG2coEwtnfftMd5PLJXfnzZhHMCHzjKSQzJRHfumL5O1DHdecxg3LUlVlZKvWg66bJesk9nCRvV8EXNhpQm6fxxHBbm1a2APjbg1mpiRFW7jWY0KedAmVZlNWeYc6p7VjDs94LYX2SMxmTAMH9PSHUr1dFLFkMiRcAu9dSMilNRV3Ds8H+RpahPwEL4G9cxOGoYpWzcV0mbJbm2FdXC0wUhD8UYIhDlEoRn7UzdUp3dtGgN6ORgHt4UE3UTKcNTz7macPoYwhiXeOC3k5yWP3MRHptLaEgebEGNOVi4GTyUbNPwt7OIbqTi1ufePIKBk93LBWxmObICghCrDJbqlB0+jGgza2fxoYQoGQpelE2+UZvQ4zoVspTKmdpMu8WboYA1N3ZCu5rLIxuyB8BmZFgxtaDgaP/md6lI55w1O9ReYCcAxJqBj8boLIUIzQwe9sX+XSIqlFG1XUJwDHBWyONLWi+81poUKHq505ioOdFDMpS9IJHOt4YbsaVlKgKHFBORchVCD/ahMpZn7nSHwq7wnTD9bQ888NAQD1Sk7Ytqqz2TRNXGGHgYmld6oSwU6BXR/aGotufoVxbAotakXIRzNUlGRW/6/ryjXse7XmpEl9T3ipiDDE5cLCds1jqwqyEMzDfdSLZDf26blrq4vn8L3Uh6CCT4pzYd7O6zviFiAABKzzf1qDoi1/LVvDDb1T3ufJ29zsKWj7P29jTgdggQEACDCn/w8wXLRFa6MNCPPDDGOXkAnzhcEhqA3asnwx/YUY+yWufQFGx6ke/JP/8QxO5eYFxsARcvsKrQrwTfBBnH0FPo9rJrwLzsXZGfQFvQ99DuvX6+GvIF1huBHWMv9/nDhLwHXWOrM+uA8sD0uCl2Pa95fWIreFf8J/4M/mI4tp3WJ637jWAjYHexy65LeCLgIKx/SuvxBa+dwxVrSCGgOLws9spLXQGI5eMAAADBZi4AAWk97oEMGBBNvVxsBVgmBgdYIhgIMJDRWJEjoMqp8wkEHZumm70ixocT3YLhewBIFjfoIhgo0JDV1wMqGDU+WEgbLU9NFmgtPPn05/yXSDYbHKFsQED2BooIRrMBJDcY5xGTXcyrg4FP7TlXuj6E/rwzi2dsjEA0ZDxRsm/4gs9e2q2ftMTp0ITVygEPouVDOLJtTmYKGvy+YSUSPv1iZ9nkbYi+T45IZ7G1kt8DVeytQYApwPO978eQEDB/MVDEL9hz3oW9wa+PcqZd/qV+G5YUSlrmqtaq1TbfRelLQjuKJtlopwlHCA83Yb8sll9zItDnjtATSY7na5WcPcznrXXfb2uyuhNN0wLVY7e/q18KcAeuMYRRWFbDtOZEuKZnAd4JCJVKaQUlgmIfC6/meQa2pp6+jq6RsYGvnL3/7xr//8b2xiamZuYWllbWNrZ+/g6OTs4urm7uHp5e1DzEAMwmAMIUZaYMbEMXXr3n40ho2uV/9ORTkPBi0rEDBNIoDmn2L/vzwZ3WE5/FGNdUKNo4Ze3MOM3eUc1vWOozsA') format('woff2');
}
page{
background: #D1D1D1;
}
.canvas {
position: absolute;
width: 100%;
height: 100%;
z-index: 100;
}
/* 自定义导航条样式 */
.nav{
width: 100%;
overflow: hidden;
position: relative;
top: 0;
left: 0;
z-index: 10;
}
.nav-title{
width: 100%;
height: 90rpx;
line-height: 90rpx;
text-align: center;
position: absolute;
bottom: 0;
left: 0;
z-index: 10;
font-size:26rpx;
color: #FFFFFF;
}
.nav .back{
width: 44rpx;
height: 44rpx;
position: absolute;
bottom: 0;
left: 0;
padding: 24rpx 30rpx;
}
.bg-white{
background-color: transparent;
}
.bg-gray{
background-color: #f7f7f7;
}
.overflow{
overflow: auto;
}
.hidden{
overflow: hidden;
}
.user-info image{
width: 64rpx;
height: 64rpx;
}
.tips{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80%;
padding-bottom: 50rpx;
text-align: justify;
/* height: 242px; */
background: #FFFFFF;
box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.08);
border-radius: 12px;
padding:15px;
z-index: 99;
}
.errors{
height: 110px;
}
.error-type{
width: 90%;
margin: 0 auto;
margin-top: 10px;
}
.tips-type{
overflow: hidden;
}
.correct{
float: left;
width: 154px;
height: 140px;
margin-right: 1px;
}
.correct .img{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.correct .img image{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.error .img image{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.correct .text{
font-size: 12px;
color: #353535;
text-align: center;
line-height: 40px;
}
.no-tips{
float: left;
font-size: 14px;
color: #888888;
padding-top: 10px;
padding-left: 20px;
}
.know{
float: left;
width: 320rpx;
height: 40px;
line-height: 40px;
color: #FFFFFF;
border-radius: 22px;
text-align: center;
background: #FF9B4D;
margin-left: 160rpx;
font-size: 17px;
font-weight: bold;
margin-top: 14px;
}
.error{
float: left;
width: 100px;
height: 140px;
margin-right: 1px;
}
.error .img{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.error .text{
font-size: 12px;
color: #353535;
text-align: center;
line-height: 40px;
}
.handle{
width: 100%;
height: 40px;
}
.switch{
position: absolute;
height: 44px;
padding-right: 10px;
line-height: 44px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
left: 20px;
bottom: 15px;
color: #FFFFFF;
z-index: 99;
}
.switch .text{
padding-left: 40px;
}
.switch image{
position: absolute;
top: 10px;
left: 6px;
width: 32px;
height: 26px;
}
.exit{
position: absolute;
height: 44px;
padding-right: 10px;
line-height: 44px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
right: 20px;
bottom: 15px;
color: #FFFFFF;
z-index: 99;
}
.exit .text{
padding-left: 40px;
}
.exit image{
position: absolute;
top: 8px;
left: 6px;
width: 32px;
height: 26px;
}
.help{
position: absolute;
left: 20px;
width: 192px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
color: #FFFFFF;
text-align: center;
font-size: 14px;
z-index: 99;
padding-bottom: 40rpx;
bottom: 160rpx;
}
.help .title{
margin-top: 15px;
}
.help .content{
width: 86%;
margin: 0 auto;
text-align: left;
margin-top: 12px;
}
.help-img{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 432rpx;
height: 988rpx;
z-index: 98;
}
.countdown{
position:absolute;
width: 100%;
height: 100%;
background: #FF9B4D;
z-index: 100;
}
.countdown .second{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #FFFFFF;
font-size: 160rpx;
font-family: 'Number';
z-index: 101;
}
.time{
position: absolute;
width: 220rpx;
height: 48px;
font-size: 34px;
line-height: 48px;
color: #FFFFFF;
background: #000000;
opacity: 0.74;
border-radius: 12px;
font-family: 'Number';
left: 20px;
top: 140rpx;
text-align: center;
z-index: 99;
}
.number{
position: absolute;
width: 220rpx;
height: 48px;
font-size: 34px;
line-height: 48px;
color: #FFFFFF;
background: #000000;
opacity: 0.74;
border-radius: 12px;
font-family: 'Number';
right: 20px;
top: 140rpx;
text-align: center;
z-index: 99;
}
.grade{
overflow: hidden;
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 487px;
height: 242px;
background: #FFFFFF;
box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.08);
border-radius: 12px;
z-index: 100;
}
.grade .num{
text-align: center;
font-size: 42px;
font-family: 'Number';
margin-top: 40px;
}
.grade text{
font-size: 12px;
color: #888888;
}
.eggs{
font-size: 14px;
color: #353535;
text-align: center;
width: 334px;
margin: 0 auto;
margin-top: 24px;
}
.btns{
width: 92%;
margin: 0 auto;
margin-top: 26px;
}
.btns-left{
background: #F5F5F5;
border-radius: 22px;
float: left;
width: 48%;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 17px;
font-weight: bold;
color: #FF9B4D;
}
.btns-right{
background: #FF9B4D;
border-radius: 22px;
float: right;
width: 48%;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 17px;
font-weight: bold;
color: #FFFFFF;
}
.camera{
width: 100%;
height: 100%;
position: absolute;
z-index:9
}
.tips-type-tips{
text-align: center;
font-size: 17px;
font-weight: bold;
margin-bottom: 14px;
}
var app = getApp() var app = getApp()
var API = require("../../../utils/request.js");
var COS = require('../../../utils/cos-wx-sdk-v5');
var poseDetection = require('@tensorflow-models/pose-detection'); var poseDetection = require('@tensorflow-models/pose-detection');
var flagTimer = null; var flagTimer = null;
......
{ {
"usingComponents": {}, "usingComponents": {},
"disableScroll": true, "disableScroll": true
"pageOrientation":"auto"
} }
\ No newline at end of file
var app = getApp()
var poseDetection = require('@tensorflow-models/pose-detection');
var flagTimer = null;
var time = 0;
var iosNum = 0;//ios不能重复播放同一地址音频,后加一位数,加时间戳不行
Page({
mixins: [require('../ai-mixins/ai-ywqz-mixins.js')],
data: {
fps:20,//控制频率
//当前状态 0 提示 1 识别中 2 识别成功,读秒 3 进行中
// 4 成绩提交失败 5 等待成绩上传 6 开始前播报
aiState:6,
downTime:5, //开始倒计时
downTimeStg:'00:00',
uuid:'',//唯一标识
prepare:'',
aiCount:0, //当前个数
waitTimer:'', //等待结果定时器
beforeTimer:'', //开始前定时器
startTimer:'', //进行中定时器
startTips:'', //开始前语音 提醒
phoneType:'', //ios android
showCamera:true,
cameraFront:true, //镜头是否前置
src: '',//实时播报的路径
videoSrc:'',
fileCosFilePath:'',//截取视频
needUploadFilePath:'',
levelfontsize:'',
sportTime:60, //运动时长
},
onLoad: function (options) {
var that = this;
iosNum = 0;
time = 0;
//运动时长(秒)
if(options.sportTime){
// 30/60/120/180
this.setData({sportTime:options.sportTime})
}
// 音频/语音交互相关
this.ctx = wx.createCanvasContext('myCanvas');
that.ctxs = wx.createCameraContext();
this.setData({
innerAudioContext: wx.createInnerAudioContext(), //本地音乐组件
innerAudioContext2: wx.createInnerAudioContext() //倒计时播音组件
},()=>{
that.data.innerAudioContext.obeyMuteSwitch = false;
that.data.innerAudioContext2.obeyMuteSwitch = false;
that.loadMoveNet();
})
//初始化设备
this.initDevice()
},
onUnload(){
var that = this;
that.data.innerAudioContext.destroy();
that.data.innerAudioContext2.destroy();
clearInterval(flagTimer);
clearTimeout(that.data.prepare);
clearTimeout(that.data.waitTimer);
clearInterval(that.data.beforeTimer);
clearTimeout(that.data.startTimer);
},
loadMoveNet(){
var that = this;
if (app.globalData.movenet){
that.data.startTips = setTimeout(function () {
//开始识别
that.setData({
aiState:1
},()=>{
console.log('开始识别运动姿势')
})
},that.data.sportTime * 100 + 500)
that.canvasInit();
that.cameraFrame();
}else{
wx.showLoading({
mask:true,
title: '初始化中...',
})
var modelUrl = wx.getStorageSync('aiModelUrl'),
detectorConfig = {
modelType: poseDetection.movenet.modelType.SINGLEPOSE_LIGHTNING,
modelUrl: modelUrl
};
poseDetection.createDetector(poseDetection.SupportedModels.MoveNet, detectorConfig).then(function (detector) {
wx.hideLoading();
that.palyLocal('/images/ai/clues.mp3');
that.data.startTips = setTimeout(function () {
//开始识别
that.setData({
aiState:1
},()=>{
console.log('开始识别运动姿势')
})
},that.data.sportTime * 100 + 500)
app.globalData.movenet = detector;
that.canvasInit();
that.cameraFrame();
}).catch(function (err) {
console.log(err)
wx.showToast({
icon:'error',
title: '初始化失败',
success:function(){
wx.navigateBack({
delta: 1
})
},
})
})
}
},
canvasInit() { // 获取canvas
var that = this
wx.createSelectorQuery().select('#myCanvas')
.fields({ node: true, size: true })
.exec(function (res) {
var canvas = res[0].node
var ctx = canvas.getContext('2d')
var dpr = wx.getSystemInfoSync().pixelRatio
canvas.width = 480 * dpr
canvas.height = 640 * dpr
ctx.scale(dpr, dpr)
that.ctx = ctx
that.canvas = canvas
that.res0 = res[0]
})
},
cameraFrame() { // 视频流
var that = this,
store = [],
startTime = new Date(),
camera = wx.createCameraContext()
that.listener = camera.onCameraFrame(function (frame) {
//console.log(app.globalData.movenet)
if (frame && app.globalData.movenet) { //帧率控制
store.push(frame)
}
})
console.log('识别')
that.listener.start({
success: function () {
console.log('当前的识别频率',that.data.fps)
//flagTimer && clearInterval(flagTimer)
flagTimer = setInterval(function () { //帧率控制
if (store.length == 0) return;
var object = {
data: new Uint8Array(store[store.length - 1].data),
height: Number(store[store.length - 1].height),
width: Number(store[store.length - 1].width)
}
that.actionSend(object,app)
store = []
that.setData({
resultFps: that.data.resultFps + 1,
fpstime: parseInt((that.data.resultFps + 1) * 1000 / (new Date().getTime() - startTime))
})
}, 1000 / that.data.fps)
},
})
},
//播放本地音乐组件
palyLocal(url) {
var that = this;
this.data.innerAudioContext.autoplay = true;
this.data.innerAudioContext.volume = 1;
if(that.data.phoneType == 'ios'){
this.data.innerAudioContext.src = url + '?' + Date.now();
}else{
this.data.innerAudioContext.src = url;
}
this.data.innerAudioContext.onPlay(() => {
console.log('开始播放')
})
this.data.innerAudioContext.onEnded(() => {
console.log('播放结束')
//this.data.innerAudioContext.destroy()
})
},
//播放本地音乐组件
//播放本地音乐组件
palyLocal2(url) {
var that = this;
that.data.innerAudioContext2.autoplay = true;
that.data.innerAudioContext2.volume = 0.4;
that.data.innerAudioContext2.src = url;
that.data.innerAudioContext2.onPlay(() => {
console.log('开始播放22222222')
})
that.data.innerAudioContext2.onEnded(() => {
console.log('播放结束222222')
iosNum = iosNum + 1;
setTimeout(function(){
that.palyLocal2('https://cdn.xiaobentiyu.cn/mp3/2-LoopMelody(BPM130).mp3?a='+iosNum);
},200)
})
that.data.innerAudioContext2.onError((err) => {
console.log('err',err)
})
},
//执行开始
start(){
var that = this;
var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3');
that.data.prepare = setTimeout(()=>{
that.setData({
aiState:2
})
that.palyLocal('/images/ai/N5.mp3');
that.data.beforeTimer = setInterval(()=>{
downTime = downTime -1;
this.setData({ downTime: downTime });
if(downTime ===4){
that.palyLocal('/images/ai/N4.mp3');
}else if(downTime ===3){
that.palyLocal('/images/ai/N3.mp3');
}else if(downTime ===2){
that.palyLocal('/images/ai/N2.mp3');
}else if(downTime ===1){
that.palyLocal('/images/ai/N1.mp3');
}else if (downTime === 0) {
clearInterval(that.data.beforeTimer);
that.setData({ downTime: '开始' });
that.palyLocal('/images/ai/V_START.mp3')
setTimeout(function () {
that.setData({
aiState:3
})
that.startTime();
}, 1000);
}
},1000);
},1200)
},
//开始运动
startTime(){
//console.log('开始运动1111111',time)
var that = this;
//time = that.data.time;
time = time + 1;
var downTimeStg = that.formatSeconds(time);
that.setData({
downTimeStg:downTimeStg
},()=>{
that.palyLocal2('https://cdn.xiaobentiyu.cn/mp3/2-LoopMelody(BPM130).mp3');
})
if(time == 1){
//console.log('开始1')
}
if(time == that.data.sportTime - 5){
that.palyLocal('/images/ai/N5.mp3');
}
if(time == that.data.sportTime - 4){
that.palyLocal('/images/ai/N4.mp3');
}
if(time == that.data.sportTime - 3){
that.palyLocal('/images/ai/N3.mp3');
}
if(time == that.data.sportTime - 2){
that.palyLocal('/images/ai/N2.mp3');
}
if(time == that.data.sportTime - 1){
that.palyLocal('/images/ai/N1.mp3');
}
if(time == 10){
//console.log('开始2')
}
if((that.data.sportTime == 30 && time == 8) || (that.data.sportTime != 30 && time == 20)){
// that.startRecord();
}
if((that.data.sportTime == 30 && time == 18) || (that.data.sportTime != 30 && time == 32)){
}
// 时间已过半语音 暂时只支持60秒模式
if(that.data.sportTime == 60 && time == 30){
console.log('开始4')
that.palyLocal('/images/ai/30.mp3');
}
if(time == 40){
//console.log('开始5')
}
if(that.data.sportTime == 60 && time == 50){
//console.log('开始6')
that.palyLocal('/images/ai/50.mp3');
}
if(time == that.data.sportTime){
that.palyLocal('/images/ai/stop.mp3');
console.log('销毁定时器')
wx.showLoading({
title: '统计中...',
})
that.data.innerAudioContext2.destroy();
that.data.waitTimer = setTimeout(function(){
wx.hideLoading();
that.setData({
aiState:5
},()=>{
that.save();
})
},1500)
}
that.data.startTimer = setTimeout(function () {
if(time < that.data.sportTime){
that.startTime();
}
},1000)
},
//秒转换格式mm:ss
formatSeconds(value) {
let result = parseInt(value)
let h = Math.floor(result / 3600) < 10 ? Math.floor(result / 3600) : Math.floor(result / 3600);
let m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60));
let s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
var time = m + ":" + s
return time;
},
//错误知道了
errknow(){
wx.navigateBack({ changed: true});
},
//切换摄像头
switch(){
this.setData({cameraFront:!this.data.cameraFront})
},
//退出页面
exit(){
var that = this;
wx.showModal({
title: '提示',
content: '已开启AI运动模式,确定退出模式?',
cancelText:"继续训练",//默认是“取消”
confirmText:"退出模式",//默认是“确定”
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
clearTimeout(that.data.waitTimer);
clearInterval(that.data.beforeTimer);
clearTimeout(that.data.startTimer);
wx.navigateBack({
changed: true
});
} else {//这里是点击了取消以后
console.log('用户点击取消')
}
}
})
},
initDevice(){
let that = this
wx.getSystemInfo({
success: function (res) {
console.log('当前的系统',res)
if (res.platform == "devtools") {
that.setData({
phoneType: 'ios'
})
} else if (res.platform == "ios") {
that.setData({
phoneType: 'ios'
})
} else if (res.platform == "android") {
that.setData({
phoneType: 'android'
})
}
}
})
wx.getSetting({
success(res) {
if (!res.authSetting['scope.camera']){
wx.showModal({
title: '提示',
content: '请点击右上角设置授权摄像头',
showCancel: false,//是否显示取消按钮
confirmText:"知道了",//默认是“确定”
success: function (res) {
if (res.cancel) {
//点击取消,默认隐藏弹框
} else {
wx.navigateBack({
delta: 1
})
}
}
})
}else{
console.log('正常授权')
}
}
})
wx.openSetting({
success (res) {
if(res.authSetting['scope.camera']){
that.setData({
showCamera:true
})
}
}
})
}
})
\ No newline at end of file
{
"usingComponents": {},
"navigationStyle": "custom",
"pageOrientation":"landscape"
}
\ No newline at end of file
<camera device-position="{{!cameraFront?'back':'front'}}" flash="off" binderror="error" frame-size="medium" class="camera" id="camera">
<canvas type="2d" id="myCanvas" class="canvas"></canvas>
</camera>
<view wx:if="{{aiState == 1 || aiState == 6}}">
<image class="help-img" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png"></image>
<view class="help">
<view class="title">互动小提示</view>
<view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view>
</view>
</view>
<!-- 识别成功,读秒 -->
<view class="countdown" wx:if="{{aiState == 2}}">
<view class="second">{{downTime}}</view>
</view>
<!-- 进行中 -->
<view wx:if="{{aiState == 3}}">
<view class="time">{{downTimeStg}}</view>
<view class="number" style="{{levelfontsize}}">{{aiCount}}</view>
</view>
<!-- 成绩提交失败 -->
<view class="tips" wx:if="{{aiState == 4}}">
<view class="tips-type error-type">
抱歉,由于角度、光线等客观环境影响,AI识别失败!结束训练/重新开始训练
</view>
<view class="handle">
<!-- <view class="no-tips">不再提示</view> -->
<view class="know" bindtap="errknow">知道了</view>
</view>
</view>
<!-- 识别中 -->
<view class="switch" bindtap="switch" wx:if="{{aiState == 1}}">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/icon-flip.png"></image>
<view class="text">{{cameraFront?'切换家长拍模式':'切换自拍模式'}}</view>
</view>
<view class="exit" bindtap="exit">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/icon-exit.png"></image>
<view class="text">退出</view>
</view>
<audio src="{{src}}" id="myAudio" ></audio>
@font-face {
font-family: 'Number';
src: url('data:application/font-woff2;charset=utf-8;base64,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') format('woff2');
}
page{
background: #D1D1D1;
}
.canvas {
position: absolute;
width: 100%;
height: 100%;
z-index: 100;
}
/* 自定义导航条样式 */
.nav{
width: 100%;
overflow: hidden;
position: relative;
top: 0;
left: 0;
z-index: 10;
}
.nav-title{
width: 100%;
height: 90rpx;
line-height: 90rpx;
text-align: center;
position: absolute;
bottom: 0;
left: 0;
z-index: 10;
font-size:26rpx;
color: #FFFFFF;
}
.nav .back{
width: 44rpx;
height: 44rpx;
position: absolute;
bottom: 0;
left: 0;
padding: 24rpx 30rpx;
}
.bg-white{
background-color: transparent;
}
.bg-gray{
background-color: #f7f7f7;
}
.overflow{
overflow: auto;
}
.hidden{
overflow: hidden;
}
.user-info image{
width: 64rpx;
height: 64rpx;
}
.tips{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80%;
padding-bottom: 50rpx;
text-align: justify;
/* height: 242px; */
background: #FFFFFF;
box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.08);
border-radius: 12px;
padding:15px;
z-index: 99;
}
.errors{
height: 110px;
}
.error-type{
width: 90%;
margin: 0 auto;
margin-top: 10px;
}
.tips-type{
overflow: hidden;
}
.correct{
float: left;
width: 154px;
height: 140px;
margin-right: 1px;
}
.correct .img{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.correct .img image{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.error .img image{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.correct .text{
font-size: 12px;
color: #353535;
text-align: center;
line-height: 40px;
}
.no-tips{
float: left;
font-size: 14px;
color: #888888;
padding-top: 10px;
padding-left: 20px;
}
.know{
float: left;
width: 320rpx;
height: 40px;
line-height: 40px;
color: #FFFFFF;
border-radius: 22px;
text-align: center;
background: #FF9B4D;
margin-left: 160rpx;
font-size: 17px;
font-weight: bold;
margin-top: 14px;
}
.error{
float: left;
width: 100px;
height: 140px;
margin-right: 1px;
}
.error .img{
width: 100%;
height: 100px;
background: #F8F8F8;
}
.error .text{
font-size: 12px;
color: #353535;
text-align: center;
line-height: 40px;
}
.handle{
width: 100%;
height: 40px;
}
.switch{
position: absolute;
height: 44px;
padding-right: 10px;
line-height: 44px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
left: 20px;
bottom: 15px;
color: #FFFFFF;
z-index: 99;
}
.switch .text{
padding-left: 40px;
}
.switch image{
position: absolute;
top: 10px;
left: 6px;
width: 32px;
height: 26px;
}
.exit{
position: absolute;
height: 44px;
padding-right: 10px;
line-height: 44px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
right: 20px;
bottom: 15px;
color: #FFFFFF;
z-index: 99;
}
.exit .text{
padding-left: 40px;
}
.exit image{
position: absolute;
top: 8px;
left: 6px;
width: 32px;
height: 26px;
}
.help{
position: absolute;
left: 20px;
width: 192px;
background: #000000;
opacity: 0.74;
border-radius: 12px;
color: #FFFFFF;
text-align: center;
font-size: 14px;
z-index: 99;
padding-bottom: 40rpx;
bottom: 160rpx;
}
.help .title{
margin-top: 15px;
}
.help .content{
width: 86%;
margin: 0 auto;
text-align: left;
margin-top: 12px;
}
.help-img{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 432rpx;
height: 988rpx;
z-index: 98;
}
.countdown{
position:absolute;
width: 100%;
height: 100%;
background: #FF9B4D;
z-index: 100;
}
.countdown .second{
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #FFFFFF;
font-size: 160rpx;
font-family: 'Number';
z-index: 101;
}
.time{
position: absolute;
width: 220rpx;
height: 48px;
font-size: 34px;
line-height: 48px;
color: #FFFFFF;
background: #000000;
opacity: 0.74;
border-radius: 12px;
font-family: 'Number';
left: 20px;
top: 140rpx;
text-align: center;
z-index: 99;
}
.number{
position: absolute;
width: 220rpx;
height: 48px;
font-size: 34px;
line-height: 48px;
color: #FFFFFF;
background: #000000;
opacity: 0.74;
border-radius: 12px;
font-family: 'Number';
right: 20px;
top: 140rpx;
text-align: center;
z-index: 99;
}
.grade{
overflow: hidden;
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 487px;
height: 242px;
background: #FFFFFF;
box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.08);
border-radius: 12px;
z-index: 100;
}
.grade .num{
text-align: center;
font-size: 42px;
font-family: 'Number';
margin-top: 40px;
}
.grade text{
font-size: 12px;
color: #888888;
}
.eggs{
font-size: 14px;
color: #353535;
text-align: center;
width: 334px;
margin: 0 auto;
margin-top: 24px;
}
.btns{
width: 92%;
margin: 0 auto;
margin-top: 26px;
}
.btns-left{
background: #F5F5F5;
border-radius: 22px;
float: left;
width: 48%;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 17px;
font-weight: bold;
color: #FF9B4D;
}
.btns-right{
background: #FF9B4D;
border-radius: 22px;
float: right;
width: 48%;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 17px;
font-weight: bold;
color: #FFFFFF;
}
.camera{
width: 100%;
height: 100%;
position: absolute;
z-index:9
}
.tips-type-tips{
text-align: center;
font-size: 17px;
font-weight: bold;
margin-bottom: 14px;
}
...@@ -110,10 +110,19 @@ Page({ ...@@ -110,10 +110,19 @@ Page({
//运动时常 //运动时常
let time = this.data.timeList[this.data.popupActive].value let time = this.data.timeList[this.data.popupActive].value
wx.navigateTo({ if(this.data.sportDetail.id == 2){ //仰卧起坐
// url: '../../..//ai/index/index?sportTime=' + time, wx.navigateTo({
url:'../../../subPages/sport/ai-sport/ai-sport?sportTime=' + time, url:'../../../subPages/sport/ai-ywqz-sport/ai-ywqz-sport?sportTime=' + time,
}) })
}else if(this.data.sportDetail.id == 14){ //俯卧撑
wx.navigateTo({
url:'../../../subPages/sport/ai-fwc-sport/ai-fwc-sport?sportTime=' + time,
})
}else{
wx.navigateTo({
url:'../../../subPages/sport/ai-sport/ai-sport?sportTime=' + time,
})
}
}, },
//隐藏显示 //隐藏显示
......
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