fix Option

This commit is contained in:
Harvey Zack committed 2024-10-08 11:53:26 +08:00
1 parent fdfc44806c
commit 7a1240b889
4 files changed
+89 -29

No files matched your search

@@ -158,9 +158,22 @@ function artplayerPluginDanmukuMask(option = {}) {
let ctx = null;
let animationFrameId = null;
let isInitialized = false;
const config = {
solutionPath: option.solutionPath || "https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation",
modelSelection: option.modelSelection || 1,
smoothSegmentation: option.smoothSegmentation !== undefined ? option.smoothSegmentation : true,
minDetectionConfidence: option.minDetectionConfidence || 0.5,
minTrackingConfidence: option.minTrackingConfidence || 0.5,
selfieMode: option.selfieMode || false,
drawContour: option.drawContour || false,
foregroundThreshold: option.foregroundThreshold || 0.5,
opacity: option.opacity || 1,
maskBlurAmount: option.maskBlurAmount || 3
};
async function initTensorFlow() {
try {
await _tfjsCore.setBackend("webgl");
console.log("Using WebGL backend");
} catch (e) {
console.warn("WebGL backend not available, falling back to CPU");
await _tfjsCore.setBackend("cpu");
@@ -172,22 +185,31 @@ function artplayerPluginDanmukuMask(option = {}) {
const segmenterConfig = {
runtime: "mediapipe",
modelType: "general",
solutionPath: option.solutionPath || "https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation",
modelSelection: option.modelSelection || 1,
smoothSegmentation: option.smoothSegmentation !== undefined ? option.smoothSegmentation : true,
minDetectionConfidence: option.minDetectionConfidence || 0.5,
minTrackingConfidence: option.minTrackingConfidence || 0.5,
selfieMode: option.selfieMode || false
solutionPath: config.solutionPath,
modelSelection: config.modelSelection,
smoothSegmentation: config.smoothSegmentation,
minDetectionConfidence: config.minDetectionConfidence,
minTrackingConfidence: config.minTrackingConfidence,
selfieMode: config.selfieMode
};
try {
segmenter = await _bodySegmentation.createSegmenter(model, segmenterConfig);
$danmuku.style.maskMode = "alpha";
isInitialized = true;
console.log("Segmenter initialized successfully");
} catch (error) {
console.error("Error initializing segmenter:", error);
isInitialized = false;
}
}
function setupDanmukuStyle() {
Object.assign($danmuku.style, {
maskMode: "alpha",
maskSize: "contain",
maskRepeat: "no-repeat",
backgroundSize: "contain",
backgroundRepeat: "no-repeat"
});
}
function createCanvas() {
canvas = document.createElement("canvas");
ctx = canvas.getContext("2d");
@@ -220,19 +242,20 @@ function artplayerPluginDanmukuMask(option = {}) {
animationFrameId = requestAnimationFrame(segmentBody);
return;
}
const foregroundThreshold = option.foregroundThreshold || 0.6;
const mask = await _bodySegmentation.toBinaryMask(segmentation, {
const foregroundColor = {
r: 255,
g: 255,
b: 255,
a: 255
}, {
};
const backgroundColor = {
r: 0,
g: 0,
b: 0,
a: 255
}, false, foregroundThreshold);
await _bodySegmentation.drawMask(canvas, $video, mask, 1, 1);
};
const mask = await _bodySegmentation.toBinaryMask(segmentation, foregroundColor, backgroundColor, config.drawContour, config.foregroundThreshold);
await _bodySegmentation.drawMask(canvas, $video, mask, config.opacity, config.maskBlurAmount);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
ctx.putImageData(makeWhiteTransparent(imageData), 0, 0);
$danmuku.style.maskImage = `url(${canvas.toDataURL()})`;
@@ -244,6 +267,7 @@ function artplayerPluginDanmukuMask(option = {}) {
async function startSegmentation() {
if (!isInitialized) await initSegmenter();
if (!canvas) createCanvas();
setupDanmukuStyle();
segmentBody();
}
function stopSegmentation() {
@@ -1 +1 @@
{"mappings":"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 truncated
{"mappings":"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 truncated
@@ -15,9 +15,23 @@ export default function artplayerPluginDanmukuMask(option = {}) {
let animationFrameId = null;
let isInitialized = false;
const config = {
solutionPath: option.solutionPath || 'https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation',
modelSelection: option.modelSelection || 1,
smoothSegmentation: option.smoothSegmentation !== undefined ? option.smoothSegmentation : true,
minDetectionConfidence: option.minDetectionConfidence || 0.5,
minTrackingConfidence: option.minTrackingConfidence || 0.5,
selfieMode: option.selfieMode || false,
drawContour: option.drawContour || false,
foregroundThreshold: option.foregroundThreshold || 0.5,
opacity: option.opacity || 1,
maskBlurAmount: option.maskBlurAmount || 3,
};
async function initTensorFlow() {
try {
await tf.setBackend('webgl');
console.log('Using WebGL backend');
} catch (e) {
console.warn('WebGL backend not available, falling back to CPU');
await tf.setBackend('cpu');
@@ -31,24 +45,34 @@ export default function artplayerPluginDanmukuMask(option = {}) {
const segmenterConfig = {
runtime: 'mediapipe',
modelType: 'general',
solutionPath: option.solutionPath || 'https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation',
modelSelection: option.modelSelection || 1,
smoothSegmentation: option.smoothSegmentation !== undefined ? option.smoothSegmentation : true,
minDetectionConfidence: option.minDetectionConfidence || 0.5,
minTrackingConfidence: option.minTrackingConfidence || 0.5,
selfieMode: option.selfieMode || false,
solutionPath: config.solutionPath,
modelSelection: config.modelSelection,
smoothSegmentation: config.smoothSegmentation,
minDetectionConfidence: config.minDetectionConfidence,
minTrackingConfidence: config.minTrackingConfidence,
selfieMode: config.selfieMode,
};
try {
segmenter = await bodySegmentation.createSegmenter(model, segmenterConfig);
$danmuku.style.maskMode = 'alpha';
isInitialized = true;
console.log('Segmenter initialized successfully');
} catch (error) {
console.error('Error initializing segmenter:', error);
isInitialized = false;
}
}
function setupDanmukuStyle() {
Object.assign($danmuku.style, {
maskMode: 'alpha',
maskSize: 'contain',
maskRepeat: 'no-repeat',
backgroundSize: 'contain',
backgroundRepeat: 'no-repeat',
});
}
function createCanvas() {
canvas = document.createElement('canvas');
ctx = canvas.getContext('2d');
@@ -91,17 +115,17 @@ export default function artplayerPluginDanmukuMask(option = {}) {
return;
}
const foregroundThreshold = option.foregroundThreshold || 0.6;
const foregroundColor = { r: 255, g: 255, b: 255, a: 255 };
const backgroundColor = { r: 0, g: 0, b: 0, a: 255 };
const mask = await bodySegmentation.toBinaryMask(
segmentation,
{ r: 255, g: 255, b: 255, a: 255 },
{ r: 0, g: 0, b: 0, a: 255 },
false,
foregroundThreshold,
foregroundColor,
backgroundColor,
config.drawContour,
config.foregroundThreshold,
);
await bodySegmentation.drawMask(canvas, $video, mask, 1, 1);
await bodySegmentation.drawMask(canvas, $video, mask, config.opacity, config.maskBlurAmount);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
ctx.putImageData(makeWhiteTransparent(imageData), 0, 0);
@@ -120,6 +144,7 @@ export default function artplayerPluginDanmukuMask(option = {}) {
if (!canvas) {
createCanvas();
}
setupDanmukuStyle();
segmentBody();
}
@@ -4,11 +4,22 @@ export = artplayerPluginDanmukuMask;
export as namespace artplayerPluginDanmukuMask;
type Option = {
//
solutionPath?: string;
modelSelection?: number;
smoothSegmentation?: boolean;
minDetectionConfidence?: number;
minTrackingConfidence?: number;
selfieMode?: boolean;
drawContour?: boolean;
foregroundThreshold?: number;
opacity?: number;
maskBlurAmount?: number;
};
type Result = {
name: 'artplayerPluginDanmukuMask';
start: () => Promise<void>;
stop: () => void;
};
declare const artplayerPluginDanmukuMask: (option: Option) => (art: Artplayer) => Result;
declare const artplayerPluginDanmukuMask: (option?: Option) => (art: Artplayer) => Result;