# image-recog **Repository Path**: chantung/image-recog ## Basic Information - **Project Name**: image-recog - **Description**: k8s课程案例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目概述 基于 Kubernetes 的图片识别 Web 应用,包含三个微服务: - **api-gateway** (80端口): React + TypeScript 前端 + Nginx 反向代理 - **auth-service** (3000端口): Python FastAPI JWT 认证服务 - **ai-inference** (8080端口): Python FastAPI + ONNX ResNet50 推理服务 **技术栈**: - 前端: React 18, TypeScript, Vite, ECharts, Ant Design - 后端: Python 3.13, FastAPI - AI: ONNX Runtime (支持 GPU/CPU 自动切换), ResNet50 (ImageNet 预训练) - 认证: JWT (HS256), 24小时有效期 - 部署: Docker, Kubernetes 详见 [`specs/tech-stack.md`](specs/tech-stack.md) 和 [`specs/mission.md`](specs/mission.md)。 --- ## 功能演示 ### 1. 登录功能 **演示步骤**: 1. 访问应用 URL 2. 输入用户名 `admin` 和密码 `Admin@123` 3. 点击登录按钮 4. 系统返回 JWT Token,自动跳转到工作台 **关键指标**: - 登录响应时间: ~0.05秒 - Token 有效期: 24小时 - 密码加密: bcrypt 哈希 **API示例**: ```bash curl -X POST http://localhost:8000/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"Admin@123"}' # 响应 { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expires_in": 86400 } ``` ### 2. 图片推理功能 **演示步骤**: 1. 在工作台页面拖拽或点击上传图片 2. 系统显示图片预览 3. 自动调用推理接口(带 Token 认证) 4. 显示 Top-3 预测结果 5. ECharts 柱状图 + 进度条可视化 **关键指标**: - 推理处理时间: ~110ms - 推理响应时间: ~0.15秒(含网络) - 支持图片格式: JPG/PNG/WebP - 文件大小限制: 10MB **推理结果示例**: ```json { "username": "admin", "filename": "test_image.jpg", "model_type": "classification", "predictions": [ {"label": "无轨电车", "probability": 0.89, "class_index": 874}, {"label": "迷你巴士", "probability": 0.08, "class_index": 654}, {"label": "客车,教练车", "probability": 0.02, "class_index": 705} ], "processing_time_ms": 110 } ``` ### 3. 安全特性 **安全机制**: - JWT Token 认证(HS256 算法) - 密码 bcrypt 哈希存储 - 文件类型验证 - CORS 跨域配置 - Nginx 安全头部(X-Frame-Options等) **测试结果**: - ✓ SQL 注入攻击被阻止 - ✓ XSS 攻击被过滤 - ✓ 弱密码被拒绝 - ✓ 过期 Token 被拒绝 - ✓ 恶意文件类型被拒绝 --- ## ai-inference 镜像 ### 1. 镜像信息 - **镜像名称**: `ai-inference:v1` - **基础镜像**: `python:3.13-slim` - **服务端口**: `8080` - **健康检查**: `/health/live` (存活探针), `/health/ready` (就绪探针) ### 2. 环境变量 | 环境变量 | 说明 | 默认值 | 必需 | |---------|------|--------|------| | `JWT_SECRET` | JWT 验证密钥 | 从 `/conf/model.properties` 读取 | 建议配置 | | `MODEL_PATH` | ONNX 模型路径 | `/models/model.onnx` | 可选 | | `LABELS_PATH` | 类别标签路径 | `/models/labels.txt` | 可选 | ### 3. 配置文件 服务通过 `/conf/model.properties` 读取配置: ```properties # 模型配置 model.type=classification model.path=/models/model.onnx labels.path=/models/labels.txt # JWT 配置 jwt.secret=my-jwt-secret-key jwt.algorithm=HS256 ``` --- ## auth-service 镜像使用文档 ### 1. 镜像信息 - **镜像名称**: `auth-service:v1` - **基础镜像**: `python:3.13-slim` - **服务端口**: `3000` - **健康检查**: `/health` ### 2. 环境变量 | 环境变量 | 说明 | 默认值 | 必需 | |---------|------|--------|------| | `JWT_SECRET` | JWT 签名密钥 | `default-secret-key-for-development` | 建议配置 | **注意**: 生产环境必须设置自定义的 `JWT_SECRET`,不应使用默认值。 ### 3. 预置用户 - 用户名: `admin` - 密码: `Admin@123` - Token 有效期: 24 小时 --- ## api-gateway 镜像使用文档 ### 1. 镜像信息 - **镜像名称**: `api-gateway:v1` - **基础镜像**: `nginx:alpine` (多阶段构建) - **服务端口**: `8000` - **构建方式**: 多阶段构建(第一阶段构建 React,第二阶段复制到 Nginx) ### 2. 环境变量 | 环境变量 | 说明 | 默认值 | 必需 | |---------|------|--------|------| | `AUTH_SERVICE_URL` | 认证服务地址 | `auth-service:3000` | 建议配置 | | `INFERENCE_SERVICE_URL` | 推理服务地址 | `ai-inference:8080` | 建议配置 | **注意**: 这些环境变量通过 `entrypoint.sh` 在容器启动时注入到 Nginx 配置。