mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-13 15:56:15 -08:00
fix Option
This commit is contained in:
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();
|
||||
}
|
||||
|
||||
|
||||
+13
-2
@@ -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;
|
||||
Reference in new issue
Block a user