一个简单的自托管图片库HomeGallery

news2024/11/26 19:31:33

在这里插入图片描述

什么是 HomeGallery ?

HomeGallery 是一个自托管的开源 Web 图片库,用于浏览个人照片和视频,其中包括标记、对移动端友好和 AI 驱动的图像和面部发现功能。

HomeGallery 的独特功能是自动 相似图像/反向图像搜索功能无数据库架构 (所有搜索和过滤都在客户端浏览器上快速完成)。这会带来快速响应的用户体验,无需任何手动步骤即可导航和探索档案。

官方提供了演示网站:https://demo.home-gallery.org/

命令行安装

采用 docker-compose 安装方式,将下面的内容保存为 docker-compose.yml 文件

这是在官方的 docker-compose.yml 基础上修改的,老苏保留了修改痕迹,方便你知道改了哪些内容;

version: "3.9"

services:
  api:
    # custom build via
    #build: packages/api-server
    image: xemle/home-gallery-api-server
    container_name: home-gallery-api
    environment:
      # TensorflowJS backends
      # - cpu: slowest and best support
      # - wasm: good perfromance for arm64 and amd64 platforms
      # - node: best performance on amd64 platform
      #- BACKEND=cpu
      - BACKEND=wasm
      #- BACKEND=node

  gallery:
    # custom build via
    #build: .
    image: xemle/home-gallery
    container_name: home-gallery-server
    environment:
      - GALLERY_API_SERVER=http://api:3000
      #- GALLERY_API_SERVER_CONCURRENT=1 # On low powered devices
      #- GALLERY_API_SERVER_TIMEOUT=60 # On low powered devices
      - GALLERY_OPEN_BROWSER=false
    volumes:
      - ./data:/data
      # Mount your media directories below /data
      - /volume2/docker/photoprism/photos:/data/Pictures
    ports:
      - "3045:3000"
    user: "${CURRENT_USER}"
    entrypoint: [ 'node', '/app/gallery.js' ]
    command: [ 'run', 'server' ]

几个主要变量的说明:

  • BACKEND:这个是配置 TensorflowJS 的环境变量,分为:

    • cpu:这个速度最慢,但是兼容性应该是最好的;
    • wasm:这个在 arm64amd64 平台的都具有良好的性能;
    • node:这个在 amd64 平台上的能获得最佳性能;
      所以,其实按老苏的机器,应该是选 node的。
  • GALLERY_API_SERVER:指 API 服务器的地址,这里用的是相对地址,所以你可以不用管;

  • GALLERY_API_SERVER_CONCURRENT:设置并发数,这个在低功耗的机器上才需要打开,比如树莓派;

  • GALLERY_API_SERVER_TIMEOUT:设置超时,也是低功耗设备才需要设置;

  • /data 卷:用于存放 SQLite、缩略图和设置等;

  • /data/Picture 卷:用于放照片和视频文件,可以指向一个已经存在的图库,也可以是新建的。老苏指向了之前 PhotoPrism 的照片库,省得占用空间 😄

然后执行下面的命令

# 新建文件夹 homegallery 和 子目录
# 如果用现有照片库,可以不建 pictures 目录
mkdir -p /volume2/docker/homegallery/{data,pictures}

# 进入 homegallery 目录
cd /volume2/docker/homegallery

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3045 就能看到主界面

在这里插入图片描述

是不是觉得有点奇怪,为什么明明指定的照片目录已经有文件,但是却是一片空白,不要慌,因为还需要做个初始化操作

# 进入容器
docker exec -it home-gallery-server /bin/sh

# 进入 app 目录
cd /app

# 初始化目录
./gallery.js init --source /data/Pictures

用上下键选择不同的选项,第一步选 Update and process source files

然后回车,老苏第二步选择了 Process all files (one run)

回车后开始执行,看起来似乎是做了索引和缩略图操作

再回到页面,刷新一下,这下所有的图片都出来了

在这里插入图片描述

HomeGallery 支持标记和搜索,也可以按年份查看图片。随便打开一张,识别的物体,当然这显然不是 vase

在这里插入图片描述

识别出是人,而且是男性

在这里插入图片描述

女性

在这里插入图片描述

在右上角的搜索框中输入 person

在这里插入图片描述

回车之后

在这里插入图片描述

移动端,比如 Android 手机上,用 Edge 浏览器打开网站

在这里插入图片描述

打开图片

在这里插入图片描述

i 进入详情页

在这里插入图片描述

从资源占用看,老苏觉得还好

在这里插入图片描述

参考文档

xemle/home-gallery: Self-hosted open-source web gallery to view your photos and videos featuring mobile-friendly, tagging and AI powered image discovery
地址:https://github.com/xemle/home-gallery

HomeGallery - self-hosted web gallery
地址:https://home-gallery.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验三、8人智力竞赛抢答电路设计

实验三 8人智力竞赛抢答电路设计 实验目的 设计一个能支持八路抢答的智力竞赛抢答器;主持人按下开始抢答的按键后,有短暂的报警声提示抢答人员抢答开始且指示灯亮表示抢答进行中;在开始抢答后数码管显8秒倒计时;有抢答人员按下抢…

Linux企业应用现状

一、Linux在服务器领域的发展 随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国…

linux 网络编程socket

前言 socket(套接字)是linux下进程间通信的一种方式,通常使用C-S(客户端-服务端)的方式通信,它可以是同一主机下的不同进程间通信或者不同主机的进程通信。 socket是夹在应用层和TCP/UDP协议层间的软件抽象…

机器自动翻译古文拼音 - 将进酒拼音版本,译文拼音版本

写了一个程序,用来给佛经和古诗加上拼音,并处理多音字和排版,顺便加上翻译。 定期翻译一些,给老人和小孩子用。 将进酒 君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发&…

Servlet介绍及其概念

Servlet介绍及其概念一、Web基础二、编写HTTP Server,打印Hello,World三、Servlet的出现1. 思考上述HTTP服务器的问题2. 实现代码重用,简化开发过程3. 实现最简单的Servlet4. 导入依赖5. pom.xml文件6. Servlet版本问题7. 整个Servlet工程结构四、运行Se…

Windows卸载与清除工具 “ Geek 与 CCleaner ”

前言 📜“作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 一、Geek的简介 1、大概介绍 2、详细介绍 二、Geek的下载 1、…

千峰Ajax【fetch和promise】

promise基础 <script>// Promise构造函数var q new Promise(function (resolve, reject) {//异步setTimeout(function () {// 成功// resolve(["111", "222", "333"]);// 失败reject("error");}, 2000);});// q是promise对象q…

利用系统函数与堆栈快速定位app关键代码

string.trim 这个还是比较关键的&#xff0c;没准可以从这里得到加密方式&#xff0c;或者挖到sql注入&#xff0c;文件上传等漏洞。进一步利用可以打印堆栈来用 Java.perform(function(){function showStack(){console.log(Java.use("android.util.Log").getStack…

TCP/IP网络编程——基于 TCP 的服务端/客户端(下)

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 5 章 基于 TCP 的服务端/客户端&#xff08;2&#xff09;5.1 回声客户端的完美实现5.1.1 回声服务器没有问题&#xff0c;只有回声客户端有问题&#xff1f;5.1.2 回声客户端问题的解决办法5.1.3 如果问题不…

chrome插件开发时使用import

问题描述 在进行chrome插件开发时&#xff0c;我们有时会希望把一些公共的方法包装成一个模块&#xff0c;例如发送网络请求的方法&#xff0c;然后在其他js文件中import然后调用&#xff0c;但是在实际操作时&#xff0c;遇到了这样的问题&#xff1a; 控制台报错cannot use …

Vistual Studio Code 安装与配置C/C++环境

1. 下载VScode 2. 安装cpptools工具 3. 下载MinGW 4. 配置环境变量 5. 使用简单的.cpp文件配置C环境 6. 运行 注&#xff1a;本文所有的地址配置要根据读者的实际情况来&#xff0c;不要照文章复制&#xff01;&#xff01;&#xff01; 下载VScode 下载链接&#xff1a;https…

浏览器调用本地DLL的方法

要在浏览器中调用本地DLL&#xff0c;常见的方法是使用插件。但是为了安全&#xff0c;现在有的浏览器对插件开发做了限制&#xff0c;不让插件调用外部DLL。比如说Chrome&#xff0c;为了调用外部的DLL&#xff0c;我们只能使用早期的chrome版本。 还有一种方法就是在电脑上安…

linux编辑器的使用(gcc,g++)

前言 gcc/g是一个编译器。 我们程序的翻译有四个步骤1.预处理(头文件展开&#xff0c;条件编译&#xff0c;宏替换&#xff0c;去注释)2.编译(c语言汇编语言)3.汇编(汇编->可重定位目标二进制文件&#xff0c;不可以被执行的&#xff0c;bin.obj)----只是把我们自己的代码进…

下载Windows ISO镜像的方法 (超详细 适合新手入门)

前言 &#x1f4dc;“作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 一、镜像介绍 1、大概介绍 2、详细介绍 二、下载Window…

Solon 1.12.4 发布

一个更现代感的 Java "生态型"应用开发框架&#xff1a;更快、更小、更自由。不是 Spring&#xff0c;没有 Servlet&#xff0c;也无关 JavaEE&#xff1b;新兴独立的开放生态 &#xff08;已有150来个生态插件&#xff09; 。主框架仅 0.1 MB。 相对于 Spring Boot…

JVM学习总结,全面介绍运行时数据区域、各类垃圾收集器的原理使用、内存分配回收策略

参考资料&#xff1a;《深入理解Java虚拟机》第三版 文章目录一&#xff0c;运行时数据区域&#xff08;基础重中之重&#xff09;二&#xff0c;垃圾收集器与内存分配策略1&#xff09;对象已死2&#xff09;再谈引用3&#xff09;对象回收4&#xff09;内存分代收集理论&…

【HBase入门】10. HBase高可用、HBase架构、常见问题汇总

HBase高可用 考虑关于HBase集群的一个问题&#xff0c;在当前的HBase集群中&#xff0c;只有一个Master&#xff0c;一旦Master出现故障&#xff0c;将会导致HBase不再可用。所以&#xff0c;在实际的生产环境中&#xff0c;是非常有必要搭建一个高可用的HBase集群的。 HBase…

【Maven】聚合与继承

目录 1. 聚合工程 2. 聚合工程开发 3. 继承关系 4. 继承关系开发 5. 聚合与继承的区别 1. 聚合工程 什么叫聚合&#xff1f; 聚合&#xff1a;将多个模块组织成一个整体&#xff0c;同时进行项目构建的过程称为聚合 聚合工程&#xff1a;通常是一个不具有业务功能的”空…

如何使用Excel列提取合并器提取多个表格中的一列数据然后合并到一个文件

在我们日常工作中&#xff0c;你可能经常遇到有几十个或更多的Excel文件&#xff0c;每个文件中都包含了相同类型的信息例如姓名、邮箱、地址等等&#xff0c;但它们却在不同文件中不同的列。当你想进行数据汇总或合并的时候&#xff0c;把不同表中同样类型的数据合并在一起&am…

一款用于PE文件绑定免杀的工具: Shellter

简介 Shellter是一种动态二进制程序壳程序&#xff0c;它可以在现有的可执行文件中隐藏恶意软件。它使用动态链接库技术来实现恶意代码的注入&#xff0c;并且可以在不修改现有的可执行文件的情况下进行注入。这使得它非常难以检测&#xff0c;因为它不会改变文件的哈希值或数…