You need to sign in or sign up before continuing.
Name Last Update
core Loading commit data...
.dockerignore Loading commit data...
.env Loading commit data...
.env.example Loading commit data...
Dockerfile Loading commit data...
IMPLEMENTATION_SUMMARY.md Loading commit data...
README.md Loading commit data...
README_DOCKER.md Loading commit data...
app.py Loading commit data...
application.yml.example Loading commit data...
config.yml Loading commit data...
data_sync.py Loading commit data...
database.py Loading commit data...
docker-compose.yml Loading commit data...
generate_token.py Loading commit data...
requirements-docker.txt Loading commit data...
requirements.txt Loading commit data...

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