feat(ocr-pipeline): add Step 4 row detection UI in admin frontend

Insert rows step between columns and words in the pipeline wizard.
Shows overlay image, row list with type badges, and ground truth controls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-02-28 01:28:05 +01:00
parent 04b83d5f46
commit b58aecd081
3 changed files with 300 additions and 7 deletions

View File

@@ -6,6 +6,7 @@ import { PipelineStepper } from '@/components/ocr-pipeline/PipelineStepper'
import { StepDeskew } from '@/components/ocr-pipeline/StepDeskew'
import { StepDewarp } from '@/components/ocr-pipeline/StepDewarp'
import { StepColumnDetection } from '@/components/ocr-pipeline/StepColumnDetection'
import { StepRowDetection } from '@/components/ocr-pipeline/StepRowDetection'
import { StepWordRecognition } from '@/components/ocr-pipeline/StepWordRecognition'
import { StepCoordinates } from '@/components/ocr-pipeline/StepCoordinates'
import { StepReconstruction } from '@/components/ocr-pipeline/StepReconstruction'
@@ -142,10 +143,11 @@ export default function OcrPipelinePage() {
1: 'Begradigung',
2: 'Entzerrung',
3: 'Spalten',
4: 'Woerter',
5: 'Koordinaten',
6: 'Rekonstruktion',
7: 'Validierung',
4: 'Zeilen',
5: 'Woerter',
6: 'Koordinaten',
7: 'Rekonstruktion',
8: 'Validierung',
}
const renderStep = () => {
@@ -157,12 +159,14 @@ export default function OcrPipelinePage() {
case 2:
return <StepColumnDetection sessionId={sessionId} onNext={handleNext} />
case 3:
return <StepWordRecognition />
return <StepRowDetection sessionId={sessionId} onNext={handleNext} />
case 4:
return <StepCoordinates />
return <StepWordRecognition />
case 5:
return <StepReconstruction />
return <StepCoordinates />
case 6:
return <StepReconstruction />
case 7:
return <StepGroundTruth />
default:
return null

View File

@@ -28,6 +28,7 @@ export interface SessionInfo {
deskew_result?: DeskewResult
dewarp_result?: DewarpResult
column_result?: ColumnResult
row_result?: RowResult
}
export interface DeskewResult {
@@ -91,10 +92,35 @@ export interface ManualColumnDivider {
export type ColumnTypeKey = PageRegion['type']
export interface RowResult {
rows: RowItem[]
summary: Record<string, number>
total_rows: number
duration_seconds: number
}
export interface RowItem {
index: number
x: number
y: number
width: number
height: number
word_count: number
row_type: 'content' | 'header' | 'footer'
gap_before: number
}
export interface RowGroundTruth {
is_correct: boolean
corrected_rows?: RowItem[]
notes?: string
}
export const PIPELINE_STEPS: PipelineStep[] = [
{ id: 'deskew', name: 'Begradigung', icon: '📐', status: 'pending' },
{ id: 'dewarp', name: 'Entzerrung', icon: '🔧', status: 'pending' },
{ id: 'columns', name: 'Spalten', icon: '📊', status: 'pending' },
{ id: 'rows', name: 'Zeilen', icon: '📏', status: 'pending' },
{ id: 'words', name: 'Woerter', icon: '🔤', status: 'pending' },
{ id: 'coordinates', name: 'Koordinaten', icon: '📍', status: 'pending' },
{ id: 'reconstruction', name: 'Rekonstruktion', icon: '🏗️', status: 'pending' },