【一步步開發AI運動小程式】八、利用body-calc進行姿態識別

来源:https://www.cnblogs.com/alphaair/archive/2023/05/26/17432480.html
-Advertisement-
Play Games

> 隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**雲上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ...


隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓雲上運動會、線上運動會、健身打卡、AI體育指導等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本系列文章將使用“雲智AI運動識別小程式插件”,請先行在微信服務市場官網瞭解詳情。

一、支持的檢測規則

人體姿態檢測能力是插件的核心功能之一,插件為您封裝好了基本的人體檢測及邏輯運算檢測規則。

1.1、基本人體檢測規則

插件提供了:肢体角度匹配平行檢測垂直檢測視角檢查站立檢查卧躺檢查人體範圍檢查點位碰撞等檢測規則,詳情參考api-docs文檔。

1.1、邏輯運算規則

插件提供了:$or$and兩個邏輯運算器,詳情參考api-docs文檔。

二、規則編寫語法

每條檢測規則都是一個Object對象,其中namecalc屬性為必填,其它參數參考具體的檢測規則,如:

//這是一個檢查人體是否的檢測
const rule = {
    name: '人體站立狀態要求', //必填,本規則自定義名稱
    calc: 'stand', //必填,要執行的規則計算器名稱
    offset : 15 //選填,規則的允許偏差範圍
};

//規則嵌套,利用$or和$and邏輯規則進行多規嵌套
const rules = {
  name: '右側站立檢查',
  calc: '$and',
  rules: [{
  	name: '側面視角',
	calc: 'camera-view',
	position: 'right'
  }, rule]
};

三、執行檢測規則運算

所有的人體檢測規則,有calc.Calculator負責執行。

const AiSport = requirePlugin("aiSport");
const humanDetection = AiSport.humanDetection;
const calculator = AiSport.calc.Calculator;

const rule = {
    name: '人體站立狀態要求',
    calc: 'stand',
    offset : 15
};
const calculator = new Calculator();

//抽幀
const context = wx.createCameraContext();
const listener = context.onCameraFrame((frame) => {
	const iamge = {
		width: Number(frame.width),
		height: Number(frame.height),
		rawData: frame.data
	};
	
	//人體識別
	humanDetection.detectionAsync(image).then(human=>{
		
		//對人體識別結果,進行單規則姿態檢測
		console.log(calculator.calculating(human, rule));
		
		//返回值:true-通過;false-不通過
		
	});
});
listener.start();

四、姿態檢測實戰

下麵帶您來做一個馬步蹲的姿態檢查實戰,如下圖所示:
image

const AiSport = requirePlugin("aiSport");
const humanDetection = AiSport.humanDetection;
const Calculator = AiSport.calc.Calculator;

//下肢要求
const foot = {
	name: '腳90度檢測',
	calc: '$or',
	rules: [{
		name: '左腳90度彎曲',
		calc: 'match-angle',
		angleKey: 'left_knee',
		secondKey: 'left_hip',
		thirdKey: 'left_ankle',
		angle: 90,
		offset: 25
	}, {
		name: '右腳90度彎曲',
		calc: 'match-angle',
		angleKey: 'right_knee',
		secondKey: 'right_hip',
		thirdKey: 'right_ankle',
		angle: 90,
		offset: 25
	}]
};

const arm = {
	name: '手臂180度檢測',
	calc: '$or',
	rules: [{
		name: '左手180度伸直',
		calc: 'match-angle',
		angleKey: 'left_elbow',
		secondKey: 'left_shoulder',
		thirdKey: 'left_wrist',
		angle: 180,
		offset: 25
	}, {
		name: '右手180度伸直',
		calc: 'match-angle',
		angleKey: 'right_elbow',
		secondKey: 'right_shoulder',
		thirdKey: 'right_wrist',
		angle: 180,
		offset: 25
	}]
};

const shoulder = {
	name: '腋下夾角90度檢測',
	calc: '$or',
	rules: [{
		name: '左腋90度',
		calc: 'match-angle',
		angleKey: 'left_shoulder',
		secondKey: 'left_elbow',
		thirdKey: 'left_hip',
		angle: 90,
		offset: 25
	}, {
		name: '右腋90度',
		calc: 'match-angle',
		angleKey: 'right_shoulder',
		secondKey: 'right_elbow',
		thirdKey: 'right_hip',
		angle: 90,
		offset: 25
	}]
};

const rule = {
	name: '馬步蹲姿勢檢查',
	calc: '$and',
	rules: [{
		name: '全身進入圖像範圍內檢查',
		calc: 'whole'
	}, foot, arm, shoulder]
};
const calculator = new Calculator();

//抽幀
const context = wx.createCameraContext();
const listener = context.onCameraFrame((frame) => {
	const iamge = {
		width: Number(frame.width),
		height: Number(frame.height),
		rawData: frame.data
	};
	
	//人體識別
	humanDetection.detectionAsync(image).then(human=>{
		
		//執行檢測
		console.log(calculator.calculating(human, rule));
		
	});
});
listener.start();

五、後記

body-calc的檢測規則都是對象化,所以開發者實際應用中可以考慮採用JSON方式持久化,放置在後端,便於運動、姿態的檢測更新、配置化等。

下篇將為您介運動調試分析工具的使用,敬請期待...

提供信息系統、公眾號、小程式、APP訂製開發服務

www.yztob.com

QQ:316455841

歡迎通過各種渠道咨詢瞭解,免費提供信息系統建設咨詢服務。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於菜譜類的數據這個博客里已經發現過幾次,但是關於數據量多一點的飲食方面的數據似乎沒有見過,即使有也是千把條數據,而今天採集的就是一個關於飲食方面網站的大量數據。 分類是根據模塊來區分的所以類別不是很多,詳細情況是:廚房寶典(969)、美食笑話(175)、新鮮食報(5770)、飲食文化(980)、營 ...
  • APP發佈到市場後,難免會遇到嚴重的BUG阻礙用戶使用,因此有在不發佈新版本APP的情況下使用熱更新技術立即修複BUG需求。原生APP(例如:Android & IOS)的熱更新需求已經比較成熟,但Flutter技術棧目前還缺少類似的技術方案,因此Flutter研發團隊,也需要類似的熱更新技術。 ...
  • 一說到創建桌面應用,就不得不提及Electron和Tauri框架。這次給大家主要分享的是基於electron最新版本整合vite4.x構建vue3桌面端應用程式。 之前也有使用vite2+vue3+electronc創建桌面端項目,不過 vue-cli-plugin-electron-builder ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、小票列印 目前市面上的小票印表機大多採用的列印指令集為ESC/POS指令,它可以使用ASCII碼、十進位、十六進位來控制列印,我們可以使用它來控制字體大小、列印排版、字體加粗、下劃線、走紙、切紙、控制錢箱等,下麵以初始化印表機為例: ...
  • apply(thisArg) apply(thisArg, argsArray) thisArg 在 func 函數運行時使用的 this 值。請註意,this 可能不是該方法看到的實際值:如果這個函數處於非嚴格模式下,則指定為 null 或 undefined 時會自動替換為指向全局對象,原始值會 ...
  • 具體的加密演算法可以可自行查詢其區別,這裡只是拋磚引玉,大部分加密方法基本都能通過改變傳入參數來實現。 C#相關類文檔: System.Security.Cryptography 命名空間 | Microsoft Learn Node JS相關文檔:Crypto | Node.js v16.20.0 ...
  • >我們是[袋鼠雲數棧 UED 團隊](http://ued.dtstack.cn/),致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。。 >本文作者:琉易 [liuxianyu.cn](https://link.juejin.cn/?target=h ...
  • # JavaScript 格式化金額 ## 一、[使用 `Intl.NumberFormat` 構造函數](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberForm ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...