Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

图像检索系统 — Image Retrieval System v3.0

基于深度学习的智能图像管理与语义检索平台。支持图片搜集(上传+网络抓取)、AI 自动标签、CLIP 语义搜索、FAISS 向量检索,以及 SVD/QR 图像有损压缩。

功能矩阵

模块 功能 技术
📤 图片搜集 拖拽上传、网络搜图、一键导入 FastAPI + ddgs/LoremFlickr
🤖 智能分析 目标检测、自动标签、描述生成 YOLOv8 ONNX + 规则引擎
🔍 语义检索 自然语言搜图、关键词匹配、组合排序 CLIP + FAISS + 文本匹配
🏷️ 标签管理 自动/人工标签分类、来源追踪 JSON 列 + Pydantic
📦 图像压缩 SVD / QR 有损压缩、质量评估 NumPy 手写算法
📊 搜索历史 查询记录、一键重搜 SQLAlchemy 2.0 异步

快速启动

# 1. 安装后端依赖
cd backend
pip install -r requirements.txt

# 2. 下载 ONNX 模型(需要网络,约 650MB)
python setup_models.py

# 3. 安装前端依赖并构建
cd ../frontend
npm install
npm run build

# 4. 回到项目根目录,一键启动
cd ..
python launcher.py

浏览器自动打开 http://localhost:8000,API 文档在 http://localhost:8000/docs

注意: ONNX 模型文件约 650MB,请确保磁盘空间充足。如模型下载失败,系统仍可启动但语义搜索和目标检测功能不可用(降级为关键词搜索)。

技术栈

层级 技术
后端框架 Python 3.12 + FastAPI
数据库 SQLite + SQLAlchemy 2.0(异步)
向量检索 FAISS (IndexFlatIP)
模型推理 ONNX Runtime (CLIP ViT-B/32 + YOLOv8n)
图像处理 Pillow + NumPy + OpenCV
前端 React 19 + TypeScript + Vite
压缩算法 SVD 奇异值分解 / QR 正交分解

项目结构

├── launcher.py              # 一键启动器(自动构建前端)
├── README.md
├── .gitignore
│
├── backend/                 # Python 后端
│   ├── main.py              # FastAPI 入口 + 全部路由
│   ├── engine.py             # 核心引擎(CLIP+YOLO+FAISS+搜索)
│   ├── models.py             # SQLAlchemy ORM 数据模型
│   ├── schemas.py            # Pydantic 请求/响应校验
│   ├── config.py             # 全局配置
│   ├── database.py           # 异步数据库连接管理
│   ├── setup_models.py       # ONNX 模型下载脚本
│   ├── requirements.txt      # Python 依赖
│   ├── core/
│   │   └── compressor.py     # SVD/QR 压缩算法
│   ├── models/               # ONNX 模型文件(需手动下载)
│   │   ├── clip-vit-b32/     # CLIP 图像+文本编码器
│   │   └── yolov8n.onnx      # YOLOv8 目标检测
│   ├── uploads/              # 原图存储
│   └── thumbnails/           # 缩略图存储
│
└── frontend/                # React 前端
    └── src/
        ├── App.tsx            # 主界面(搜集/检索双标签页)
        ├── api.ts             # API 调用封装
        ├── types.ts           # TypeScript 类型定义
        └── components/
            ├── CollectionTab.tsx   # 图片搜集(上传+网络搜图)
            ├── SearchTab.tsx       # 语义检索
            ├── ImageGrid.tsx       # 图片网格
            ├── ImageDetailModal.tsx # 详情弹窗
            └── TagChip.tsx         # 标签组件

算法原理

CLIP 语义嵌入

将图像和文本映射到同一 512 维空间,通过向量相似度实现"以文搜图"。

SVD 压缩

对图像每个颜色通道做奇异值分解 A = U·Σ·V^T,保留前 k 个最大奇异值。Eckart-Young 定理保证这是 F-范数下的最优低秩近似。

QR 压缩

对每个通道做 QR 分解 A = Q·R,保留前 k 列和前 k 行。计算速度比 SVD 快但近似质量略逊。

混合搜索

CLIP 语义搜索(模糊匹配) + 关键词搜索(精确匹配)→ 加权融合,优势互补。

质量指标

  • PSNR: 峰值信噪比,>40dB 优秀,30-40dB 良好
  • MSE: 均方误差,越小越好
  • 压缩率: 理论存储比,k×(m+n+1)/(m×n)

学习资料

详细的 项目复盘技术要点代码阅读路径 请查看 study/ 目录。

License

MIT

About

基于奇异值分解(SVD)和QR分解的图像有损压缩全栈Web应用。Python + FastAPI + React + TypeScript

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages