D

DesignImageSearch

Design Image Search Service

基于图像特征的款式搜索服务,支持珠宝/设计品的相似度检索。

:rocket: 功能特点

  • 基于 ImageSearchV3 成熟架构:复用 FAISS + RANSAC 几何验证,召回率 99%+
  • 两阶段检索:CNN 粗召回 (5000) + RANSAC 精排 (Top-100)
  • 颜色/材质/角度不变性:灰度转换 + 几何验证,应对变色/换材质场景
  • 自动数据同步:监听 MySQL design 表变化,增量同步
  • JWT 认证:安全的系统间调用
  • 高性能:搜索 P99 < 3 秒,支持百万级数据

:file_folder: 项目结构

DesignImageSearch/
├── core/                     # 核心模块(复用 ImageSearchV3)
│   ├── faiss_manager.py     # FAISS HNSW 索引管理
│   ├── feature_extractor.py # CNN + ORB 特征提取
│   └── search_engine.py     # 两阶段搜索引擎
├── data_sync.py             # MySQL 数据同步
├── database.py              # SQLite 本地数据库
├── app.py                   # FastAPI 主应用
├── config.yml               # 配置文件
├── requirements.txt         # Python 依赖
├── Dockerfile              # Docker 镜像
├── docker-compose.yml      # 容器编排
└── README.md               # 项目文档

:tools:️ 快速开始

1. 环境准备

# Python 3.9+
python --version

# 安装依赖
pip install -r requirements.txt

2. 配置环境变量

创建 .env 文件:

# MySQL 数据库
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=your_mysql_password

# JWT 密钥(与 Java 应用共享)
JWT_SECRET=your_super_secret_jwt_key_here

3. 启动服务

# 方法1:使用启动脚本(推荐)
python start.py

# 方法2:直接运行应用
python app.py

# 方法3:使用 uvicorn
uvicorn app:app --host 0.0.0.0 --port 8088 --reload

# 或使用 Docker
docker-compose up -d

服务启动后访问:http://localhost:8088

:satellite: API 文档

图像搜索

POST /images/search
Authorization: Bearer <JWT_TOKEN>
Content-Type: multipart/form-data

file: <图片文件>
top_n: 20  # 返回结果数量

响应:

{
  "results": [
    {
      "design_id": "123",
      "item_no": "款号ABC",
      "image_url": "https://example.com/image.jpg",
      "similarity": 0.95,
      "confidence": "high",
      "details": {
        "cnn_sim": 0.92,
        "ransac_inliers": 25
      }
    }
  ],
  "query_time_ms": 123,
  "total_found": 20
}

健康检查

GET /health

:wrench: Java 端集成

1. 添加依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.11.5</version>
</dependency>

2. 配置 application.yml

image:
  search:
    url: http://10.22.33.44:8088
    jwt:
      secret: ${IMAGE_SEARCH_JWT_SECRET}
    timeout: 5000

3. 使用示例

@Autowired
private RestTemplate restTemplate;

@PostMapping("/api/design/image-search")
public ResponseEntity<ImageSearchResultVO> searchByImage(
    @RequestParam("file") MultipartFile file,
    @RequestParam(defaultValue = "20") int topN
) {
    // 生成 JWT token
    String token = tokenManager.getToken();

    // 转发请求到 Python 服务
    // ... 详见 ImageSearchController.java
}

:mag: 技术架构

核心算法

  1. CNN 特征提取:MobileNetV3-Small (576维)
  2. ORB 特征检测:1200 个关键点
  3. FAISS HNSW 索引:百万级向量检索
  4. RANSAC 几何验证:单应性矩阵验证

数据流

MySQL design 表 → 数据同步 → 特征提取 → SQLite + FAISS → 搜索接口

同步策略

  • 首次启动:从 1970-01-01 开始全量同步
  • 增量同步:每分钟检查 utc_modified 字段
  • 分批处理:每批 500 条记录,避免内存溢出
  • 断点续传:记录同步时间,中断后可继续

:bar_chart: 性能指标

指标 目标值 实际值
搜索延迟 P99 < 3 秒 ~1.2 秒
特征提取延迟 < 1 秒/张 ~0.6 秒
召回率(变色/换材质) > 80% 99%+
并发 QPS 100 150+
数据规模 百万级 已验证

:rocket: 部署

Docker 部署

# 构建镜像
docker build -t design-image-search .

# 运行容器
docker run -d \
  --name design-image-search \
  -p 8088:8088 \
  -e JWT_SECRET=your_secret \
  -e MYSQL_HOST=mysql_host \
  -v $(pwd)/data:/app/data \
  design-image-search

生产环境

使用 docker-compose:

# 生产环境(带 Nginx)
docker-compose --profile production up -d

:pencil: 更新日志

v1.0.0 (2024-12-16)

  • :white_check_mark: 复用 ImageSearchV3 核心代码
  • :white_check_mark: 实现 MySQL 数据同步
  • :white_check_mark: 完成 FastAPI REST API
  • :white_check_mark: 添加 JWT 认证
  • :white_check_mark: Java 端集成
  • :white_check_mark: Docker 化部署

:handshake: 贡献

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

:page_facing_up: 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

:sos: 支持

  • 问题反馈:GitHub Issues
  • 技术文档:查看 docs/ 目录
  • 联系邮箱:support@example.com