Skip to content

Yan-ShiBo/photo-selector

Repository files navigation

photo-selector

本地 AI 选片工作台。它面向一次拍摄后的大量照片,先自动筛掉明确废片,再按场景和相似度分组,最后让人通过擂台界面完成最终选择。

所有照片默认在本机处理。本地流程使用 Ollama,不会把照片上传到第三方服务;Ark 相关代码仅作为兼容能力保留。

工作流

photo-selector 当前采用三层分析链路:

  1. 基础工具层:读取 EXIF、清晰度、曝光、信息量、美学评分、人脸质量、闭眼风险和 DINOv2 视觉相似度。
  2. 视觉观察层:qwen3-vl:8b 读取照片和工具结果,输出画面观察、瑕疵、亮点和创作意图判断。
  3. 推理决策层:qwen3:14b 结合视觉观察和工具结果,给出初筛、保留建议和组内排序。

模型负责建议和排序,人负责最终裁决。初筛只移动模型和工具都明确判定的问题照片;有争议的照片会留到擂台里人工比较。系统会把类似的照片分组,一组一组的处理,提升选片效率。在擂台页遇到难以抉择的照片时,Qwen3还可以智能给出要对比的两个照片的区别和更建议选哪个

环境要求

  • Windows
  • NVIDIA GPU + 可用 CUDA 驱动
  • Python 3.10+
  • Ollama 已安装并运行

安装本地模型:

ollama pull qwen3-vl:8b
ollama pull qwen3:14b
ollama list

启动:

.\启动_Windows.bat

启动器会创建或复用 .venv,安装依赖,检查 GPU 运行时,然后打开本地 Flask 页面。

使用方式

  1. 在首页选择照片文件夹。
  2. 等待自动分析完成:基础工具、qwen3-vl 观察、qwen3 推理和相似组聚类会在后台运行。
  3. 在初筛复核页确认或召回 AI 建议放手的照片。
  4. 在擂台页逐组比较照片。
  5. 完成后查看 winners/waste/

擂台交互规则:

  • 鼠标点击照片:放大 / 切换缩放。
  • 键盘 / :选左 / 选右。
  • 底部按钮:选左、选右、都留、都弃、稍后再决、撤销。
  • [ / ]:单独踢掉左图 / 右图。
  • Z:缩放;Shift+Z:撤销。
  • “Qwen3 智能深度对比”会以悬浮面板显示两图差异,不再挤压照片区域。

支持格式

类型 扩展名
常规图片 .jpg .jpeg .png .webp .bmp .tif .tiff
Apple 图片 .heic .heif
RAW .cr2 .cr3 .nef .arw .dng .raf .orf .rw2 .pef

同目录、同文件名 stem 的 JPG/HEIC 与 RAW 会自动配对。系统优先分析可直接显示的 JPG/HEIC,移动结果时会连同配对 RAW 一起进入 winners/waste/

输出目录

处理完成后,照片文件夹内会生成:

照片文件夹/
├── winners/        # 最终保留照片和配对 RAW
├── waste/          # 放手照片和配对 RAW
└── _pic_selecter/  # 缩略图、日志、状态和运行记录

项目结构

photo-selector/
├── app.py              # Flask 路由和页面入口
├── backend/            # 任务流水线、状态、路径和运行时单例
├── pic_selecter/       # 分组、质量分析、视觉模型、LLM 判断和水印
├── static/             # 前端 HTML/CSS/JS
├── scripts/            # Windows 启动器和诊断脚本
├── docs/               # 专题问题、架构、设计和验证文档
├── tests/              # 单元测试和 Flask 集成测试
├── ARCHITECTURE.md     # 架构说明
└── DESIGN.md           # UI 和交互规范

本次“擂台双图对比、左右选择按钮和 Qwen3 hidden thinking”问题已整理到 docs/photo-selection-arena/

models/ 是本机模型缓存,.venv/ 是本地虚拟环境,.pic_selecter_install.json 是启动器安装记录,这些都不需要手动编辑。

开发验证

python -m py_compile app.py backend\pipeline.py backend\runtime.py backend\state.py backend\utils.py pic_selecter\llm_judge.py pic_selecter\grouper.py pic_selecter\quality.py pic_selecter\vision.py scripts\launcher.py
node --check static\app.js
python -m pytest tests -q

常见问题

  • Qwen 输出 <think>:应当由 llm_judge._strip_thinking_text() 清洗;对比接口会拒绝只返回 hidden thinking 的响应。
  • AI 对比很慢:优先确认 Ollama 已启动、qwen3-vl:8bqwen3:14b 已安装,并保持 OLLAMA_KEEP_ALIVE=-1
  • 照片空白:检查 /api/image 是否能返回图像,RAW/HEIC 会通过本地解码或缩略图兜底。
  • Git 不可用:当前本地目录曾出现空 .git/ 目录;若需要版本控制,应重新 git init 或重新克隆。

License

MIT License

About

Local AI photo selection workflow with Ollama/Qwen3, similar-photo grouping, pairwise comparison, RAW/HEIC support, and GPU acceleration.本地 AI 照片筛选工作台:使用 Ollama/Qwen3 做照片初筛、相似分组、双图对比和擂台式选片,支持 RAW/HEIC 与本机 GPU。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors