GL_INVALID_VALUE: Offset overflows texture dimensions.
Texture.from
с тем же источником, то получаем не новую текстуру, а ту, которая уже была. Но в вашем коде где-то по дороге меняются размеры. А сама текстура, сам буфер с пикселями, получается старый, закешированный. Это, вполне вероятно, и вызывает несоответствие. Решением должно быть использование метода destroy() у текстуры, чтобы ее уничтожить с концами при переинициализации. Альтернативно у конструктора Texture.from
есть второй параметр skipCache, который по идее даст схожий результат. script.async = false;
// Functions
const loadedScripts = new Set();
async function loadScript(url) {
if (loadedScripts.has(url)) return;
const script = document.createElement('script');
script.src = url;
script.async = false;
document.head.append(script);
return new Promise((resolve, reject) => {
script.addEventListener('load', () => {
loadedScripts.add(url); resolve();
});
script.addEventListener('error', () => reject(
new Error(`Error loading script: ${url}`)
));
});
}
async function loadImage(url) {
const image = new Image();
image.src = url;
image.crossOrigin = 'anonymous';
return new Promise((resolve, reject) => {
image.addEventListener('load', () => {
resolve(image);
});
image.addEventListener('error', () => reject(
new Error(`Error loading image: ${url}`)
));
});
}
// Example
const image = loadImage('https://habrastorage.org/r/w1560/getpro/habr/upload_files/799/62f/375/79962f375d90db7f7d926ff40d623456.png');
await Promise.all([
loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-core'),
loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter'),
loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl'),
loadScript('https://cdn.jsdelivr.net/npm/@tensorflow-models/face-landmarks-detection@1.0.6/dist/face-landmarks-detection.min.js')
]);
const model = faceLandmarksDetection.SupportedModels.MediaPipeFaceMesh;
const detectorConfig = {
runtime: 'tfjs',
solutionPath: 'https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh'
};
const detector = await faceLandmarksDetection.createDetector(model, detectorConfig);
const faces = await detector.estimateFaces(await image);
console.log(faces);
Точно такая же сцена требуется в другом месте, и не хотелось бы дублировать код и создавать ту же сцену для другого канвас
sys.getdefaultencoding()
> 'íåæèëîãî'.encode('latin1').decode('cp1251')
'нежилого'