PawanKonwar/ai-image-analysis-v1
GitHub: PawanKonwar/ai-image-analysis-v1
基于AWS和OpenAI Vision的图像分析POC项目,展示了无密钥架构、云原生部署和AI能力集成。
Stars: 0 | Forks: 0
[](https://github.com/PawanKonwar/ai-image-analysis-v1/actions/workflows/deploy.yml)
# AI 图像分析
一款利用 **OpenAI Vision** 和 **AWS** 处理及解析图像的图像分析工具。用户可以上传图像并接收 AI 生成的分析结果,包括物体检测、文本提取 (OCR)、主色调和自然语言描述。结果会被持久化保存,以便审查和历史追踪。
## 架构
| 层级 | 技术 |
|-------|-------------|
| **Frontend** | Next.js on Vercel |
| **API** | API Gateway (REST) |
| **Backend** | Node.js + Express on ECS Fargate |
| **Storage** | Amazon S3 (image uploads) |
| **Database** | Amazon RDS (PostgreSQL) |
| **CI/CD** | GitHub Actions → ECR → ECS |
- **Vercel** 托管 Frontend 并通过 HTTPS 提供服务。
- **API Gateway** 通过公共调用 URL 暴露 Backend API。
- **ECS Fargate** 运行 Backend 容器(无需管理服务器)。
- **S3** 存储上传的图像,并设置 public-read ACL 以供 OpenAI 分析。
- **RDS** 通过 Sequelize 持久化分析元数据(描述、物体、类别)。
## 关键问题解决
- **S3 DeleteObject IAM Policy** — 在 ECS Task Role 上实施了 `s3:DeleteObject` IAM 权限,以便当用户删除历史记录项时,Backend 可以从 S3 中移除相应的对象。如果没有此策略,删除操作将因访问被拒绝而失败。
- **RDS Timestamp "Invalid Date"** — 通过在 Image model 上设置 `timestamps: false` 并按 `id` 而不是 `created_at` 对历史记录进行排序来解决。Frontend 现在可以通过回退显示优雅地处理缺失的日期字段。
## 安全性:无密钥架构
本应用采用 **secretless**(无密钥)设计。代码中或镜像内不存储任何 API key、数据库密码或 AWS凭证。
- **生产环境**:所有密钥(OpenAI API key、`DATABASE_URL`、`CORS_ORIGIN` 等)都存储在 **AWS Systems Manager Parameter Store** 中,并在运行时通过 ECS Task Role 加载。
- **IAM Task Role**:Fargate 任务使用 IAM role 来访问 S3 (PutObject, DeleteObject) 和 Parameter Store (GetParameter) —— 容器中没有 access keys。
- **本地开发**:使用 `.env` 和 `.env.local`(已 gitignored);永远不会提交。
## 技术栈
| 组件 | 技术栈 |
|-----------|-------|
| Frontend | React, Vite, Tailwind CSS |
| Backend | Node.js 20, Express, Sequelize |
| AI | OpenAI GPT-4 Vision |
| AWS | S3, RDS, ECS Fargate, Parameter Store, ECR |
## 本地开发
```
# 复制 environment template
cp .env.example .env
# 添加 OPENAI_API_KEY 和 DATABASE_URL 到 .env
# 使用 Docker Compose 运行
docker compose up --build
```
- **Frontend**: http://localhost:5173
- **Backend API**: http://localhost:3000
## 项目结构
```
├── frontend/ # React + Vite app (deployed to Vercel)
├── backend/ # Express API (Docker → ECR → ECS)
├── infrastructure/ # Terraform (VPC, RDS, ECS, S3)
└── .github/workflows/ # CI/CD (deploy.yml)
```
标签:AI图像分析, Amazon RDS, Amazon S3, API Gateway, AWS, CISA项目, DPI, ECS Fargate, Express, GitHub Actions, GNU通用公共许可证, MITM代理, Node.js, OCR文字提取, OpenAI, OSV, PostgreSQL, Secretless架构, Vercel, 云端应用, 内存规避, 图像处理, 对象检测, 自动笔记, 自定义脚本, 自然语言描述, 计算机视觉, 请求拦截