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 () => { if (!mediapipeHelper || !detectionHelper) { return; } mediapipeHelper.detectHands(); const result = mediapipeHelper.getResult(); if (result.handPresence) { // console.log("Hand Detected"); setHandPresence(true); const predict = await detectionHelper.makePrediction(result.finalResult); if (predict) { setResultPredict((prevState) => ({ ...prevState, ...predict, })); } } else { setHandPresence(false); } requestAnimationFrame(onHandDetected); }; const startWebcam = async () => { try { console.log("Requesting camera access..."); const stream = await navigator.mediaDevices.getUserMedia({ video: true, }); if (videoRef.current) { videoRef.current.srcObject = stream; mediapipeHelper = new MediapipeHelper(videoRef); detectionHelper = new DetectionHelper(); console.log("Camera access granted and helpers initialized."); } setLoadCamera(true); onHandDetected(); } catch (error) { console.error("Error accessing webcam:", error); } }; const store = useNavbarStore(); let mediapipeHelper: MediapipeHelper; let detectionHelper: DetectionHelper; useEffect(() => { store.setNavSelected("home"); startWebcam(); return () => { if (videoRef.current) { (videoRef.current.srcObject as MediaStream) ?.getTracks() .forEach((track) => { track.stop(); }); } }; }, []); return (
{loadCamera ? (
{handPresence && (

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

)}
) : (

Loading...

)}
); }; export default Home;