| import { AutoProcessor, VitMatteForImageMatting, RawImage, Tensor, cat } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.14.2'; |
|
|
| env.allowLocalModels = false; |
|
|
| |
| const processor = await AutoProcessor.from_pretrained('Xenova/vitmatte-small-composition-1k'); |
| const model = await VitMatteForImageMatting.from_pretrained('Xenova/vitmatte-small-composition-1k'); |
|
|
| |
| const image = await RawImage.fromURL('https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/vitmatte_image.png'); |
| const trimap = await RawImage.fromURL('https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/vitmatte_trimap.png'); |
|
|
| |
| const inputs = await processor(image, trimap); |
|
|
| |
| const { alphas } = await model(inputs); |
| |
| |
| |
| |
| |
| |
|
|
| |
| const imageTensor = new Tensor( |
| 'uint8', |
| new Uint8Array(image.data), |
| [image.height, image.width, image.channels] |
| ).transpose(2, 0, 1); |
|
|
| |
| const alphaChannel = alphas |
| .squeeze(0) |
| .mul_(255) |
| .clamp_(0, 255) |
| .round_() |
| .to('uint8'); |
|
|
| |
| const imageData = cat([imageTensor, alphaChannel], 0); |
|
|
| |
| const outputImage = RawImage.fromTensor(imageData); |
| outputImage.save('output.png'); |
|
|
|
|