import React, { useState, useEffect } from 'react'; import { Container, Typography, Box, Paper, Grid, CircularProgress, AppBar, Toolbar, ThemeProvider, createMuiTheme } from '@material-ui/core'; import ImageUploader from './components/ImageUploader'; import ModelSelector from './components/ModelSelector'; import ResultDisplay from './components/ResultDisplay'; import LlmAnalysis from './components/LlmAnalysis'; import OpenAIChat from './components/OpenAIChat'; import './App.css'; // Create a theme const theme = createMuiTheme({ palette: { primary: { main: '#3f51b5', }, secondary: { main: '#f50057', }, }, typography: { fontFamily: 'Roboto, Arial, sans-serif', }, }); function App() { const [selectedImage, setSelectedImage] = useState(null); const [selectedModel, setSelectedModel] = useState(''); const [isProcessing, setIsProcessing] = useState(false); const [results, setResults] = useState(null); const [error, setError] = useState(null); const [modelsStatus, setModelsStatus] = useState({ yolo: false, detr: false, vit: false }); // Check API status on component mount useEffect(() => { fetch('/api/status') .then(response => response.json()) .then(data => { setModelsStatus(data.models); }) .catch(err => { console.error('Error checking API status:', err); setError('Error connecting to the backend API. Please make sure the server is running.'); }); }, []); const handleImageUpload = (image) => { setSelectedImage(image); setResults(null); setError(null); }; const handleModelSelect = (model) => { setSelectedModel(model); setResults(null); setError(null); }; const processImage = async () => { if (!selectedImage || !selectedModel) { setError('Please select both an image and a model'); return; } setIsProcessing(true); setError(null); // Create form data for the image const formData = new FormData(); formData.append('image', selectedImage); let endpoint = ''; switch (selectedModel) { case 'yolo': endpoint = '/api/detect/yolo'; break; case 'detr': endpoint = '/api/detect/detr'; break; case 'vit': endpoint = '/api/classify/vit'; break; default: setError('Invalid model selection'); setIsProcessing(false); return; } try { const response = await fetch(endpoint, { method: 'POST', body: formData, }); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); setResults({ model: selectedModel, data }); } catch (err) { console.error('Error processing image:', err); setError(`Error processing image: ${err.message}`); } finally { setIsProcessing(false); } }; return ( Multi-Model Object Detection Demo Upload an image to see how each model performs! This demo showcases three different object detection and image classification models:
  • YOLOv8: Fast and accurate object detection
  • DETR: DEtection TRansformer for object detection
  • ViT: Vision Transformer for image classification
{error && ( {error} )} {isProcessing && ( Processing image... )} {results && ( <> )} {/* OpenAI Chat section at the end */}
); } export default App;