2024年4月

彩色图介绍

彩色图像是一种包含颜色信息的图像,通常由红色、绿色和蓝色(RGB)三个颜色通道组成。这三种颜色通道可以叠加在一起来形成各种不同的颜色。

彩色图像中的每个像素都有三个数值,分别表示红色、绿色和蓝色通道的强度或亮度。这三个数值通常在0到255之间,其中0代表没有该颜色通道的强度,255代表最高强度。

彩色图像的颜色信息使得它们能够更准确地表达真实世界中的颜色和场景,因此在许多应用中被广泛使用。例如,彩色图像在摄影、电视、电影、计算机游戏、计算机辅助设计(CAD)、医学影像等领域都有重要的应用。

除了RGB颜色模型外,还有其他一些彩色图像的表示方式,如CMYK(青、品红、黄、黑)、HSV(色调、饱和度、亮度)等。这些不同的表示方式适用于不同的应用场景,例如CMYK常用于印刷领域,而HSV常用于图像处理和计算机视觉中。

灰度图介绍

灰度图是一种只包含灰度信息的图像,也称为单通道图像。与彩色图像不同,灰度图像只有一个颜色通道,其中每个像素的灰度值表示了该像素的亮度水平。

在灰度图像中,每个像素的灰度值通常在0到255之间,其中0代表黑色,255代表白色,其间的数值代表了不同程度的灰度或亮度。较小的灰度值通常表示较暗的颜色,而较大的灰度值表示较亮的颜色。

为什么要转化为灰度图?

  1. 简化处理
    :灰度图像只有一个颜色通道,相比于彩色图像的三个通道(红、绿、蓝),更容易处理和分析。这在一些计算机视觉和图像处理任务中是非常有用的,因为可以减少计算的复杂性。
  2. 降低数据量
    :灰度图像只需要一个字节来表示一个像素的亮度值,而彩色图像通常需要三个字节。这意味着,在存储和传输图像时,灰度图像所需的数据量更小,可以节省存储空间和传输带宽。
  3. 突出图像结构
    :有时候,我们更关心图像中的纹理、形状和结构,而不是颜色信息。转换为灰度图像可以突出这些结构,使得一些图像处理任务(如边缘检测、特征提取等)更加有效。
  4. 适应部分场景
    :在一些应用场景中,彩色信息并不是必需的。例如,人脸识别中,大多数情况下只需要考虑人脸的形状和纹理,而颜色信息对于识别并不是必要的。

转化为灰度图的原理

将彩色图像转换为灰度图像的常见方法之一是通过加权平均法(Weighted Average Method)或者简单平均法(Simple Average Method)。这两种方法都是基于RGB颜色模型的。

  1. 加权平均法

    加权平均法是将彩色图像中的每个像素的RGB值按照一定的权重进行加权平均,然后得到对应的灰度值。通常使用的权重是基于人眼对不同颜色敏感度的调查结果来确定的。由于人眼对于绿色的敏感度最高,对红色次之,对蓝色最低,所以通常的权重设置是:


    • 红色通道权重:0.299
    • 绿色通道权重:0.587
    • 蓝色通道权重:0.114

    然后,对于每个像素,将其RGB值分别乘以对应通道的权重,然后将三个乘积相加,得到灰度值。

    灰度值 = 0.299 * R + 0.587 * G + 0.114 * B

  2. 简单平均法

    简单平均法是将彩色图像中的每个像素的RGB值的平均值作为灰度值。这种方法没有考虑到人眼对不同颜色的敏感度,简单地取了三个通道值的平均值作为灰度值。

    灰度值 = (R + G + B) / 3

使用加权平均法

C#代码示例:

 string imagePath = "测试图片路径";
 Bitmap original = new Bitmap(imagePath);
 Bitmap grayScale = new Bitmap(original.Width, original.Height);
 for (int y = 0; y < original.Height; y++)
 {
     for (int x = 0; x < original.Width; x++)
     {
         System.Drawing.Color originalColor = original.GetPixel(x, y);
         int grayScaleValue = (int)((originalColor.R * 0.299) + (originalColor.G * 0.587) + (originalColor.B * 0.114));
         System.Drawing.Color grayColor = System.Drawing.Color.FromArgb(grayScaleValue, grayScaleValue, grayScaleValue);
         grayScale.SetPixel(x, y, grayColor);
     }
 }
  grayScale.Save("保存图片路径");

原图如下所示:

image-20240423151922149

灰度图如下所示:

image-20240423152112604

简单平均法

C#代码示例:

string imagePath = "测试图片路径";
Bitmap original = new Bitmap(imagePath);
Bitmap grayScale = new Bitmap(original.Width, original.Height);
 for (int y = 0; y < original.Height; y++)
 {
     for (int x = 0; x < original.Width; x++)
     {
         System.Drawing.Color originalColor = original.GetPixel(x, y);
         int grayScaleValue = (int)((originalColor.R + originalColor.G + originalColor.B) / 3);
         System.Drawing.Color grayColor = System.Drawing.Color.FromArgb(grayScaleValue, grayScaleValue, grayScaleValue);
         grayScale.SetPixel(x, y, grayColor);
     }
 }
 grayScale.Save("保存图片路径");

使用OpenCV

知道了什么是灰度图,为什么要转化为灰度图以及转化的原理之后,我们以后直接使用OpenCV提供的函数就好了。

  string imagePath = "测试图片路径";
  using (Mat src = new Mat(imagePath, ImreadModes.Color))
  {
      Cv2.ImShow("原图", src);
      Cv2.WaitKey(0);

      using (Mat gray = new Mat())
      {
          Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);       
          Cv2.ImShow("灰度图", gray);
          Cv2.WaitKey(0);

      }
  }                  

OpenCVSharp中将彩色图转化为灰度图的函数:

 Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);

实现效果:

image-20240423152933363

总结

本文介绍了彩色图与灰度图,为什么要转化为灰度图,及其转化为灰度图的原理,包含加权平均法与简单平均法,在明白了原理之后,直接使用OpenCV中提供的函数进行图像灰度处理,希望对你有所帮助。

vue-manage-system
近期进行了一次版本升级,主要是支持了更多功能、升级依赖版本和优化样式,并且上线了
官方文档
网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业务简单修改,就可以完成产品需求。

视觉优化

比较长时间没对视觉做什么改动,多少会有点审美疲劳,所以这次也做了一些改动,至少我觉得比之前好看点了(请轻点喷,哭笑不得)

标签页

之前标签页的样式是自己实现,最多只能支持8个标签页,再多会覆盖之前的页面。现在直接用 el-tabs 组件实现,代码量更少,而且不限制标签数量,超出宽度可以滚动查看。

<el-tabs v-model="activePath" class="tabs" type="card" closable @tab-click="clickTabs" @tab-remove="closeTabs">
	<el-tab-pane v-for="item in tabs.list" :key="item.path" :label="item.title" :name="item.path" @click="setTags(item)"></el-tab-pane>
</el-tabs>
const activePath = ref(route.fullPath);
watch(() => route.fullPath, (newVal, oldVal) => {
	activePath.value = newVal;
})

activePath 用当前路由的路径来选中对应的标签页,当路由变化时,通过监听器 watch 来给 activePath 赋值新路由,以确保选中的标签一直是当前页面路由。

const tabs = useTabsStore();
const closeTabs = (name: string) => {
	const index = tabs.list.findIndex((item) => item.path === name);
	tabs.delTabsItem(index);
	const item = tabs.list[index] || tabs.list[index - 1];
	router.push(item?item.path:'/')
}

关闭标签时会触发 tab-remove 事件,把该标签从 tabs.list 列表中移除。先通过 findIndex 找到该标签的索引,传到 pinia 中的 delTabsItem 方法进行移除标签,移除后路由跳转到下一个标签或者上一个标签,如果标签已清空,则跳到首页。

设置主题

Element plus的默认主题色是
#409EFF
,CSS变量是
--el-color-primary
,要改变主题色时,给这个变量赋值即可。

document.documentElement.style.setProperty('--el-color-primary', '#ff0000');

同时要修改它的附属颜色,比如:hover、:active等用到的颜色变量

--el-color-primary-light-3: #79bbff;
--el-color-primary-light-5: #a0cfff;
--el-color-primary-light-7: #c6e2ff;
--el-color-primary-light-8: #d9ecff;
--el-color-primary-light-9: #ecf5ff;
--el-color-primary-dark-2: #337ecc;

修改附属颜色变量

const mix = (color1, color2, weight) => {
    let color = '#';
    for (let i = 0; i <= 2; i++) {
        const c1 = parseInt(color1.substring(1 + i * 2, 3 + i * 2), 16);
        const c2 = parseInt(color2.substring(1 + i * 2, 3 + i * 2), 16);
        const c = Math.round(c1 * weight + c2 * (1 - weight));
        color += c.toString(16).padStart(2, '0');
    }
    return color;
};
const setThemeLight (type) => {
	[3, 5, 7, 8, 9].forEach((v) => {
		setProperty(`--el-color-${type}-light-${v}`, mix('#ffffff', this[type], v / 10));
	});
	setProperty(`--el-color-${type}-dark-2`, mix('#000000', this[type], 0.2));
}

封装表格

表格是后台管理系统中最常见的功能了,会在多个页面中重复使用,所以这里对 element 表格组件做了二次封装,包括了查询、分页、查看详情、添加/编辑/删除等常用功能,在使用表格的时候代码量可以更少,比较方便维护。

  • /src/components/table-custom.vue
    : 表格组件
  • /src/components/table-edit.vue
    : 添加/编辑表单
  • /src/components/table-detail.vue
    : 查看详情组件
  • /src/components/table-search.vue
    : 查询组件

使用方式如下:

<template>
	<div>
		<!-- 查询组件 -->
		<TableSearch :query="query" :options="searchOpt" :search="handleSearch" />
		<!-- 表格组件 -->
		<TableCustom :columns="columns" :tableData="tableData" :total="page.total" :viewFunc="handleView" :delFunc="handleDelete" :editFunc="handleEdit" :refresh="getData" :currentPage="page.index" :changePage="changePage">
			<!-- 自定义内容 -->
			<template #toolbarBtn>
				<el-button type="warning" :icon="CirclePlusFilled" @click="visible = true">新增</el-button>
			</template>
			<template #money="{ rows }">¥{{ rows.money }}</template>
			<template #thumb="{ rows }">
				<el-image class="table-td-thumb" :src="rows.thumb" :z-index="10" :preview-src-list="[rows.thumb]" preview-teleported></el-image>
			</template>
			<template #state="{ rows }">
				<el-tag :type="rows.state ? 'success' : 'danger'">
					{{ rows.state ? '正常' : '异常' }}
				</el-tag>
			</template>
		</TableCustom>
		<!-- 新增/编辑 -->
		<el-dialog :title="isEdit ? '编辑' : '新增'" v-model="visible" width="700px" destroy-on-close :close-on-click-modal="false" @close="closeDialog">
			<TableEdit :form-data="rowData" :options="options" :edit="isEdit" :update="updateData">
				<template #thumb="{ rows }">
					<img class="table-td-thumb" :src="rows.thumb" />
				</template>
			</TableEdit>
		</el-dialog>
		<!-- 表格详情 -->
		<el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
			<TableDetail :data="viewData">
				<template #thumb="{ rows }">
					<el-image :src="rows.thumb" />
				</template>
			</TableDetail>
		</el-dialog>
	</div>
</template>

具体组件的传参可以参考文档:
vuems-doc

词云图

echarts 没有词云图,需要引入第三方库 echarts-wordcloud

<template>
	<v-chart class="schart" :option="wordOptions" />
</template>
<script setup>
import VChart from 'vue-echarts';
import 'echarts-wordcloud';
const wordOptions = {
    series: [
        {
            type: 'wordCloud',
            rotationRange: [0, 0],
            autoSize: { enable: true, minSize: 14,},
            textStyle: {
                fontFamily: '微软雅黑,sans-serif',
                color: () => (
                    'rgb(' +
                    [
                        Math.round(Math.random() * 160),
                        Math.round(Math.random() * 160),
                        Math.round(Math.random() * 160),
                    ].join(',') +
                    ')'
                )
            },
            data: [
                {name: 'Vue',value: 10000},
                {name: 'React',value: 9000},
                {name: '图表',value: 4000},
                {name: 'vue-manage-system',value: 2000},
            ],
        },
    ],
};
</script>

数字滚动

数字展示时带有滚动动画,能给视觉上带来一点冲击。Element Plus 的统计组件也可以实现这个效果,但是需要结合 vueuse 实现,比较麻烦。所以引入了第三方库
countup.js
,封装成小组件,使用方便。

// countup.vue
<template>
    <span ref="countRef"></span>
</template>

<script setup lang="ts">
import { onMounted, ref, watch } from 'vue';
import { CountUp } from 'countup.js';

const props = defineProps({
    end: { type: Number, required: true, },
    options: { type: Object, default: () => ({}), required: false, },
});
const countRef = ref<any>(null);
let countUp: any;
onMounted(() => {
    countUp = new CountUp(countRef.value, props.end, props.options);
    if (countUp.error) return;
    countUp.start();
});

watch(() => props.end, (newVal) => {
    countUp && countUp.update(newVal);
});
</script>

1)介绍 TailChat

官网:
https://tailchat.msgbyte.com/
作者:
https://www.moonrailgun.com/about/
GitHub :
https://github.com/msgbyte/tailchat

TailChat
是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 + 后端微服务架构。使得 Tailchat 能够驾驭任何定制化 / 私有化的场景。面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。

image.png

2)TailChat 功能

参考:
https://blog.laoda.de/archives/docker-compose-install-tailchat

  • 注重隐私
    :只有被邀请的成员才能加入群组
  • 防止陌生人:
    只有通过昵称 + 一串随机的数字才能添加好友
  • 二维的群组空间:
    通过频道来分割不同的话题
  • 高度自定义的群组空间:
    通过分组和拖拽来创建独创的群组空间。
    • 同时可以通过更多的插件来增加更多的能力
  • 可以严谨,也可以乐趣。
    通过插件的组合可以创造用于不同场景的 Tailchat。可以是面向娱乐,也可以是面向企业。
  • 后端微服务架构:
    已经为大规模部署做好了准备。不用担心用户量大了以后怎么办
  • 用户管理
    • 基于 4 位数字标识 (战网like) 的用户名系统
    • 好友管理
  • 聊天系统
    • 私聊
    • 群聊
    • 富文本消息
      • 图片
      • 链接
      • 提及(@)
      • 代码
  • 插件系统
    • 前端插件系统 (基于 ministar 的微内核架构)
      • 自定义主题
      • 自定义面板
      • 自定义操作
      • 消息内容转换
      • ...
    • 后端插件系统 ( 基于 moleculer 的微服务架构 )

3)使用场景

个人用户

  • 如果希望和朋友一起玩


    • 创建一个群组
    • 通过多个频道分割不同的话题
    • 使用网页面板来分享喜欢的网页
  • 如果希望聚集自己的粉丝圈


    • 使用机器人来订阅自己的信息并转发到聊天面板
    • 让自己的粉丝集中在一起,不需要创建无数个 qq 群/微信群
    • 多个频道让多个话题能够一起产生
  • 如果对于自己的隐私非常看中


    • 自己部署让一切都能掌控在手中

企业用户

  • 面板化设计满足企业自定义化设计需求

  • 插件化架构可以方便基于核心进行二次开发

  • 自部署的实现可以让企业价值得到保护,让企业安心

  • 开源代码方便审查

4)部署安装

4.1)安装 Docker 环境

# 高版本 Docker 安装
curl -fsSL https://get.docker.com/ | sh
# 关闭防火墙
systemctl disable --now firewalld
setenforce 0
# 启用 Docker
systemctl enable --now docker

4.2)开启 IPv4 forwarding

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward

4.3)安装 Docker-compose

curl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

4.4)创建 TailChat 目录

mkdir -p /docker/tailchat

cd /docker/tailchat

5)基于 Docker-compose 部署服务

vim docker-compose.yml
version: "3.3"

services:
  # 应用网关
  service-gateway:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/gateway
      PORT: 3000
    depends_on:
      - mongo
      - redis
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"
    networks:
      - internal

  # 用户服务
  service-user:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/user/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 群组服务
  service-group:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/group/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 聊天服务
  service-chat:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/chat/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 文件服务 / 插件注册中心 / 配置服务
  service-file:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/file,core/plugin/registry,core/config
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  service-openapi:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: openapi/app,openapi/oidc/oidc
      OPENAPI_PORT: 3003
      OPENAPI_UNDER_PROXY: "true"
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
    networks:
      - internal

  # 插件服务(所有插件)
  service-all-plugins:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICEDIR: plugins
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  # 数据库
  mongo:
    image: mongo:4
    restart: on-failure
    volumes:
      - ./data:/data/db
    networks:
      - internal

  # 数据缓存与中转通讯
  redis:
    image: redis:alpine
    restart: on-failure
    networks:
      - internal

  # 存储服务
  minio:
    image: minio/minio
    restart: on-failure
    networks:
      - internal
    environment:
      MINIO_ROOT_USER: tailchat
      MINIO_ROOT_PASSWORD: P@ssw0rd123456
    volumes:
      - ./storage:/data
    command: minio server /data --console-address ":9001"

  # 路由转发
  traefik:
    image: traefik:v2.1
    restart: unless-stopped
    command:
      - "--api.insecure=true" # Don't do that in production!
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.web.forwardedHeaders.insecure" # Not good
    ports:
      - 8080:80            			 # 8080 可以改成自己服务器上没有被占用的端口
      - 127.0.0.1:11001:8080     # 11001 同上
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

5.1)创建环境变量文件

vim docker-compose.env
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services

TRANSPORTER=redis://redis:6379

CACHER=redis://redis:6379

REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=P@ssw0rd123456  # 改成自己的密钥

# file
API_URL=http://192.168.80.8  # 改成自己的网站

# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=P@ssw0rd123456

# SMTP
SMTP_SENDER=
SMTP_URI=

# metrics
PROMETHEUS=1

5.2)拉取镜像

docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 修改 tag 以让配置文件能够识别

5.3)创建服务

cd /docker/tailchat    # 确保来到 docker-compose 文件所在的文件夹下

# 确保配置文件 ( docker-compose.yml 和 docker-compose.env ) 在当前目录下
# 执行如下命令一键启动
docker-compose up -d

6)访问 TailChat

http://服务器IP地址:8080

image.png
image.png
image.png
image.png
image.png
image.png

参考:
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat

Stable Diffusion中的常用术语解析

对于很多初学者来说,会对Stable Diffusion中的很多术语感到困惑,当然你不是唯一的那个。

在这篇文章中,我将会讲解几乎所有你在Stable Diffusion中需要了解的关键术语。搞懂了这些术语,使用stable diffusion起来就会事半功倍。

4x-Ultrasharp

4x-Ultrasharp是一款流行的人工智能图像增强工具,能够生成高清晰度的图像。它在Stable Diffusion的图像放大方面用的非常多。

AI upscaler

AI upscaler是一种采用人工智能技术的模型,能够在放大图像的同时增强图像细节。

Ancestral sampler

Ancestral sampler是一种在图像采样过程中向图像添加噪音的技术。它们被称为随机采样器,因为它们的采样结果具有一定的随机性。通常在它们的名称中会包含一个独立的字母“a”,比如说Euler a。

AnimateDiff

AnimateDiff是一种stable diffusion的文本到视频的技术。它采用了一个运动控制模型来影响Stable diffusion模型,从而生成一个以运动为序列的图像视频。这种方法可以帮助用户更直观地理解文本内容,并且为用户提供了一种全新的视觉体验。在实际应用中,AnimateDiff可以用于制作教育视频、科技演示等多种场景,为用户带来更加生动和有趣的学习体验。

Anything v3

Anything v3是一款备受赞誉的动漫风格Stable diffusion模型。它是Stable diffusionv1.5模型的一个版本。这个模型以其稳定性和扩散效果而闻名,被广泛应用于计算机图形学和动画制作领域。如果您正在寻找一个稳定且高效的扩散模型,Anything v3将是您的不二选择。

AUTOMATIC6666661

AUTOMATIC6666661是一个备受欢迎的开源社区开发的Stable diffusion用户界面。该项目最初由名为AUTOMATIC6666661的用户发起。官方项目名称是Stable diffusion Web UI。

Civitai

Civitai是一个专注于Stable diffusion模型的网站,拥有大量的资源。您可以使用AUTOMATIC6666661扩展Civitai Helper来方便地进行下载。

与Hugging Face相比,Civitai更专注于Stable diffusion模型。在这里,您可以找到许多用户生成的图像资源。

CFG scale

分类器自由指导Classifier-Free Guidance(CFG)规模控制了在txt2img和img2img中应该遵循prompt的程度。CFG scale的大小直接影响了生成图像时对输入文本的理解程度。

较大的CFG scale意味着模型有更大的自由度来根据输入文本进行图像生成,而较小的CFG scale则会更加严格地遵循输入文本的提示。

通过调整CFG规模,我们可以更好地控制模型在生成图像时的创造性和准确性。

Checkpoint model

Checkpoint model是对Stable diffusion模型更精确的称呼。它用于区分LoRA、textual inversion和Lycoris。

ComfyUI

ComfyUI 是基于节点的用户界面,由 Stable Diffusion 开发。它深受高级 Stable Diffusion 用户的喜爱。

ControlNet

ControlNet是一个神经网络,通过引入额外的条件来控制图像的生成过程。

它可以用来调整人体姿势和图像构图。这标志着Stable diffusion领域的一个重大突破。

DDIM

Denoising Diffusion Implicit Models (DDIM) 是第一个用于解决扩散模型的取样器之一。

DDIM是首个用于处理扩散模型的采样器之一。它采用了一种全新的方法来处理噪音和模糊,旨在提高模型的精确度和稳定性。

DDIM的出现为解决扩散模型提供了全新的可能性,为计算机技术领域带来了新的突破。通过DDIM,我们能够更加有效地处理扩散模型,为计算机技术的发展带来更多可能性。

Deforum

Deforum是一个利用Stable diffusion技术生成视频的工具。

这是一种能够有效减少视频抖动和模糊的技术,通过Deforum工具,用户可以轻松地生成高质量、稳定的视频内容。

无论是在拍摄运动场景还是在拍摄手持镜头下的视频,Deforum都能够帮助用户轻松实现稳定的视频生成。同时,Deforum工具还支持多种视频格式输出,用户可以根据自己的需求选择最适合的视频格式进行输出。

Denoiser/Noise predictor

在Stable diffusion模型中,denoiser扮演着核心角色。它在每个采样步骤中对噪声图像进行预测,并通过采样方法将其从图像中减去。

Denoising strength

Denoising strength对图像在img2img过程中的变化程度进行了控制。它的取值范围是从0到1。当取值为0时,表示图像没有发生变化;当取值为1时,表示输入图像完全改变。

我们可以通过调节降噪强度来控制图像转换的效果。

Diffusion

Diffusion是一种人工智能图像生成方法,它从随机图像开始,逐渐去除噪音,直到生成清晰图像。这种方法受到了物理学中扩散过程的朗之万动力学公式的启发。

DPM-Solver

Diffusion Probability Model Solver
(DPM-Solver) 是一个新的采样器算法。

Dreambooth

Dreambooth是一种训练技术,用于修改checkpoint model。只需5张图片,您就可以使用它将一个人或一个风格注入模型中。

Dreambooth模型需要在提示中有一个
触发关键词
来触发注入的主题或风格。

Dreambooth技术的特点包括:

  • 只需少量的图片即可实现模型修改
  • 可以轻松注入不同的主题或风格
  • 提供了触发关键词来帮助用户控制注入效果

指数移动平均(EMA)

指数移动平均(EMA)是指在Stable diffusion模型中,它表示最近训练步骤的平均权重,而不是最后一个训练步骤。

checkpoint model通常使用EMA权重来提高稳定性。EMA在计算机技术领域中被广泛应用,有助于提高模型的稳定性和可靠性。

Embedding

Embedding是textual inversion的产物,是一种用于修改图像的小文件。

通过在提示或负面提示中嵌入相关的关键词,可以实现对图像的修改。

在Stable diffusion中,embedding被用作prompt的编码版本,它在去噪器的交叉注意力层中使用,以影响AI图像的生成。

Extension

Extension是用来增强 AUTOMATIC6666661 WebUI 的功能。举例来说,ControlNet 就是通过扩展功能来实现的。通过扩展功能,用户可以更加灵活地定制和使用 AUTOMATIC6666661 WebUI,满足不同的需求和场景。扩展功能的引入为系统的功能拓展提供了更多可能性,让 AUTOMATIC6666661 WebUI 变得更加强大和多样化。

Euler

Euler是扩散模型的最简单的采样方法。它是一种常见的数值计算方法,用于解决微分方程模型。在计算机科学和工程领域中,Euler被广泛应用于模拟和预测系统的行为。它的优势在于简单易懂,适用于各种类型的扩散模型。

Face ID

Face ID是一个利用InsightFace提取准确人脸特征的IP适配器模型。该模型以这些特征作为条件生成高度准确的自定义人脸图像。

Fooocus

Fooocus是一款Stable Diffusion软件,设计简洁易用。它专注于提升用户体验,并且在提示和图像生成方面表现出色。更重要的是,它是免费且开源的。

Heun

Heun是一种用于采样的数值计算方法。它是对Euler方法的改进,能够更准确地预测系统的演化。

然而,与Euler方法相比,Heun方法在每一步中需要两次对噪音进行预测,因此计算速度比较慢,大约是Euler方法的两倍。这种方法在某些特定情况下可能会被用于解决复杂的计算问题。

Hugging Face

Hugging Face是一个网站,专门用来托管大量AI模型。除此之外,他们还开发了一些工具,帮助用户更方便地运行和托管这些模型。与Civitai相比,Hugging Face覆盖了所有类型的AI模型,而不仅仅是Stable diffusion模型。

Hypernetwork

Hypernetwork是一种小型的神经网络,用于改进U-net噪声预测器的交叉注意力模块。它类似于LoRAs和嵌入,都是用于修改检查点模型的小型模型文件的技术。

InstantID

InstantID是一个利用ControlNet和IP适配器的模型,用于快速复制和美化人脸图像。

InstantID模型利用先进的ControlNet技术和IP适配器,能够快速、精准地复制和美化人脸图像。

IP-adapter

IP适配器是一种利用图像作为输入来控制图像生成的技术。它被用于生成与输入图像类似的图像。

Karras Noise Schedule

Karras Noise Schedule是Karras论文提出的一种噪声调度方法。

K-diffusion/K-sampler

K-diffusion/K-sampler是一种采样方法,是由Katherine Crowson在她的k-diffusion GitHub仓库中实现的。

这种采样方法是用来处理图像生成的技术,它可以帮助我们在图像生成过程中更有效地获得所需的样本。通过K-diffusion/K-sampler,我们可以更好地控制图像的生成过程,使得生成的图像更加符合我们的预期。

Latent diffusion

Latent diffusion是指在潜在的空间中发生的扩散过程。

LCM LoRA

潜在一致性模型(LCM)是一种新型的Stable diffusion模型。

LCM LoRA是一种经过LCM方法训练的LoRA。这种LoRA可以与任何检查点模型一起使用,以加快生成速度。

潜在扩散模型(LDM)

The latent Diffusion Model 潜在扩散模型(LDM)是一种人工智能模型,它能够在潜在空间中执行扩散。

LMS

The Linear Multi Step method 线性多步法是一种用于解决常微分方程的方法。它旨在通过巧妙地利用先前时间步的值来提高精度。在AUTOMATIC6666661中,线性多步法是其中一种可用的取样方法之一。

LoRA

LoRA(Low-rank Adaptation)是一种用于修改checkpoint model的方法,使用一个名为LoRA的小文件。它们用于修改风格或为检查点模型添加特殊效果。

Lycoris

Lycoris是LoRA的升级版。它具有更多的检查点模型部分,因此更加灵活。你可以像训练LoRA一样训练Lycoris。

ModelScope

ModelScope是一个强大的文本到视频的转换模型,它能够根据输入的文本内容生成精彩纷呈的短视频剪辑。这个模型的应用领域非常广泛,可以用于影视制作、广告营销、教育培训等多个领域。

特点

  • 高效快速
    :ModelScope采用先进的算法和技术,能够快速而高效地将文本转换为视频,大大节省了制作视频的时间成本。
  • 个性定制
    :用户可以根据自己的需求定制文本内容和视频风格,让生成的视频更加符合个性化需求。
  • 多场景应用
    :无论是商业宣传、新闻报道还是教学辅助,ModelScope都能够胜任,为用户提供多种场景下的视频生成解决方案。

应用场景

  • 影视制作
    :制片人可以利用ModelScope将剧本中的对话和情节快速转化为视频,方便制作过程中的预览和讨论。
  • 广告营销
    :市场营销人员可以利用ModelScope将产品特点和宣传语快速转化为视频广告,吸引更多的消费者关注。
  • 教育培训
    :教育机构可以利用ModelScope将教学内容转化为生动有趣的视频,增强学生的学习体验和记忆效果。

ModelScope的出现,为文本到视频的转换提供了全新的解决方案,极大地丰富了视频制作的可能性。

Negative embedding

Negative embedding是指在计算机领域中使用的一种嵌入技术,用于传递负面的提示或信息。这种技术通常被应用于各种机器学习和自然语言处理的任务中,以帮助系统更好地理解和处理负面情感或含义。负向嵌入的应用范围非常广泛,可以在情感分析、舆情监控和其他相关领域中发挥重要作用。

Negative Prompt

Negative Prompt是指向文本到图像AI模型输入的文本,用于描述您不希望在图像中出现的内容。

Noise schedule

Noise schedule是指在采样过程中确定图像应该具有多少噪声的过程。它代表了采样器试图达到的预期噪声水平。

Prompt

Prompt是指如何描述文本输入到图像人工智能模型的过程,以及描述你期望在输出图像中看到的内容。

Prompt schedule

Prompt schedule是用在给定采样步骤中使用的提示。Stable diffusion允许每个采样步骤中的prompt都是不同的。

Regional prompter

Regional prompter是一种实用的扩展,它可以让您为图像的不同部分指定不同的提示信息。这个功能可以帮助用户更轻松地理解图像内容,并且提供更丰富的用户体验。想象一下,在一张包含多个人物的图片中,您可以为每个人物添加独特的提示,让用户可以更方便地了解每个人物的信息。这种个性化的提示功能可以大大提升用户对图片的交互体验。

Sampling Method/Sampler

采样方法或采样器是Stable diffusion中用来去除图像噪音的技术。它可能会对渲染速度产生影响,并对最终图像产生微妙的影响。

Sampling steps

Sampling steps指的是采样器进行离散化降噪时所经过的步骤数量。步骤数量的增加会提高结果的质量,但也会增加处理时间。建议将步骤设置至少为20。

SD.Next

SD.Next是一个免费的开源Stable diffusion软件,可以在您的计算机本地安装。它是基于AUTOMATIC6666661开发的,许多AUTOMATIC6666661的扩展也可以与SD.Next兼容并且可以同时使用。

SDXL

SDXL代表Stable Diffusion XL。它是一个带有本地分辨率为1024×1024的Stable Diffusion模型,比Stable Diffusion v1.5高出4倍。

SDXL Turbo

SDXL Turbo是经过Turbo训练方法训练的SDXL模型。它能够将图像生成时间缩短约3倍。

Stable Diffusion

Stable Diffusion是指将自然语言输入转换为图像的文本到图像人工智能模型。它采用了具有frozen language encoder的潜在扩散模型。

Stable diffusion v1.4

Stable diffusion v1.4 是Stable diffusion模型的首个正式版本,于2022年8月正式发布。该版本默认图像尺寸为512×512像素,为用户提供了更加稳定和高效的扩散模型体验。

Stable diffusion v1.5

Stable diffusion v1.5 是在 v1.4 的基础上进行了一些改进。虽然改进的细节并不十分明显,但用户们已经开始广泛使用 v1.5。新版本的默认图片尺寸为 512×512 像素,带来了更好的视觉体验。这个改进为用户带来了更加流畅的使用体验,并且在性能方面也有所提升。

Stable diffusion v2

Stable diffusion v2 是 v1 模型的升级版,拥有更大的画面尺寸,达到了 768×768。该模型在遵循提示方面更加严格,使得提示更加具有挑战性。v2 模型有两个版本:v2 和 v2.1。

然而,随着时间的推移,v2 模型逐渐被用户遗忘,目前使用它们的人数非常有限。

Stable diffusion XL

Stable diffusion XL 是一个全新的Stable diffusion模型,相比Stable diffusion v1.5 模型,它能够生成更高质量、更大尺寸的图片。这意味着用户可以获得更加清晰、更具有影响力的图像。这一更新将为用户带来更好的使用体验,为他们的工作和创作提供更多可能性。

Stable Zero123

Stable Zero123是一种可靠的扩散模型,能够生成物体的全新视角或3D模型。

Textual inversion

Textual inversion是一种在检查点模型中注入自定义主题或风格的方法。它通过创建一个新的关键字来施加影响,生成的结果被称为嵌入。这个嵌入是一个小型文件。

与Dreambooth、LoRA和LyCORIS相比,Textual inversion不会对检查点模型进行修改,因此其影响较小。

文字转图片 (txt2img)

文字转图片是指将文字提示转换成图片的过程。这项技术可以让用户将文字信息转化为视觉形式,使得信息更加直观和易于理解。例如,在设计中,可以将文本标题转换为吸引人的图片,增加页面的吸引力和可读性。另外,文字转图片还可以应用在验证码生成、海报设计、个性化图片制作等多个领域。

Trigger keyword

在Dreambooth模型的训练中,我们使用关键词来触发特定的操作。你需要在使用Dreambooth修改的检查点模型的提示符中使用trigger关键字。

变分自编码器(VAE)

变分自编码器(VAE)是一种神经网络,被用来在图像的像素空间和潜在空间之间进行转换。它是一种强大的工具,能够有效地学习和表示图像的特征,为图像处理和生成提供了新的可能性。

U-Net

U-Net是一种神经网络,用于在每个采样步骤中预测噪音。它在Stable diffusion模型中扮演着重要的角色。一些微调方法,如LoRA和超网络,的原理就是修改U-Net。

UniPC

UniPC(Unified Predictor-Corrector)是一种全新的采样器。受到ODE求解器的预测-校正方法的启发,它能够在经过5-10步之后生成高质量的图像。

Upscaler

Upscaler通常利用插值算法来增加图像的像素数量,从而使图像变得更加清晰。常见的插值算法包括双线性插值、双三次插值等,它们能够有效地增加图像的分辨率,提高图像的质量。