Spaces:
Sleeping
Sleeping
| import React from "react" | |
| import { ImageSegmenterResult } from "@mediapipe/tasks-vision" | |
| import { segmentFrame } from "./segmentFrame" | |
| export async function getSegmentationCanvas({ | |
| frame, | |
| timestamp, | |
| width, | |
| height | |
| }: { | |
| frame: TexImageSource; | |
| timestamp: number; | |
| width: number; | |
| height: number; | |
| }): Promise<JSX.Element> { | |
| const results: ImageSegmenterResult = await segmentFrame(frame, timestamp); | |
| const canvas: HTMLCanvasElement | OffscreenCanvas | undefined = results.categoryMask?.canvas; | |
| // If there is a canvas, style it and return | |
| if (canvas) { | |
| const style = { | |
| width: `${width}px`, | |
| height: `${height}px`, | |
| }; | |
| // console.log("canvas:", canvas) | |
| const CanvasComponent = () => ( | |
| <canvas | |
| ref={(node) => { | |
| if (node) { | |
| node.width = width; | |
| node.height = height; | |
| const context = node.getContext('2d'); | |
| if (context) { | |
| context.drawImage(canvas, 0, 0, width, height); | |
| } | |
| } | |
| }} | |
| style={style} | |
| /> | |
| ); | |
| return <CanvasComponent />; | |
| } else { | |
| // Return a blank canvas if no canvas is found in results | |
| return ( | |
| <canvas | |
| width={width} | |
| height={height} | |
| style={{ | |
| width: `${width}px`, | |
| height: `${height}px`, | |
| backgroundColor: 'transparent', | |
| }} | |
| /> | |
| ); | |
| } | |
| } |