File size: 1,859 Bytes
ea35075 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import { Class } from 'type-fest'
// https://github.com/google/mediapipe/blob/master/docs/solutions/pose.md#resources
import type { Results, Pose, PoseConfig } from '@mediapipe/pose'
import * as MediapipePose from '@mediapipe/pose'
import assets from '../assets'
// @mediapipe/pose is not an es module ??
// Extract Pose from the window to solve the problem
// To prevent optimization, just print it
console.log('@mediapipe/pose', MediapipePose)
const MyPose = import.meta.env.DEV
? MediapipePose.Pose
: ((window as any).Pose as Class<Pose, [PoseConfig]>)
console.log('MyPose', MyPose)
const AliyuncsBase =
'https://openpose-editor.oss-cn-beijing.aliyuncs.com/%40mediapipe/pose'
const JsdelivrBase = 'https://cdn.jsdelivr.net/npm/@mediapipe/pose'
let UseJsdelivrBase = true
function GetCDNBase() {
if (UseJsdelivrBase) return JsdelivrBase
else return AliyuncsBase
}
export function SetCDNBase(isJsdelivrBase: boolean) {
UseJsdelivrBase = isJsdelivrBase
}
const pose = new MyPose({
locateFile: (file) => {
if (file in assets) {
console.log('local', file)
return (assets as any)[file]
}
const url = `${GetCDNBase()}/${file}`
console.log('load pose model', url)
return url
},
})
// https://github.com/google/mediapipe/blob/master/docs/solutions/pose.md#solution-apis
pose.setOptions({
modelComplexity: 1,
smoothLandmarks: true,
enableSegmentation: true,
smoothSegmentation: true,
minDetectionConfidence: 0.5,
minTrackingConfidence: 0.5,
})
export function DetectPosefromImage(image: HTMLImageElement): Promise<Results> {
return new Promise((resolve) => {
pose.reset()
pose.send({ image: image })
pose.onResults((result) => {
console.log(result)
resolve(result)
})
})
}
|