Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >三分钟搭建PhotoPrism智能照片库AI自动分类告别杂乱相册

三分钟搭建PhotoPrism智能照片库AI自动分类告别杂乱相册

作者头像
YY的秘密代码小屋
发布于 2025-03-15 13:18:06
发布于 2025-03-15 13:18:06
31700
代码可运行
举报
文章被收录于专栏:C++系列C++系列
运行总次数:0
代码可运行

前言

你们是不是也有过这样的尴尬瞬间:拍了成千上万张美照,却在筛选时花大量的时间大海捞针?别担心,今天我要给大家安利一款神器——PhotoPrism!这款由前 Google 工程师 Michael Mayer 打造的开源项目,不仅能帮你自动分类和标记照片,还能让你的照片展示得如同专业画廊一般。不论是普通的 JPEG 还是专业的 RAW 格式,它都能轻松搞定。接下来,就让我们一起用 Docker 快速部署 PhotoPrism,并结合 Cpolar 内网穿透工具,实现随时随地远程管理你的珍贵回忆吧!

bd25a9678ae2307526b481f9a868dfa
bd25a9678ae2307526b481f9a868dfa

1.关于PhotoPrism

  1. 智能照片组织与搜索:PhotoPrism利用AI技术,能自动识别照片中的人物、物体、场景等内容。比如,你想找一张去海边度假的照片,只需输入“海滩”,瞬间就能筛选出所有相关照片!再也不用在无数张照片里大海捞针了。
  2. 全面的文件格式支持:无论是JPG、PNG这些常见格式,还是RAW、Live Photos,甚至是视频文件,PhotoPrism都能一网打尽。这下,不管你拍的是什么照片,它都能帮你管理得井井有条。
  3. 面部识别:内置强大的面部识别功能,不仅能自动识别照片中的人脸,还能让你手动标记人名,方便按人物浏览照片。再也不怕照片里的人认不出了!
  4. 地理信息展示:如果你是个旅行达人,PhotoPrism的地理信息功能绝对会让你爱不释手。它能自动提取照片中的GPS信息,并在高清世界地图上展示出来,带你重温每一次旅行的美好记忆。
  5. WebDAV同步:提供了WebDAV同步功能,让你能与其他设备双向同步照片,轻松实现多设备间的照片管理。再也不用担心手机、电脑上的照片不同步了!

2.本地部署PhotoPrism

本例使用Docker Compose部署,如果没有安装Docker,可以查看这篇教程进行安装:《Docker安装教程——Linux、Windows、MacOS》

打开终端执行下方命令一键安装 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run -d \
  --name photoprism \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=unconfined \
  -p 2342:2342 \
  -e PHOTOPRISM_UPLOAD_NSFW="true" \
  -e PHOTOPRISM_ADMIN_PASSWORD="insecure" \
  -v /photoprism/storage \
  -v ~/Pictures:/photoprism/originals \
  photoprism/photoprism:latest
image-20241216160256930
image-20241216160256930

打开浏览器输入:localhost:2342,就能看到PhotoPrism的登录界面了。

3.PhotoPrism简单使用

第一次使用时需要设置管理员账号和密码。

初始账号是:admin,密码是:insecure,您后期可以在帐户设置页面上更改它。

登录好以后就可以进入到PhotoPrism界面来使用了。

image-20241216160614780
image-20241216160614780

左下角头像设置可以设置为简体中文,使用更方便。

image-20241216161120363
image-20241216161120363

上传照片后PhotoPrism会自行分类

image-20241216162228079
image-20241216162228079

4. 安装内网穿透

不过我们目前只能在本地局域网内使用电脑等设备访问刚刚使用docker部署的使用PhotoPrism。使用PhotoPrism + Cpolar的组合可以完美解决这个问题,安装一个cpolar内网穿透工具就能轻松实现远程访问内网主机中部署的服务了,接下来介绍一下如何安装cpolar内网穿透。

下面是安装cpolar步骤:

Cpolar官网地址: https://www.cpolar.com

使用一键脚本安装命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo curl https://get.cpolar.sh | sh
img
img

安装完成后,执行下方命令查看cpolar服务状态:(如图所示running即为正常启动)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl status cpolar
img
img

Cpolar安装和成功启动服务后,在浏览器上输入ubuntu主机IP加9200端口即:【http://localhost:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

image-20240801133735424
image-20240801133735424

5.配置PhotoPrism公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:PhotoPrism 注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:2342
  • 域名类型:随机域名
  • 地区:选择China Top
image-20241216162501271
image-20241216162501271

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址,接下来就可以在其他电脑(异地)上,使用任意一个地址在浏览器中访问即可。

image-20241216162535094
image-20241216162535094

如下图所示,成功实现使用公网地址异地远程访问本地部署的PhotoPrism

image-20241216162607577
image-20241216162607577

小结

为了方便演示,我们在上边的操作过程中使用cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期使用PhotoPrism,或者异地访问与使用其他本地部署的服务的需求,但又不想每天重新配置公网地址,还想让公网地址好看又好记并体验更多功能与更快的带宽,那我推荐大家选择使用固定的二级子域名方式来配置公网地址。

6. 配置固定公网地址

由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择China TOP,然后设置一个二级子域名名称,填写备注信息,点击保留。

image-20241216162736226
image-20241216162736226

保留成功后复制保留的二级子域名地址:PhotoPrism

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道PhotoPrism,点击右侧的编辑

image-20241216162822480
image-20241216162822480

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China TOP

点击更新

image-20241216162853232
image-20241216162853232

现在点击在线隧道列表可以查看到公网地址已经发生变化了,此时一个永久不会变化的网址就设置好了。

image-20241216162937540
image-20241216162937540

我们复制下来打开浏览器粘贴,现在我们使用固定的公网地址访问PhotoPrism可以看到访问成功。

bd34fe314067f4f0d793bb387b7c3bb
bd34fe314067f4f0d793bb387b7c3bb

如果你还在为整理那些海量照片头疼不已,那就赶紧试试这款神器吧!PhotoPrism 绝对能成为你摄影旅途中的超级助手,让你的照片管理变得轻松愉快。如果这篇文章帮到了你,别忘了给我点个赞、分享给更多小伙伴哦!毕竟,好东西就是要大家一起享受嘛!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 JIT 技术的开源全场景高性能 JSON 库
大家好,我是Mandy,上一节我们对Go中的切片数据类型进行了深度的剖析,今天给大家分享一个字节跳动自研开源的JSON数据解析包。一个速度奇快的 JSON 序列化/反序列化库,由 JIT (即时编译)和 SIMD (单指令流多数据流)加速。
兔云小新LM
2023/08/09
7330
基于 JIT 技术的开源全场景高性能 JSON 库
我是如何实现Go性能5倍提升的?
代码的稳健、可读和高效是每一位 coder 的共同追求,写出更高效的代码不仅让自己爽、让 reviewer 赏心悦目,更能对业务带来实际的正面影响。本文将从实践及源码层面对 Go 的高性能编程进行解析,带你进入 Go 的高性能世界。
腾讯云开发者
2024/01/04
2.3K1
我是如何实现Go性能5倍提升的?
超好用的golang工具分享
go-callvis是一个代码调用关系的可视化工具,它可以帮助我们了解指定项目代码的结构,以达到更快的理解代码意图的目的。
于顾而言SASE
2024/03/21
1790
超好用的golang工具分享
Go语言——测试与性能
​ 作为一名合格的开发者,不应该在程序开发完之后才开始写测试代码。使用 Go 语言的测试 框架,可以在开发的过程中就进行单元测试和基准测试。和 go build 命令类似,go test 命 令可以用来执行写好的测试代码,需要做的就是遵守一些规则来写测试。而且,可以将测试无缝 地集成到代码工程和持续集成系统里。
传说之下的花儿
2023/04/16
1.2K0
Go每日一库之79:testing
testing是 Go 语言标准库自带的测试库。在 Go 语言中编写测试很简单,只需要遵循 Go 测试的几个约定,与编写正常的 Go 代码没有什么区别。Go 语言中有 3 种类型的测试:单元测试,性能测试,示例测试。下面依次来介绍。
luckpunk
2025/01/18
720
Go通过19:单元测试,确保高质量代码的秘诀!
您诸位好啊,我是无尘,今天我们进入到Go语言单元测试阶段,讲讲Go如何进行单元测试。
微客鸟窝
2021/08/18
5520
Go通过19:单元测试,确保高质量代码的秘诀!
Go Reflect 性能
Go reflect包提供了运行时获取对象的类型和值的能力,它可以帮助我们实现代码的抽象和简化,实现动态的数据获取和方法调用, 提高开发效率和可读性, 也弥补Go在缺乏泛型的情况下对数据的统一处理能力。
李海彬
2019/03/07
1K0
Go Reflect 性能
如何打造高性能的 Go 缓存库
我在看一些优秀的开源库的时候看到一个有意思的缓存库 fastcache,在它的介绍主要有以下几点特点:
luozhiyun
2021/05/16
1.3K0
python接口自动化测试 - unittest框架基本使用
这是比较常见的断言方式,当然还有一些比较容易理解的断言方式就没有一一举例啦,具体可以看看下面列表
小菠萝测试笔记
2020/06/09
6500
PHP转Go速学手册
整理了一份简要的手册,帮助大家高效的上手Go语言,主要是通过对比PHP和Go的不同点来强化理解,内容主要分为以下四部分:
用户1093396
2021/07/28
2.4K0
9.Go编程快速入门学习
描述: 日常开发中, 测试是不能缺少的. 通常国内的程序员都不太关注单元测试这一部分, 俗话说不写测试的开发不是好程序猿,我认为每一位开发者都应该了解 TDD(Test Driven Development-测试驱动开发),所以本章将主要介绍下在Go语言中如何做单元测试和基准测试。
全栈工程师修炼指南
2022/09/29
7230
9.Go编程快速入门学习
几百行代码实现一个 JSON 解析器
之前在写 gscript 时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的应用起来。
crossoverJie
2022/10/27
4680
几百行代码实现一个 JSON 解析器
ChatGPT|AI自制编程语言-实现JavaScript编译器
去年的这个时候一直在探索如何用 AI 实现编程语言,当时 Agent 和工具链还不够齐全,所以尝试一段时间就断更了,有兴趣的可以再回忆这两篇用 Prompt 实现的词法解析器:
用户1904552
2025/04/27
1390
ChatGPT|AI自制编程语言-实现JavaScript编译器
Go 语言原生的 json 包有什么问题?如何更好地处理 JSON 数据?
Go 的 “玩家” 们看到这个题目可能会很疑惑——对于 JSON 而言,Go 原生库 encoding/json 已经是提供了足够舒适的 JSON 处理工具,广受 Go 开发者的好评。它还能有什么问题?但是,实际上在业务开发过程中,我们遇到了不少原生 json 做不好甚至是做不到的问题,还真是不能完全满足我们的要求。
amc
2021/05/06
5.3K0
Go 语言原生的 json 包有什么问题?如何更好地处理 JSON 数据?
Go 高性能系列教程之一:基准测试
要想改进程序的性能,首先要知道程序的当前性能。 本节主要关注使用 Go testing 包如何构建有用的基准测试,并且给出一些最佳实践以及常见的陷阱。
Go学堂
2023/01/31
7670
PHPUnit简介及使用
1、它是一款轻量级的PHP测试框架,地址:http://www.phpunit.cn
双面人
2020/02/25
1.7K0
for-loop 与 json.Unmarshal 性能分析概要
在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的。一般会有如下几种做法:
李海彬
2019/05/08
1.1K0
for-loop 与 json.Unmarshal 性能分析概要
试用GO开发pyhton编译器:字节码基础
掌握一门编程语言最好的办法或许是将它的编译器设计出来。毫无疑问那些开发Python编译器的人应该是世界上对Python了解最深刻的人群之一。我用python开发过不少程序,但是每次反思或复盘的时候总是感觉对Python的认知还不到位,由此也看了很多讲Python的书,但看的时候感觉好像懂了,但过了一段时间后又忘了,也就是说单纯看书很难将某一项技术完全内化。当然技能的掌握必然要从实践中来,但是我发现在使用Python开发程序时,我总是使用它的一部分功能就够了,或者说居于我的思维模式限制,我在使用python开发时总是落入一个套路,这使得我只能掌握python技术的冰山一角,就如同井底之蛙一样只了解一小块内容,为了能够打破认知局限,让我自己能更全面的对python的设计原理有更深入的了解,我打算尝试做一个能运行的python编译器。
望月从良
2021/12/20
3740
试用GO开发pyhton编译器:字节码基础
Golang UnitTest单元测试
单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。
黑光技术
2019/03/06
8.9K0
Golang UnitTest单元测试
如何在Go语言中进行优雅的单元测试
作为开发者,保持使用优雅的测试用例可以带来多方面的好处,这些好处不仅限于提高代码质量,还涉及到团队协作、项目可维护性、以及长期的技术债务管理等方面。
闫同学
2024/09/14
2720
推荐阅读
相关推荐
基于 JIT 技术的开源全场景高性能 JSON 库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验