import { useState } from 'react' import { useRef } from "react"; import './Bird_CNN.css'; function Bird_CNN() { const apiUrl = process.env.NODE_ENV === "development" ? "https://api.marvinkrausser.com" : "https://api.marvinkrausser.com"; 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, }); 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)}%`); } catch (e) { setError(true); } finally { setLoading(false); } }; return ( <>

Bird Species Expert

Explanation

Select and upload an image to our bird classification model. The system will return a predicted species along with a confidence score indicating how certain the model is about its prediction. Please note that the model may not always produce correct classifications. The supported Species are:
  • Common Kingfisher
  • Common Myna
  • House Crow
  • Indian Peacock
  • Indian Pitta
  • Ruddy Shelduck
  • Sarus Crane
preview
{loading &&
}

Bird Species:

{birdClass &&

{birdClass}

}

Model Confidence:

{confidence &&

{confidence}

}
{error &&

An Error has uccured. Please try again later.

}

Model Architecture

The classification model is based on a convolutional neural network (CNN). The architecture consists of eight skip blocks, each containing three convolutional layers, followed by batch normalization after each convolution and a dropout rate of 0.3. The dataset comprised seven classes, with 1,200 images per class.
); } export default Bird_CNN;