'use client' import { SkeletonOCRResult, SkeletonDots } from '@/components/common/SkeletonText' import { ConfidenceHeatmap } from '@/components/ai/ConfidenceHeatmap' import type { OCRResult, MagicSettings } from '../types' interface TabTestProps { ocrResult: OCRResult | null ocrLoading: boolean imagePreview: string | null uploadedImage: File | null settings: MagicSettings showHeatmap: boolean onToggleHeatmap: () => void onFileUpload: (file: File) => void onManualOCR: () => void onClearImage: () => void onSendToTraining: () => void } function getConfidenceColor(confidence: number) { if (confidence >= 0.9) return 'bg-green-500' if (confidence >= 0.7) return 'bg-yellow-500' return 'bg-red-500' } export function TabTest({ ocrResult, ocrLoading, imagePreview, uploadedImage, settings, showHeatmap, onToggleHeatmap, onFileUpload, onManualOCR, onClearImage, onSendToTraining, }: TabTestProps) { return (
{/* OCR Test */}

OCR Test

Teste die Handschrifterkennung mit einem eigenen Bild. Das Ergebnis zeigt den erkannten Text, Konfidenz und Verarbeitungszeit. {settings.livePreview && ( (Live-Vorschau aktiv) )}

{/* Upload Area */} {/* Results Area */}
{/* Confidence Heatmap */} {imagePreview && ocrResult && ocrResult.confidence > 0 && (

Konfidenz-Visualisierung

{showHeatmap && ( ({ text: w.text, confidence: w.confidence, bbox: w.bbox as [number, number, number, number] })) || []} charConfidences={ocrResult.char_confidences || []} showLegend={true} toggleable={true} /> )}
)} {/* Confidence Interpretation */}

Konfidenz-Interpretation

90-100%
Sehr hohe Sicherheit - Text kann direkt uebernommen werden
70-90%
Gute Sicherheit - manuelle Ueberpruefung empfohlen
< 70%
Niedrige Sicherheit - manuelle Eingabe erforderlich
) } /* ------------------------------------------------------------------ */ /* Sub-components */ /* ------------------------------------------------------------------ */ interface UploadAreaProps { imagePreview: string | null uploadedImage: File | null ocrLoading: boolean livePreview: boolean onFileUpload: (file: File) => void onManualOCR: () => void onClearImage: () => void } function UploadArea({ imagePreview, uploadedImage, ocrLoading, livePreview, onFileUpload, onManualOCR, onClearImage }: UploadAreaProps) { return (
document.getElementById('ocr-file-input')?.click()} onDragOver={(e) => { e.preventDefault(); e.currentTarget.classList.add('border-purple-500', 'bg-purple-50') }} onDragLeave={(e) => { e.currentTarget.classList.remove('border-purple-500', 'bg-purple-50') }} onDrop={(e) => { e.preventDefault() e.stopPropagation() e.currentTarget.classList.remove('border-purple-500', 'bg-purple-50') const file = e.dataTransfer.files[0] if (file?.type.startsWith('image/')) onFileUpload(file) }} > {imagePreview ? (
Hochgeladenes Bild
) : ( <>
📄
Bild hierher ziehen oder klicken zum Hochladen
PNG, JPG - Handgeschriebener Text
oder Ctrl+V zum Einfuegen
)}
{ const file = e.target.files?.[0] if (file) onFileUpload(file) }} /> {uploadedImage && !livePreview && ( )}
) } interface ResultsAreaProps { ocrResult: OCRResult | null ocrLoading: boolean onSendToTraining: () => void } function ResultsArea({ ocrResult, ocrLoading, onSendToTraining }: ResultsAreaProps) { if (ocrLoading) return if (!ocrResult) { return (
🔍
Lade ein Bild hoch um die Erkennung zu testen
) } return (

Erkannter Text:

= 0.9 ? 'bg-green-100 text-green-700' : ocrResult.confidence >= 0.7 ? 'bg-yellow-100 text-yellow-700' : 'bg-red-100 text-red-700' }`}> {(ocrResult.confidence * 100).toFixed(0)}% Konfidenz
        {ocrResult.text || '(Kein Text erkannt)'}
      
{/* Confidence bar */}
Konfidenz
{(ocrResult.confidence * 100).toFixed(1)}%
Verarbeitungszeit
{ocrResult.processing_time_ms}ms
Modell
{ocrResult.model || 'TrOCR'}
LoRA Adapter
{ocrResult.has_lora_adapter ? 'Ja' : 'Nein'}
{ocrResult.confidence < 0.9 && (

Die Erkennung koennte verbessert werden! Moechtest du dieses Beispiel zum Training hinzufuegen?

)}
) }