1. 【工具类】开源照片管理工具photoprism

实现对照片的管理,包括照片的导入、去重、分类、备份、人脸识别、时间轴、地图、相册等功能

1.1. 安装

此文档是对 https://docs.photoprism.app/getting-started/docker-compose/ 的翻译

wget https://dl.photoprism.app/docker/docker-compose.yml
# 修改 docker-compose.yml 文件,具体参考下面内容
sudo docker compose up -d
  • 下载 docker-compose.yml 文件,编辑 docker-compose.yml 文件
  • 执行 sudo docker compose up -d 命令
    • 如果需要实时查看日志,可以去掉 -d 前端启动,-d 启动的日志可以在网页端查看, 日志的时间是 utc 时间
  • 首次执行,需要等待一段时间,直到 docker 镜像下载完成[mariadb 大概 400M 左右, photoprism 800M 左右]
docker-compose.yml 文件内容需修改:
  mariadb 数据库,无需修改
  watchtower 自动更新镜像,可以删除
  photoprism 主要配置
    environment
      PHOTOPRISM_AUTH_MODE 认证模式,默认是 password,可以是 public,不需要用户名密码登录
      PHOTOPRISM_ADMIN_USER 用户名
      PHOTOPRISM_ADMIN_PASSWORD 密码
      PHOTOPRISM_SITE_URL 访问地址
      volumes
        "/home/photos:/photoprism/originals" # 这个是最重要的,图片数据会放在这里管理
        "/home/sd/photos:/photoprism/import"     # 要导入的目录(含子目录),点击 资料库-导入-导入 按钮进行导入
        "./storage:/photoprism/storage"   # 数据库、缓存、缩略图等相关文件都会存储在这里,最好放在固态盘中
    devices  # 挂载设备,比如 Intel Q>SV 和 Nvidia CUDA 等
      "/dev/dri:/dev/dri"                         # Intel QSV
      "/dev/nvidia0:/dev/nvidia0"                 # Nvidia CUDA
  • 执行下边命令的时候,photoprism 需要是启动状态
    • docker compose stop 停止服务
    • docker compose exec photoprism photoprism passwd [username] 命令行修改密码,也可以在界面或者 docker-compose.yml 中修改密码
    • docker compose exec photoprism photoprism reset 重头开始,删除所有缓存机索引数据,只会删除数据库,不会删除照片
  • docker-compose.yml 配置
    • https://docs.photoprism.app/getting-started/config-options/#indexing
    • 比如内存不足,可以修改 PHOTOPRISM_WORKERS 数量,默认是 4
    • 如果不需要人脸识别等功能,可以禁用 PHOTOPRISM_DISABLE_TENSORFLOW 选项,默认是 false
  • 问题列表 https://docs.photoprism.app/getting-started/troubleshooting/
  • 低配设备,比如 nas 可以关闭部分功能
    • PHOTOPRISM_DISABLE_TENSORFLOW: “true”,其他依赖 tensorflow 的都会失效,比如人脸识别,特征提取
      • PHOTOPRISM_DISABLE_FACES
      • PHOTOPRISM_DISABLE_CLASSIFICATION
      • PHOTOPRISM_DETECT_NSFW
      • PHOTOPRISM_UPLOAD_NSFW
    • PHOTOPRISM_DISABLE_TLS: “true”
    • PHOTOPRISM_DISABLE_WEBDAV: “true”
  • GPU转码功能 https://docs.photoprism.app/getting-started/advanced/transcoding/

1.2. 管理照片方式

有下边二种管理方式,可以混合使用。一种需修改原始目录,一种保存原始目录结构

1.2.1. 直接管理原始照片目录

  1. photoprism 在 docker-compose.yml 的 volumes 中,会将照片放在 /photoprism/originals 目录管理
  2. 只需要将照片拷贝到 /photoprism/originals 对应的映射目录下即可
  3. 点击 资料库-索引-开始 按钮,就会自动扫描 /photoprism/originals 目标目录
  4. 重复的文件
volumes
  "/home/photos:/photoprism/originals" # 这个是最重要的,图片数据会放在这里管理

1.2.2. 导入照片

  1. 点击 资料库-导入-上传 按钮,上传指定文件夹或多张照片到目标目录中(只能是单层目录或一个目录下的多个文件)
  2. 点击 资料库-导入-导入 按钮,会上传 docker-compose.yml 的 volumes 中的 /photoprism/import 目录(含子目录)
  3. 照片会被重命名,并且按照月份分类

1.2.3. 照片去重

资料库-导入-上传 时,会根据 SHA1 和 size 判断是否是重复文件,如果重复,则不会导入

资料库-导入-导入,如果除了文件名,其他属性都相同,则会被认为是重复文件,直接删除
如果发现修改时间不同,SHA 和 size 都一样,也不会删除,不清楚这个算不算bug???

1.2.4. 删除照片

搜索里的图片,只有归档后,才能删除。
点击右下角的 + 号,可以归档。
归档后,图片会从搜索中消失,但是不会删除,需要在归档里点击删除按钮,才会真正删除

1.3. 界面功能

1.3.1. 搜索

搜索默认显示全部,可以通过下拉框选择条件:年、月、国家等

  • 黑白: 只显示黑白照片
  • 全景: 显示全景照片
  • 动画: 显示动画照片
  • 堆: 显示堆叠照片,什么事堆叠照片,待研究
  • 扫描: 显示扫描照片
  • 审查: 需要用户手动审批才能被搜索,一般低分辨率、低质量图片,需要用户手动审核,切换右上角查看模式,可以调出审批模式
  • 归档: 唯一可以删除照片的地方,任何照片选中后,点击右下角的 + 号,都可以归档

1.3.2. 相册

  • 点击右上角的+号,可以添加相册
  • 选中相册后,右下角的 + 号,可以编辑相册名称、位置、描述、分类等
  • 选中照片后,右下角的 + 号,可以加入已有相册,或者创建新相册

1.3.3. 视频

  • 显示视频的地方,所有的视频都会显示
  • 也可以过滤和赛选
  • 现场照片:???显示现场照片的视频,待确认

1.3.4. 人物

  • 自动识别人脸,堆人脸进行规律,进一步人脸合并等功能待研究

1.3.5. 收藏、瞬间、日历、地点、标签、文件夹

  • 收藏: 收藏功能,可以收藏照片和视频,选中视频或照片后,点击右下角的 + 号,可以收藏
  • 瞬间: 瞬间照片,什么是瞬间照片,待研究
  • 日历: 按照月展示,点击可以按照日查看
  • 地点: 根据照片和视频的地点分类,细化到省市级别,会访问外网
  • 标签: 按照类型分类,自动加标签(应该可以添加),也可以手动给照片加标签
  • 文件夹: 按照文件夹显示
  • 私有: 标记为私有的照片,在搜索中不会显示,只在隐私标签可以查看,也可以取消隐私

1.3.6. 资料库

  • 索引
    • 开始:扫描原始目录,相关内容入库
  • 导入
    • 上传:上传照片到新系统,按照月份重命名和分类
    • 导入:导入配置中的照片,按照原始目录结构分类
  • 日志

1.3.7. 设置

  • general(一般) 可以切换语言
  • 资料库: 导入创建索引的一些配置
  • 高级: 一些使能开关,备份,阈值,重启等
  • 服务:一些服务配置 (配置后可以通过 windows 的资源管理器、apple 的 finder 访问)
  • 账户:账号密码等信息,可以修改

1.4. 数据库和缓存

1.4.1. 数据库

https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql

  • 正式使用,建议使用 MariaDB 10.5.12+,如果只是少量的照片,sqllite 也可以

  • 如果是学习研究,sqllite 就够了.后边也可以从 sqlite 无损迁移到 MariaDB

  • docker-compose.yml 中去掉 photoprism 的 depends_on 节点,干掉 mariadb 节点, 就会默认使用 sqllite 啦

  • 如果由 mariadb 切换到 sqllite,需要通过 sudo docker compose up --remove-orphans 命令,启动服务

  • 如果使用默认的 Mariadb,即使删除了 database 文件,再次重启也会进行 migrate,具体备份在哪里,待研究

1.4.2. 缓存文件

  • cache 缓存信息
    • thumbnails 照片多的情况下, 目录会比较大,生成索引的时候,会生成相关缩略图及缓存新信息
    • sidecar 属性扩展文件,在设置中可以开启和关闭,默认开启,包括视频的缩略图
    • json 记录了照片的属性信息
  • config
    • settings.yml 配置文件
.
├── backup
│   ├── albums
│   └── serial
├── cache
│   ├── cmd
│   ├── json 
│   │   ├── 0
│   │   │   └── a
│   │   │       └── f
│   │   │           └── 0afedf62c8d8233d60822d748542cbdefd453cff_exiftool.json
│   │   ├── 8
│   │   │   └── a
│   │   │       └── e
│   │   │           └── 8ae88c037e983de159a50587fa4324eb5720f87f_exiftool.json
│   │   └── c
│   │       ├── 4
│   │       │   └── 8
│   │       │       └── c486e85ce69306f594bf25abd7b66e6efaa7d1de_exiftool.json
│   ├── media
│   └── thumbnails 缩略图,会生成10张不同尺寸的图片,包含人脸图等
│       ├── 0
│       │   └── a
│       │       └── f
│       │           ├── 0afedf62c8d8233d60822d748542cbdefd453cff_100x100_center.jpg
│       │           ├── ...
│       │           └── 0afedf62c8d8233d60822d748542cbdefd453cff_720x720_fit.jpg
│       └── c
│           ├── 4
│           │   └── 8
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_100x100_center.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_1280x1024_fit.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_0641ca03f054.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_07914803c050.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_0ba1b703904d.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_1061de02b03a.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_1501db027034.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_2f81b605206d.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_160x160_crop_332180072099.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_1920x1200_fit.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_224x224_center.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_224x224_left.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_224x224_right.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_3x3_resize.png
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_500x500_center.jpg
│           │       ├── c486e85ce69306f594bf25abd7b66e6efaa7d1de_50x50_center.jpg
│           │       └── c486e85ce69306f594bf25abd7b66e6efaa7d1de_720x720_fit.jpg
│           └── 7
│               └── d
│                   ├── c7dc28aa32f459baaae111bd567b4c1abf4c908c_100x100_center.jpg
│                   ├── ...
│                   └── c7dc28aa32f459baaae111bd567b4c1abf4c908c_720x720_fit.jpg
├── config
│   ├── certificates
│   ├── hub.yml
│   └── settings.yml    # 配置文件
├── serial
├── sidecar
│   ├── 2013
│   │   └── 06
│   │       ├── 20130622_034337_B2362DCE.mp4.jpg
│   │       └── 20130622_034337_B2362DCE.yml
│   ├── 2023
│   │   └── 12
│   │       └── 20231215_062124_5E2A45F3.yml
│   └── 2024
│       └── 05
│           └── 20240529_115107_74E689F9.yml
└── users
    └── usf2ipjwmfqocrpm
        └── upload

1.5. 远程访问支持

1.5.1. WebDAV

可以通过 webDAV 客户端,访问 photoprism 管理的文件
可以通过 PHOTOPRISM_DISABLE_WEBDAV: “true” 关闭 webdav 访问

1.5.2. SAMBA

不支持

1.5.3. NFS

不支持

1.6. 简介

此文档是对 https://docs.photoprism.app/getting-started/ 的翻译

1.6.1. 系统要求

  • 双核,3GB RAM,64位操作系统
  • 至少 4GB 的交互分区,为了处理大文件(内存足够大,可以忽略)
  • SSD 存储会更好,尤其是数据库和缓存文件。当然普通硬盘也可以

1.6.2. 数据库

支持 sqllite 和 MariaDB 10.5.12+, 不建议使用 sqllite(性能原因)。默认支持了 MariaDB 如果你删除了 MariaDB, 会默认使用 sqllite

1.6.3. 浏览器

支持 Chrome, Firefox, Safari 和 Edge 等现代浏览器
但是解码能力取决于您的浏览器,比如 AAC 在 Firefox 和 Opera 部分支持

1.6.4. 地图和位置服务

需要访问总部的服务器 https://www.maptiler.com/contacts/ ,在zg估计别想了。可以需修改源码,替换成国内地图服务

1.7. feature

下边是 https://www.photoprism.app/features 翻译

1.7.1. 使命

  • 我们的使命是提供最用户和隐私友好的解决方案,以保持您的图片组织和访问。

1.7.2. 随处可用

  • 无论是在手机、平板电脑还是台式电脑上,都可以使用我们的 app应用程序来浏览你的照片集。
  • 它提供了一种类似于本地应用程序的体验,你可以方便地将它安装在所有主要操作系统和移动设备的主屏幕上。
  • 我们推荐使用 Docker 部署服务。它适用于 Mac、 Linux 和 Windows。PhotoPrism 也运行在 DigitalOcean、 Raspberry Pi、 FreeBSD 和许多 NAS 设备上。

1.7.3. 强大搜寻

  • 使用强大的搜索过滤器轻松找到特定的照片和视频。
  • 您的图片将根据其内容和位置自动分类。
  • 还可以搜索更多的图像属性,如颜色、色度和质量。
  • 标记为私有、存档或正在审查的图片不会出现在常规搜索结果中。

1.7.4. 面部识别

  • 我们的最新版本包括面部识别,让您找到您的家人和朋友的照片。
  • 准备好发现遗忘已久的镜头吧!
  • 当你扫描或导入库时会检测到新的面孔。
  • 然后根据相似性对它们进行分组,因此您可以快速地将它们与人匹配。

1.7.5. 地图及地点

  • 该应用程序包括四个高分辨率的世界地图,带你寻找最没得回忆。
  • 在允许的情况下,我们后端服务提供全球位置信息,用诸如州、城市和分类等细节丰富您的图片。
  • 未来的发行版将能够使用公共事件数据自动创建流行音乐节或体育赛事的专辑。

1.7.6. 专辑分享

秘密链接使你很容易与你所爱的人分享相册。
您可以为每个相册创建多个链接,并可选地设置过期日期。
不需要安装额外的应用程序,也不需要注册即可查看分享。

1.7.7. 广义文件格式支持

  • PhotoPrism 支持索引、查看和转换最流行的图像、视频和 RAW 格式,包括 JPEG、 PNG、 GIF、 BMP、 HEIF、 HEIC、 MP4、 MOV、 WebP 和 WebM。
  • 我们的目标是为所有 RAW 图像提供一流的支持,无论相机的制造和型号。
  • 文件类型和扩展名的完整列表可以在我们的知识库中找到。
  • 为了获得最大的浏览器兼容性,可以通过 FFmpeg 将格式转换为 h264

1.7.8. 高级元数据提取

  • 原始媒体和文件扫描 Exif 和 XMP 数据以及专有元数据,包括谷歌照片 JSON。组合信息被规范化并合并。
  • 支持的领域包括标题,描述,日期,位置,相机,镜头,ISO,F 数字,曝光,焦距,主题,艺术家,关键字和版权。

1.7.9. 重复检测

扫描时会跳过相同的文件,相同文件共享唯一标识符、文件名、时间和地点的图像可以自动堆叠。
PS的 sidecar 文件 总是与相关的媒体文件堆叠在一起。

1.7.10. 备份与同步

使用 PhotoSync 在后台安全备份 iOS 和 Android 手机。
WebDAV 客户端,如微软的文件资源管理器和苹果的 Finder,可以直接连接到 PhotoPrism,允许你打开、编辑和删除计算机上的文件,就好像它们是本地的一样。

1.7.11. 100% 的隐私

由于 PhotoPrism 是100% 自筹资金和独立的,我们可以向你保证,我们永远不会出售你的数据,我们将始终对我们的软件和服务是透明的。
你的数据也永远不会与谷歌、亚马逊、 Facebook 或苹果共享,除非你有意将文件上传到他们的服务中。

1.7.12. 展望

我们的项目路线图显示了正在进行的工作以及下一步将实现的功能。
你被邀请像竖大拇指一样给出你的想法,这样我们就知道什么是最受欢迎的。

1.8. 源码分析

  • 概述

    • 从提供的代码库结构可以看出,这是一个涉及照片管理与浏览的软件项目,名为PhotoPrism。
    • 代码库组织架构清晰,包含了前端、后端、配置文件、文档、许可证、构建脚本等关键部分。
    • PhotoPrism 代码库架构清晰,各部分职责明确,便于协作开发与维护。
    • 通过合理的目录结构与文件组织,确保了项目的高内聚低耦合特性,为项目的持续扩展与演进奠定了坚实基础。
  • 根目录

    • .clabot、.dockerignore、.drone.yml 等:这些文件是项目的配置和自动化构建相关文件,用于控制持续集成/持续部署(CI/CD)流程、Docker 忽略规则等。
    • CODE_OF_CONDUCT.md、CONTRIBUTING.md、LICENSE 等:这些文件是项目的元信息文件,定义了社区行为准则、贡献指南、许可证等。
    • Dockerfile、docker-compose.yml 等:Docker 相关文件,用于定义 Docker 镜像和容器编排。
    • README.md:项目的主文档,提供了项目的简介、特性概述、安装指南、支持信息、社区连接等。
    • 前端相关
      • frontend/:前端代码目录,可能包含用于构建用户界面的所有源代码,如 HTML、CSS、JavaScript 等。
    • 后端相关
      • cmd/:可能包含项目的命令行工具或主程序入口。
      • internal/、pkg/:这些目录通常包含项目的核心逻辑和库代码,是后端功能的主要实现部分。
      • storage/:可能用于存放数据持久化相关的代码或资源。
    • 配置与文档
      • .github/:GitHub 相关配置,可能包含工作流、议题模板等。
      • .gitignore:定义 Git 忽略规则的文件。
      • config/:可能包含项目的配置文件模板或默认配置。
      • docs/:文档目录,可能包含项目的详细文档,如用户手册、开发指南等。但在此结构中未直接显示,可能位于其他位置或在线提供。
    • 许可证与声明
      • LICENSE:定义项目许可证的文件,规定了代码的使用、复制、修改等权限。
      • NOTICE、SECURITY.md 等:可能包含项目的通知、安全相关信息或其他重要声明。
    • 构建与脚本
      • Makefile:定义构建规则的文件,用于自动化构建项目。
      • scripts/:脚本目录,可能包含用于构建、测试、部署等任务的脚本文件。

1.9. 参考资料

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐