Agrovision / static /js /analysis.js
qwfjgp2's picture
Upload 46 files
7249792 verified
Raw
History Blame Contribute Delete
4.63 kB
import { getCurrentLanguage, translate } from './i18n.js';
import { getCurrentImageFile } from './upload.js';
import { apiCall } from './auth.js';
import { navigateTo } from './navigation.js';
async function analyzeImage() {
// Check authentication first
const authResult = await apiCall('/api/check-auth');
if (!authResult.success || !authResult.data.authenticated) {
alert(getCurrentLanguage() === 'az' ? 'Zəhmət olmasa əvvəlcə daxil olun' : 'Please sign in first to analyze images');
navigateTo('login', { preventDefault: () => {} });
return;
}
const currentImageFile = getCurrentImageFile();
if (!currentImageFile) {
alert(getCurrentLanguage() === 'az' ? 'Zəhmət olmasa əvvəlcə şəkil seçin' : 'Please select an image first');
return;
}
const analyzeBtn = document.querySelector('button[onclick="analyzeImage()"]');
const originalText = analyzeBtn.textContent;
analyzeBtn.disabled = true;
analyzeBtn.textContent = getCurrentLanguage() === 'az' ? 'Təhlil edilir...' : 'Analyzing...';
const formData = new FormData();
formData.append('image', currentImageFile);
try {
const response = await fetch('/api/upload', { method: 'POST', credentials: 'include', body: formData });
const result = await response.json();
analyzeBtn.disabled = false;
analyzeBtn.textContent = originalText;
if (result.success) {
displayResults(result);
} else {
alert('Error: ' + result.message);
}
} catch (error) {
analyzeBtn.disabled = false;
analyzeBtn.textContent = originalText;
alert('Error uploading image: ' + error.message);
}
}
function generateQRCode(data) {
const qrContainer = document.getElementById('qrcode');
if (!qrContainer) return;
qrContainer.innerHTML = '';
const qrData = JSON.stringify({ prediction: data.prediction || 'Unknown', confidence: data.confidence || 0, timestamp: new Date().toISOString(), url: window.location.href });
if (typeof QRCode === 'undefined') {
qrContainer.innerHTML = '<p class="text-red-500 text-sm">QR Code library not loaded</p>';
return;
}
QRCode.toCanvas(qrContainer, qrData, { width: 200, margin: 2, color: { dark: '#000000', light: '#FFFFFF' } }, function (error) {
if (error) {
qrContainer.innerHTML = '<p class="text-red-500 text-sm">QR Code generation failed</p>';
}
});
}
function displayResults(result) {
const resultsSection = document.getElementById('results-section');
if (!resultsSection) return;
const prediction = result.prediction || 'Unknown';
const confidence = result.confidence || 0;
generateQRCode(result);
const titleElement = resultsSection.querySelector('h3');
if (titleElement) {
titleElement.textContent = translate('analyze.analysisComplete');
}
const confidenceBadge = document.getElementById('confidence-badge');
if (confidenceBadge) {
confidenceBadge.textContent = `${confidence}% ${translate('common.confidence')}`;
}
const isHealthy = prediction.toLowerCase().includes('healthy');
const healthStatus = isHealthy ? 'Excellent' : 'Needs Attention';
const healthColor = isHealthy ? 'text-green-600' : 'text-orange-600';
const healthStatusElements = resultsSection.querySelectorAll('.text-3xl.font-bold');
if (healthStatusElements.length > 0) {
healthStatusElements[0].textContent = healthStatus;
healthStatusElements[0].className = `text-3xl font-bold ${healthColor}`;
}
const diseaseRiskElements = resultsSection.querySelectorAll('.text-3xl.font-bold');
if (diseaseRiskElements.length > 1) {
diseaseRiskElements[1].textContent = isHealthy ? 'Low' : 'High';
diseaseRiskElements[1].className = `text-3xl font-bold ${isHealthy ? 'text-green-600' : 'text-red-600'}`;
}
const recommendations = resultsSection.querySelector('ul');
if (recommendations) {
recommendations.innerHTML = `<li class="flex items-start"><span class="text-green-500 mr-2">✓</span> <span>Prediction: ${prediction}</span></li><li class="flex items-start"><span class="text-green-500 mr-2">✓</span> <span>Confidence: ${confidence}%</span></li><li class="flex items-start"><span class="text-green-500 mr-2">✓</span> <span>${isHealthy ? 'Plant appears healthy. Continue monitoring.' : 'Disease detected. Please consult with agricultural expert for treatment recommendations.'}</span></li>`;
}
resultsSection.classList.remove('hidden');
resultsSection.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
export { analyzeImage, displayResults, generateQRCode };