
什么是 Lama Cleaner ?
Lama Cleaner是由SOTA AI模型提供支持的图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人,或者擦除并替换(powered by stable diffusion)图片上的任何东西。
看看官方提供的视频,应该比较容易理解其功能
Lama Cleaner 0.24.0 示例
其实主要功能就 3 项:
Lama Cleaner 分为 GPU 版本和 CPU 版本,这两个版本的体积相差巨大,老苏猜测CPU 版本应该是个精简版,没有内置 stable diffusion,因此是不支持替换功能的,能否修复旧照片,老苏没试,因为手上没有

GPU 版本的要求最起码应该是要有Nvidia 显卡的,具体型号老苏没用过也不懂,反正老苏的小机器上只有集显,也就只能选择 CPU 版随便玩玩
cuda11.6pytorch1.12.1minimum nvidia driver 510.39.01+CPU 版镜像下载后大约是 2G,GPU 版保守估计 10G,大家要留好空间

在群晖上以 Docker 方式安装。
在注册表中搜索 lama-cleaner ,选择第二个 cwq1913/lama-cleaner,版本老苏选的是 cpu-0.26.1
如果你的机器有
Nvidia显卡,可以试试gpu的版本

在 docker 文件夹中,创建一个新文件夹 lama,并在其中建两个子文件夹,分别是 huggingface_cache 和 torch_cache
| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/lama/huggingface_cache | /root/.cache/huggingface | 存放 sd1.5 模型 |
docker/lama/torch_cache | /root/.cache/torch | 存放 lama/ldm/zits/mat/fcf 模型 |
对于
stable-diffusion 1.5模型,您需要接受访问条款,并获取access token,具体方法请自行研究官方文档,因为cpu版本不涉及这个模型的下载和使用;

本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
| 本地端口 | 容器端口 |
|---|---|
8184 | 8184 |
默认的容器端口是 8080

可以通过命令行修改,这里老苏用了 8184

没有用到环境变量,但是用了命令行,这个我们之前说过,命令行只有第一次生效,所以别忘记了,因为我们前面改了容器端口
在 命令 中输入
lama-cleaner --device cpu --port 8184 --host 0.0.0.0

如果你熟悉命令行,可能用 docker cli 更快捷
# 新建文件夹 lama 和 子目录
mkdir -p /volume2/docker/lama/{huggingface_cache,torch_cache}
# 进入 lama 目录
cd /volume2/docker/lama
# 运行容器
docker run -d \
--restart unless-stopped \
--name lama-cleaner \
-p 8184:8184 \
-v $(pwd)/torch_cache:/root/.cache/torch \
-v $(pwd)/huggingface_cache:/root/.cache/huggingface \
cwq1913/lama-cleaner:cpu-0.26.1 \
lama-cleaner --device=cpu --port=8184 --host=0.0.0.0

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
version: '3'
services:
lamecleaner:
image: cwq1913/lama-cleaner:cpu-0.26.1
container_name: lama-cleaner
restart: unless-stopped
ports:
- 8184:8184
volumes:
- ./torch_cache:/root/.cache/torch
- ./huggingface_cache:/root/.cache/huggingface
command: lama-cleaner --device=cpu --port=8184 --host=0.0.0.0
换一种 command 写法也是可以的
command:
- lama-cleaner
- --device=cpu
- --port=8184
- --host=0.0.0.0
还可以写成
command: ["lama-cleaner", "--device=cpu", "--port=8184", "--host=0.0.0.0"]
老苏之所以跟研究茴香豆的“茴”字到底有几种写法一样研究
command的写法,是因为几种安装方式都存在差异,尤其是图形化安装时,因为写了=号导致容器一直起不来,总是隔一段时间就忘记,真是受不了自己;
然后执行下面的命令
# 新建文件夹 lama 和 子目录
mkdir -p /volume2/docker/lama/{huggingface_cache,torch_cache}
# 进入 lama 目录
cd /volume2/docker/lama
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
第一次启动失败了,从日志看,需要下载 Downloading: "https://github.com/Sanster/models/releases/download/add_big_lama/big-lama.pt" to /root/.cache/torch/hub/checkpoints/big-lama.pt

所以第一种方法是将 github.com 加入科学上网的白名单,再次启动容器就开始下载了

看到 * Running on http://0.0.0.0:8184/ (Press CTRL+C to quit) ,就可以开始使用了

下载的 big-lama.pt 在 /docker/lama/torch_cache/hub/checkpoints 目录中

所以第二种方式是,如果你的群晖不能科学上网的话,你可以借助 ghproxy,直接下载这个模型文件丢到上面的目录中
# 通过代理下载模型文件的地址
https://ghproxy.com/github.com/Sanster/models/releases/download/add_big_lama/big-lama.pt
当然这是 CPU 版,需要的模型比较少,如果是GPU 版的话,估计模型会更多,注意看日志吧
在浏览器中输入 http://群晖IP:8184 就能看到主界面

老苏随便选了一张,准备把中间的小刺猬抹掉

这个效果怎么样?

对比原始图看看,灯是被遮挡了的缘故,所以是无法还原的,远处的云和山不放大看细节,还原度还是可以的,起码不会一眼穿帮吧

Sanster/lama-cleaner: Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.
地址:https://github.com/Sanster/lama-cleaner
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。
我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc
执行rvmlist后,我得到以下输出:rvmrubiesgems[missingbin/ruby]=*ruby-2.0.0-p645[x86_64]ruby-2.1.6[x86_64]ruby-2.2.1[x86_64]gems[missingbin/ruby]是什么意思?gems是某种系统gemset吗?它不是我创建的,我不知道我是否可以或应该删除它。 最佳答案 在我跑完之后:rvmfix-permissions然后我能够卸载具有[缺少bin/ruby]的版本。 关于ruby-如何修复
我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.