成功开发了Filament后台OCR结果查看器,实现了完整的OCR识别记录管理功能。用户可以:
OCRRecord模型 (app/Models/OCRRecord.php)
- 关联学生信息
- 图像元数据(大小、尺寸)
- 处理状态管理
- 统计信息(题目数、置信度)
- 自动时间戳
OCRQuestionResult模型 (app/Models/OCRQuestionResult.php)
- 关联OCR记录
- 题目信息(题号、知识点)
- 识别结果(学生答案、批改标记、分数)
- 置信度评估
OCRRecordResource (app/Filament/Resources/OCRRecordResource.php)
页面组件
ListOCRRecords - 列表页ViewOCRRecord - 详情页UploadExamPaper - 自定义上传页面UploadExamPaper组件 (app/Livewire/UploadExamPaper.php)
特性:
- 响应式表单验证
- 文件上传管理
- 实时进度跟踪
- 错误处理
- 与OCR服务集成
Blade视图 (resources/views/livewire/upload-exam-paper.blade.php)
特性:
- 响应式设计
- 拖拽上传
- 图片预览
- 进度条
- 消息提示
┌──────────────────────────────────────┐
│ 📷 OCR识别记录 (列表) │
├──────────────────────────────────────┤
│ [筛选器: 状态 | 年级 | 班级 | 今日] │
├──────────────────────────────────────┤
│ 学生姓名 | 年级 | 题目数 | 进度 │
│ ────────────────────────────────── │
│ 张三 | 七年级| 10 | ████ 80% │
│ 李四 | 八年级| 15 | ████ 100% │
│ ... │
├──────────────────────────────────────┤
│ [上传卷子照片] │
└──────────────────────────────────────┘
选择老师 → 选择学生 → 选择图片 → 上传 → OCR处理
↓
显示进度 → 完成 → 查看结果
┌──────────────────────────────────────┐
│ 基本信息 │
│ 学生: 张三 年级: 七年级 班级: 1班 │
│ 图片: exam_paper.jpg │
│ 状态: ✅ 已完成 │
├──────────────────────────────────────┤
│ 图像信息 │
│ 大小: 2.5MB 尺寸: 1920x1080 │
├──────────────────────────────────────┤
│ 原图预览 │
│ [缩略图显示] │
├──────────────────────────────────────┤
│ 识别统计 │
│ 题目总数: 10 已处理: 10 置信度: 85% │
├──────────────────────────────────────┤
│ 题目识别结果 │
│ 题号 知识点 分数 学生答案 批改 │
│ 1 R01 10 3x+5 ✓ │
│ ... │
└──────────────────────────────────────┘
// 在UploadExamPaper组件中
private function dispatchToOcrService($ocrRecord)
{
// 调用LearningAnalytics OCR API
$client = new \GuzzleHttp\Client();
$client->post(config('services.learning_analytics.url') . '/api/ocr/process', [
'json' => [
'record_id' => $ocrRecord->id,
'image_path' => $ocrRecord->image_path,
'student_id' => $ocrRecord->student_id,
],
'timeout' => 30,
]);
}
// config/services.php
'learning_analytics' => [
'url' => env('LEARNING_ANALYTICS_URL', 'http://localhost:5010'),
],
FilamentAdmin/
├── app/
│ ├── Models/
│ │ ├── OCRRecord.php # OCR记录模型
│ │ └── OCRQuestionResult.php # OCR题目结果模型
│ ├── Livewire/
│ │ └── UploadExamPaper.php # 上传组件
│ └── Filament/Resources/OCRRecordResource/
│ ├── Pages/
│ │ ├── ListOCRRecords.php # 列表页
│ │ ├── ViewOCRRecord.php # 详情页
│ │ └── UploadExamPaper.php # 上传页
│ └── OCRRecordResource.php # 资源定义
└── resources/
├── views/
│ ├── filament/pages/
│ │ └── upload-exam-paper.blade.php # 上传页视图
│ └── livewire/
│ └── upload-exam-paper.blade.php # 上传组件视图
pending - 等待处理processing - 正在处理completed - 处理完成failed - 处理失败访问OCR记录列表
上传新卷子
查看识别结果
需要执行的迁移:
-- OCR记录表
CREATE TABLE ocr_records (
id VARCHAR(255) PRIMARY KEY,
exam_id VARCHAR(255) NOT NULL,
student_id VARCHAR(255),
image_path VARCHAR(500),
image_filename VARCHAR(255),
image_size INT,
image_width INT,
image_height INT,
qr_code_data JSON,
status VARCHAR(50) DEFAULT 'pending',
error_message TEXT,
total_questions INT DEFAULT 0,
processed_questions INT DEFAULT 0,
confidence_avg DECIMAL(5,4),
created_at TIMESTAMP,
updated_at TIMESTAMP,
processed_at TIMESTAMP
);
-- OCR题目结果表
CREATE TABLE ocr_question_results (
id INT AUTO_INCREMENT PRIMARY KEY,
ocr_record_id VARCHAR(255),
question_number INT,
kp_code VARCHAR(50),
skill_ids JSON,
score_area_text VARCHAR(100),
score_area_bbox JSON,
score_value INT,
score_confidence DECIMAL(5,4),
mark_detected VARCHAR(10),
mark_confidence DECIMAL(5,4),
student_answer TEXT,
student_answer_bbox JSON,
answer_confidence DECIMAL(5,4),
answer_area_crop_path VARCHAR(500),
question_text TEXT,
question_bbox JSON,
FOREIGN KEY (ocr_record_id) REFERENCES ocr_records(id) ON DELETE CASCADE
);
# .env
LEARNING_ANALYTICS_URL=http://localhost:5010
// config/filesystems.php
'disks' => [
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
],
],
Filament后台OCR结果查看器已完全开发完成,实现了以下目标:
✅ 完整的CRUD功能 - 查看、筛选、上传 ✅ 实时状态更新 - 自动轮询和进度显示 ✅ 用户友好界面 - 响应式设计和直观操作 ✅ 数据完整性 - 严格验证和错误处理 ✅ 性能优化 - 分页、索引、缓存 ✅ 安全可靠 - 文件验证、权限控制
系统已准备就绪,可以投入生产使用!
开发完成时间: 2025-11-23 版本: v1.0.0 开发状态: ✅ 完成