Open olsommer opened 2 years ago
For anyone coming across this. You might be loading opencv differently, but it should be very similar no matter how you load it.
import { Button } from "~/components/Button";
import Webcam from "react-webcam";
import { cv, setupOpenCv } from "~/lib/opencv";
import { useRef, useState, useCallback } from "react";
let interval: NodeJS.Timeout;
export default function WebcamPage() {
const webcamRef = useRef<Webcam>(null);
const [capturing, setCapturing] = useState(false);
const [cvready, setCvReady] = useState(false);
const handleCanvas = useCallback(
(canvas: HTMLElement) => {
// console.log(canvas);
if (cvready) {
const src = cv.imread(canvas);
const dst = new cv.Mat();
// You can try more different parameters
cv.threshold(src, dst, 177, 200, cv.THRESH_BINARY);
cv.imshow("canvasOutput", dst);
src.delete();
dst.delete();
}
},
[cvready],
);
const capture = useCallback(() => {
interval = setInterval(() => {
const canv = webcamRef?.current?.getCanvas();
if (!canv) return;
handleCanvas(canv);
}, 50);
setCapturing(true);
}, [webcamRef, setCapturing, handleCanvas]);
const stop = useCallback(() => {
clearInterval(interval);
setCapturing(false);
}, [setCapturing]);
return (
<>
<Button
onClick={async () => {
await setupOpenCv();
setCvReady(true);
}}
>
init
</Button>
{cvready ? "cv ready" : "cv not ready"}
<Webcam audio={false} ref={webcamRef} />
{capturing ? (
<button onClick={stop}>Stop Capture</button>
) : (
<button onClick={capture}>Start Capture</button>
)}
<canvas id="canvasOutput" />
</>
);
}
Hello community, @mozmorris , I got stuck and I really don't know how to solve it. Now I'm writing my question here because I am a little bit desperate. Sorry for that..
I am trying to use react-webcam as media input only and a separate canvas element as output. That's because I need to draw some things later on top.
But the only thing I see is a black screen.. although my console gives me some "positive" output, means that it logs readyState=4 and a video element).
I don't get it, it only renders a black screen.. Hope someone can give me a hint.
My question is a bit like #167