Filament后台OCR结果查看器是一个基于Filament框架开发的现代化管理后台,用于管理OCR识别记录和卷子照片分析。系统提供了完整的OCR识别流程管理,从上传到分析结果的完整闭环。
✅ OCR记录管理
✅ 智能筛选
✅ 卷子照片上传
✅ 识别结果查看
┌─────────────────────────────────────────┐
│ Filament管理后台 │
│ ┌─────────────────────────────────┐ │
│ │ OCR记录列表页 │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ┌───────────▼───────────┐ │
│ │ 实时轮询(10秒) │ │
│ └───────────┬───────────┘ │
│ │ │
│ ┌───────────▼───────────┐ │
│ │ ViewOCRRecord │ │
│ │ (详情页) │ │
│ └───────────┬───────────┘ │
│ │ │
│ ┌───────────▼───────────┐ │
│ │ UploadExamPaper │ │
│ │ (上传组件) │ │
│ └───────────────────────┘ │
│ │ │
└──────────────┼───────────────────────────┘
│
┌──────────▼──────────┐
│ LearningAnalytics │
│ (OCR服务) │
└──────────────────────┘
# 1. 进入项目目录
cd /Volumes/T9/code/math/apis/FilamentAdmin
# 2. 安装依赖
composer install
npm install
# 3. 复制环境配置文件
cp .env.example .env
# 4. 生成应用密钥
php artisan key:generate
# 5. 配置数据库
# 编辑 .env 文件,设置数据库连接信息
# 6. 运行数据库迁移
php artisan migrate
# 7. 创建软链接
php artisan storage:link
# 8. 构建前端资源
npm run build
# 9. 运行队列处理器(推荐)
php artisan queue:work
在 .env 文件中添加以下配置:
# LearningAnalytics服务地址
LEARNING_ANALYTICS_URL=http://localhost:5010
# 文件上传配置
FILESYSTEM_DISK=public
# 队列配置
QUEUE_CONNECTION=database
# 缓存配置
CACHE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
系统会自动创建以下数据表:
-- OCR记录表
CREATE TABLE ocr_records (
id VARCHAR(255) PRIMARY KEY, -- 记录ID
exam_id VARCHAR(255), -- 考试ID
student_id VARCHAR(255), -- 学生ID
image_path VARCHAR(500), -- 图片路径
image_filename VARCHAR(255), -- 图片文件名
image_size INTEGER, -- 文件大小
image_width INTEGER, -- 图片宽度
image_height INTEGER, -- 图片高度
status VARCHAR(50), -- 处理状态
total_questions INTEGER, -- 题目总数
processed_questions INTEGER, -- 已处理题目数
confidence_avg DECIMAL(5,4), -- 平均置信度
created_at TIMESTAMP, -- 创建时间
updated_at TIMESTAMP, -- 更新时间
processed_at TIMESTAMP -- 处理完成时间
);
-- OCR题目结果表
CREATE TABLE ocr_question_results (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
ocr_record_id VARCHAR(255), -- 关联OCR记录ID
question_number INTEGER, -- 题目编号
kp_code VARCHAR(50), -- 知识点代码
score_value INTEGER, -- 分数
student_answer TEXT, -- 学生答案
mark_detected VARCHAR(10), -- 批改标记
score_confidence DECIMAL(5,4), -- 置信度
created_at TIMESTAMP
);
在浏览器中访问:http://fa.test/admin
使用管理员账号登录后,在侧边栏中找到 "OCR识别记录" 菜单。
系统通过HTTP调用LearningAnalytics服务进行OCR处理:
POST /api/ocr/process
Content-Type: application/json
{
"record_id": "ocr_xxx",
"image_path": "uploads/ocr/xxx.jpg",
"student_id": "student_xxx"
}
响应示例:
{
"success": true,
"record_id": "ocr_xxx",
"status": "processing",
"message": "OCR处理已开始"
}
FilamentAdmin/
├── app/
│ ├── Models/
│ │ ├── OCRRecord.php # OCR记录模型
│ │ └── OCRQuestionResult.php # OCR题目结果模型
│ ├── Services/
│ │ └── OCRService.php # OCR业务逻辑服务
│ ├── Livewire/
│ │ └── UploadExamPaper.php # 上传组件
│ └── Filament/Resources/OCRRecordResource/
│ ├── Pages/
│ │ ├── ListOCRRecords.php
│ │ ├── ViewOCRRecord.php
│ │ └── UploadExamPaper.php
│ └── OCRRecordResource.php
├── database/migrations/
│ ├── 2025_11_23_000001_create_ocr_records_table.php
│ └── 2025_11_23_000002_create_ocr_question_results_table.php
├── config/
│ └── ocr.php # OCR配置
└── resources/
├── views/
│ ├── filament/pages/
│ │ └── upload-exam-paper.blade.php
│ └── livewire/
│ └── upload-exam-paper.blade.php
在 config/ocr.php 中配置:
return [
'learning_analytics' => [
'url' => env('LEARNING_ANALYTICS_URL'),
'timeout' => 30,
],
'upload' => [
'max_size' => 10 * 1024 * 1024, // 10MB
'allowed_types' => ['jpg', 'jpeg', 'png', 'webp'],
'disk' => 'public',
'path' => 'uploads/ocr',
],
'processing' => [
'batch_size' => 10,
'poll_interval' => 10, // 秒
'max_retries' => 3,
],
];
storage/app/public/uploads/ocr/| 状态 | 描述 | 颜色 |
|---|---|---|
| pending | 等待处理 | 灰色 |
| processing | 正在处理 | 蓝色 |
| completed | 处理完成 | 绿色 |
| failed | 处理失败 | 红色 |
| 范围 | 描述 | 颜色 |
|---|---|---|
| >= 80% | 高置信度 | 绿色 |
| 60% - 80% | 中等置信度 | 黄色 |
| < 60% | 低置信度 | 红色 |
上传失败
storage/logs/laravel.logOCR处理失败
图片不显示
php artisan storage:linkchmod -R 755 storage/app/public学生列表为空
# 查看Laravel日志
tail -f storage/logs/laravel.log
# 查看OCR相关日志
grep "OCR" storage/logs/laravel.log
# 查看文件上传日志
grep "upload" storage/logs/laravel.log
# 检查数据库连接
php artisan tinker
> DB::connection()->getPdo();
# 检查队列状态
php artisan queue:monitor
# 清理过期缓存
php artisan cache:prune-stale-tags
本项目为内部使用,禁止外传。
新增功能:
技术特性:
开发完成! 🎉
系统现已准备就绪,可以投入生产使用。如有问题,请查阅故障排除章节或联系开发团队。