引言: 又是一年年末了,距國家提出“體重管理年”健康促進活動已過去一年了,您的體重達標了嗎?今天,就讓我們一同深入探討單位、部門組織職工響應國家“體重管理年”活動時,在相關應用開發方面的實用解決方案。

一、「體重管理年」健康促進活動

體重管理年是由國家衞生健康委聯合教育部、體育總局等16個部門於2024年6月共同發起的健康促進活動,旨在應對居民因超重肥胖引發的慢性病問題,開展為期三年的全民體重管理專項行動。

藉助移動互聯網與AI運動識別技術的APP、小程序,組織全體職工參與健身鍛鍊,積極響應國家“體重管理年”號召,具備操作簡便、成效顯著、數據可量化等優勢,是企業、單位及各級工會組織的上佳之選。

“體重管理年”AI運動應用開發解決方案推薦_AI運動APP

二、體重管理年適應的那些AI運動場景

3.1、日常運動鍛鍊

職工藉助AI運動小程序與APP,能夠突破時間與空間的限制,隨時隨地開啓鍛鍊記錄之旅。在整個運動過程中,無需繁瑣地手動錄入運動量數據,職工只需全身心地沉浸於運動鍛鍊之中。待運動結束後,應用便會自動精準記錄運動量,並生成包含熱量消耗、BMI等各項指數的詳細鍛鍊報告,以及直觀反映鍛鍊情況的鍛鍊曲線。如此一來,職工可隨時清晰掌握自身鍛鍊效果與歷史數據,為科學規劃後續鍛鍊提供有力依據。

3.2、運動打卡活動

通過精心策劃並組織線上運動打卡活動,引導職工以週期性的方式積極參與到各類運動打卡項目中來,此舉能夠進一步激發並提升職工參與“體重管理年”活動的熱情與積極性。線上運動打卡活動具備高度的靈活性與多樣性,可組織涵蓋多種運動類型的豐富項目,如跳繩、開合跳、高抬腿、俯卧撐、卷腹、仰卧起坐、深蹲(深蹲起)、平板支撐、馬步蹲、坐位體前屈等,滿足不同職工的個性化運動需求。活動過程中,系統將自動生成團體榜單、個人榜單、單項運動榜單以及綜合運動榜單,這些榜單不僅全面反映了職工的運動參與情況與成果,更為活動的評優工作以及激勵獎品的精準發放提供了堅實有力的數據支撐,確保整個活動公平、公正、公開且富有成效。

3.3、運動競賽活動

為有效激勵職工踴躍參與體重管理年活動,藉助小程序、APP搭建線上運動會比拼競賽平台不失為一個絕佳策略。這種線上運動會打破了傳統體育活動的時空侷限,職工無需受地域和時間的嚴格束縛,在活動設定的時間範圍內,能夠隨時隨地投身於運動比拼之中,充分展現個人運動風采。活動結束後,依託系統生成的詳細競賽榜單,通過科學合理的評優、評先機制,併為表現優異的職工發放具有紀念意義的激勵物品,以此進一步點燃廣大職工參與體重管理年活動的熱情,推動活動取得更為顯著的成效。

三、開發定製解決方案

如需量身打造一套自己的職工健身系統,可以選擇深度開發定製或者委託第三方開發,要實現上面的AI運動鍛鍊、線上運動打卡、線上運動競賽的小程序或APP,要解決的核心功能便是通過視覺識別運動,即通過手機相機捕捉用户運動畫面,來實現各種運動計時、計數能力。

3.1、體重管理年小程序解決方案

小程序為作為依託微信的即來即用的輕量應用,有着開發週期短、易傳播、易使用的特點,是用來承載職工健身運動系統客户端的一項不錯選擇,在此向您推薦通過「AI運動識別插件」來快速獲得AI運動識別能力,件插件內置有跳繩、開合跳、高抬腿、俯卧撐、卷腹、仰卧起坐、深蹲(深蹲起)、平板支撐、馬步蹲、坐位體前屈等運動的識別檢測計時、計數分析,還能實現自定義姿態和擴展新運動項目,是快速開發AI運動小程序的最佳選擇。

“體重管理年”AI運動應用開發解決方案推薦_AI健身_02

插件託管在微信小程序平台的服務市場,簡單配置項目即可引入,然後通過完善的demo進行二次開發即可。

"plugins": {
	"aiSport": {
		"version": "1.0.12",
		"provider": "wx6130e578c4a26a1a"
	}
}

3.2、體重管理年APP解決方案

若追求更高的性能和用户體驗,也可以選擇開發AI運動APP來承載職工健身系統客户端,APP端也可以通過集成現有AI運動識別插件來快速獲得AI運動識別能力,插件基於跨平台移動應用開發框架uni-app實現,可以為您的APP提供人體檢測、運動識別的AI能力,插件內置有跳繩、開合跳、高抬腿、俯卧撐、卷腹、仰卧起坐、深蹲(深蹲起)、平板支撐、馬步蹲、坐位體前屈等運動的識別檢測計時、計數分析,更多的運動類型正在豐富中;同時插件提供了規則檢測配置和姿態相似度比較兩個能力,幫助您自定義擴展新運動、新姿態的識別檢測。助力您快速實現AI健身、線上運動賽事、雲上運動會、AI學生體測、AI美體、AI康復鍛鍊等應用場景的APP。

“體重管理年”AI運動應用開發解決方案推薦_AI運動小程序_03

  • 使用代碼片段
<template>
	<view class="human-detection">
		<camera id="preview" class="preview" :style="videoStyles" flash="off" :device-position="deviceKey"
			resolution="high" frame-size="low" @initdone="onCameraReady">
		</camera>
		<canvas v-if="poseDrawEnabled" class="preview graphs" type="2d" id="graphics" :style="videoStyles"></canvas>
	</view>
</template>

<script>

	const AiSports = requirePlugin("aiSport");
	const PoseGraphs = AiSports.PoseGraphs;
	const humanDetection = AiSports.humanDetection;

	export default {
		data() {
			return {
				zoom: 1,
				deviceKey: "back",
				previewWidth: 480,
				previewHeight: 640,
				previewRate: 1,

				frameWidth: 480,
				frameHeight: 640,
				status: 'unknown',
				fps: 0,
				poseFps: 0,

				isHumanBody: false
			};
		},
		computed: {
			videoStyles() {
				const style = `width:${this.previewWidth}px;height:${this.previewHeight}px;`;

				return style;
			}
		},
		mounted() {
			this.autoFitPreview(480, 640);
			this.initCanvas();
		},
		methods: {
			autoFitPreview(width, height) {
				const sifno = uni.getSystemInfoSync();
				let rate = sifno.windowWidth / width;

				this.previewWidth = width * rate;
				this.previewHeight = height * rate;
				this.previewRate = rate;
				this.frameWidth = width;
				this.frameHeight = height;
			},
			initCanvas() {

				const that = this;
				const query = uni.createSelectorQuery().in(that);
				query.select('#graphics')
					.fields({
						node: true,
						size: true
					})
					.exec((res) => {

						if (utils.isEmptyArray(res))
							return;

						const canvas = res[0].node;
						const ctx = canvas.getContext('2d');
						const dpr = uni.getSystemInfoSync().pixelRatio;
						canvas.width = res[0].width * dpr;
						canvas.height = res[0].height * dpr;
						ctx.scale(dpr, dpr);

						that.canvas = canvas;
						that.ctx = ctx;

						that.poseGraphs = new PoseGraphs(ctx, canvas.width, canvas.height, 1);
						that.poseGraphs.lineColor = "#FF8E148C";//線條顏色

					});
			},

			async detection(frame) {

				const human = await humanDetection.detectionAsync(frame);
				//無結果
				if (!human)
					this.poseGraphs.clear();
				else
					this.poseGraphs.drawing(human.keypoints);

			},

			initVideo() {

				if (this.camera)
					return;

				const that = this;
				this.camera = new CameraDevice();
				this.camera.onFrame = frame => {

					that.fps = that.camera.fps;

					//重新自適應
					if (frame.width != that.frameWidth || frame.height != that.frameHeight) {
						that.autoFitPreview(frame.width, frame.height);
						that.initCanvas();
					}

					that.detection(frame);
				};
			}
		}
	}
</script>

<style lang="scss">
	.human-detection {
		width: auto;
		height: auto;

		.preview {
			margin: auto;
			width: 480px;
			height: 640px;
		}

		.graphs {
			position: absolute;
			top: 0;
			left: 0;
			z-index: 9999;
			box-shadow: 0 0 14.4928rpx #CCC;
			background-color: rgba(0, 0, 0, 0.01);
		}
	}
</style>

四、採購成熟的AI運動系統

若不想進行開發或者只是短時間舉辦賽事活動,也可以採用成熟的Ai運動系統,比如「Ai樂運動系統」,支持AI運動健身、免費舉辦打卡賽、比拼賽、個人賽、團組賽等形式多樣的線上運動賽事活動,支持多維度的排行榜,活動數據支持批量導出。如果有運營自己的AI運動小程序需求,還支持SaaS託管或私有部署的方式快速上線屬於自己的AI運動系統,且提供基於現有功能進行深度定製服務。

“體重管理年”AI運動應用開發解決方案推薦_AI健身_04

“體重管理年”AI運動應用開發解決方案推薦_AI健身_05