import { useState } from 'react' import { useRef } from "react"; import './Bird_CNN.css'; function Bird_CNN() { const apiUrl = process.env.NODE_ENV === "development" ? "https://marvinkrausser.com/cnn-api" : "https://marvinkrausser.com/cnn-api"; const [file, setFile] = useState(null); const [birdClass, setBirdClass] = useState(null); const [confidence, setConfidence] = useState(null); const [error, setError] = useState(false); const [preview, setPreview] = useState("/cherry_bird.jpeg"); const [loading, setLoading] = useState(false); const fileInputRef = useRef(null); const uploadButton = useRef(null); const scrollRefClassifiction = useRef(null); const scrollRefUploadButton = useRef(null); const isPartiallyInViewport = (el) => { if (!el) return false; const rect = el.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom > 0 ); }; const handleImageDivClick = () => { fileInputRef.current.click(); } const handleImage = (e) => { if (!e.target.files[0]) { return; } setFile(e.target.files[0]); setPreview(URL.createObjectURL(e.target.files[0])); uploadButton.current.classList.remove("inactive"); scrollRefUploadButton.current.scrollIntoView({ behavior: "smooth" }); setConfidence(null); setBirdClass(null); }; const sendImage = async (e) => { if (!file) return; scrollRefClassifiction.current.scrollIntoView({ behavior: "smooth" }); const formData = new FormData(); formData.append("file", file); setLoading(true); try { const response = await fetch(`${apiUrl}/predict`, { method: "POST", body: formData, }); } catch (e) { setError(true); return; } finally { setLoading(false); } if (!response.ok) { setError(true); return; } else { setError(false); } const result = await response.json(); setBirdClass(result["class"]); const confidence = result["confidence"]; setConfidence(`${Math.round(confidence * 100)}%`); }; return ( <>
{birdClass}
{confidence}