import LayoutPage from "@/components/templates/LayoutPage"; import { useEffect, useRef, useState } from "react"; import { FaCircleCheck } from "react-icons/fa6"; import useNavbarStore from "@/stores/NavbarStore"; import MediapipeHelper from "@/helper/MediapipeHelper"; import DetectionHelper from "@/helper/DetectionHelper"; type PredictResult = { abjad: String; acc: String; }; const Home = () => { const videoRef = useRef(null); const [loadCamera, setLoadCamera] = useState(false); const canvasRef = useRef(null); const [resultPredict, setResultPredict] = useState({ abjad: "", acc: "", }); const [handPresence, setHandPresence] = useState(false); const onHandDetected = async () => { const result = mediapipeHelper.getResult(); if (result.handPresence) { // console.log("Hand Detected"); setHandPresence(true); const predict = await detectionHelper.makePrediction(result.finalResult); console.log(predict); if (predict) { setResultPredict((prevState) => ({ ...prevState, ...predict, })); } } else { setHandPresence(false); } requestAnimationFrame(onHandDetected); }; const startWebcam = async () => { try { const stream = await navigator.mediaDevices.getUserMedia({ video: true, }); if (videoRef.current) { videoRef.current.srcObject = stream; } mediapipeHelper = new MediapipeHelper(videoRef); detectionHelper = new DetectionHelper(); onHandDetected(); } catch (error) { console.error("Error accessing webcam:", error); } }; const store = useNavbarStore(); let mediapipeHelper: MediapipeHelper; let detectionHelper: DetectionHelper; useEffect(() => { store.setNavSelected("home"); startWebcam(); setLoadCamera(true); return () => { }; }, []); return (
{loadCamera ? (
{handPresence && (

{resultPredict.abjad} ({resultPredict.acc})

)}
) : (
Loading...
)}
); }; export default Home;