沉浸式体验Stability AI文生图、图生图、图片PS功能(中篇)

news2024/9/24 21:20:00

今天小李哥就来介绍亚马逊云科技推出的国际前沿人工智能模型平台Amazon Bedrock上的Stability Diffusion模型开发生成式AI图像生成应用!本系列共有3篇,在上篇中我们学习了如何在亚马逊云科技控制台上体验该模型的每个特色功能,如文生图、图生图、图像修复等。

接下来在中篇中我将带大家沉浸式实操通过API调用的方式访问Stability Difussion模型,体验该模型的特色功能。大家可以通过本博客中的实操项目自己学习AI技能,并应用到日常工作中。也欢迎大家继续关注本系列第三篇,通过Stability Difussion模型API调用的方式,开发一个属于自己的图片生成网页应用。

方案所需基础知识

什么是Amazon Bedrock

Amazon Bedrock 是一项完全托管的服务,通过统一的 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型(FMs),同时提供广泛的功能,让开发者能够在确保安全、隐私和负责任 AI 的前提下构建生成式 AI 应用。使用 Amazon Bedrock,开发者们可以:

轻松地测试、评估开发者的用例在不同基础模型下的表现;

  1. 使用微调和检索增强生成(RAG)等技术定制化开发应用程序;
  2. 构建可以使用开发者的企业系统和数据源自动执行任务的智能 Agents。
  3. 由于 Amazon Bedrock 是 Serverless 的服务,开发者无需管理任何基础设施,并且可以使用开发者已经熟悉其它的亚马逊云科技服务安全地集成和部署生成式 AI 功能到开发者的应用中。

什么是 Stability AI 模型?

Stability AI 是一家致力于开发和提供生成式人工智能模型的公司,其模型被广泛应用于图像生成领域。Stability AI 的模型中最著名的莫非是 Stable Diffusion 生成模型,能够根据用户输入的描述,自动生成高度逼真的图像和文本。这些模型以其卓越的生成能力和灵活性,在应用开发中管饭应用和认可。

Stability AI 模型的应用场景

创意设计:

Stability AI 的生成模型广泛应用于创意设计领域,帮助设计师和美工快速生成高质量的图像、插画和视觉内容,可以用于产品展示、品牌推广,社交媒体内容创作。通过简单的文本描述,就可以快速生成符合特定主题或风格的视觉素材,大大提升了设计效率和创意表现力。

游戏开发:

Stability AI 的图像生成技术也被广泛应用于游戏开发中。开发者可以利用这些模型快速生成游戏场景、角色设计和道具,节省大量的美术资源,并加速游戏开发。利用AI的图像生成能力,使得小型开发团队也能够制作出富有视觉冲击力的游戏内容。

教育和培训:

在教育和培训领域,Stability AI 模型能够根据教学需求生成个性化的学习材料和培训教案,帮助教师和培训师提高教学效果,特别是生成式AI相关的主题培训,提升学习者的参与度和学习体验。

本实践包括的内容

1. 通过Amazon Bedrock API调用的方式体验文生图功能

2. 通过Amazon Bedrock API调用的方式体验和图像修复功能

3. 通过Amazon Bedrock API调用的方式体验图生图功能

功能实践具体步骤

文生图功能

1. 首先我们了解Stability模型的文生图推理参数,以Stability AI SDXL 1.0为例,模型参数共分为必要参数和可选参数。

必要参数有:

参数描述最低值最高值
text_prompts生成文本提示数组,包含提示及权重02000

可选参数有:

参数描述默认值最低值最高值可选值
weight模型应用于提示的权重1
cfg_scale决定最终图像对提示的描绘程度7035
clip_guidance_preset预设参数FAST_BLUE, FAST_GREEN, NONE, SIMPLE SLOW, SLOWER, SLOWEST
height生成图像的高度1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, 896x1152
width生成图像的宽度1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, 896x1152
sampler扩散过程采样器DDIM, DDPM, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS
samples要生成的图像数量111
seed决定初始噪声设置的种子004294967295
steps生成步骤数,影响采样次数和结果准确度301050
style_preset将图像模型向特定样式引导的样式预设3d-model, analog-film, anime, cinematic, comic-book, digital-art, enhance, fantasy-art, isometric, line-art, low-poly, modeling-compound, neon-punk, origami, photographic, pixel-art, tile-texture

实操代码:

首先我们利用Amazon Bedrock API生成推理图片,确认已安装”boto3“、”PIL“和”botocore“等必要依赖,以下为实例代码(具体的代码解释在代码备注中):

import base64
import io
import json
import os
import sys

import boto3
from PIL import Image
import botocore

boto3_bedrock = boto3.client('bedrock-runtime')

prompt = "a beautiful mountain landscape" #提示词
negative_prompts = [
    "poorly rendered",
    "poor background details",
    "poorly drawn mountains",
    "disfigured mountain features",
]#负向提示词列表,用于指定不希望在生成的图片中出现的特征
style_preset = "photographic"  #风格预设,用于指定生成图片的风格。在这里,选择了“photographic”风格,意味着生成的图片将具有类似摄影照片的效果。 (e.g. photographic, digital-art, cinematic, ...)
clip_guidance_preset = "FAST_GREEN" #这是 Clip 引导预设,用于控制图像生成过程中的一些参数和行为。"FAST_GREEN" 是一种预设选项,可能会影响生成速度和结果的某些方面。 (e.g. FAST_BLUE FAST_GREEN NONE SIMPLE SLOW SLOWER SLOWEST)
sampler = "K_DPMPP_2S_ANCESTRAL" # 这是采样器的选择,用于确定在生成图片时使用的采样方法。"K_DPMPP_2S_ANCESTRAL" 是一种具体的采样器,不同的采样器可能会对生成的图片质量和多样性产生影响。(e.g. DDIM, DDPM, K_DPMPP_SDE, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS)
width = 768 #这是设置生成图片的宽度,单位为像素。这里指定宽度为 768 像素

request = json.dumps({
    "text_prompts": (
        [{"text": prompt, "weight": 1.0}]
        + [{"text": negprompt, "weight": -1.0} for negprompt in negative_prompts]
    ),
    "cfg_scale": 5,
    "seed": 42,
    "steps": 60,
    "style_preset": style_preset,
    "clip_guidance_preset": clip_guidance_preset,
    "sampler": sampler,
    "width": width,
})
modelId = "stability.stable-diffusion-xl-v1"

response = boto3_bedrock.invoke_model(body=request, modelId=modelId)
response_body = json.loads(response.get("body").read())

print(response_body["result"])
base_64_img_str = response_body["artifacts"][0].get("base64")
print(f"{base_64_img_str[0:80]}...")

os.makedirs("data", exist_ok=True)
image_1 = Image.open(io.BytesIO(base64.decodebytes(bytes(base_64_img_str, "utf-8"))))
image_1.save("data/image_1.jpg")

推理结果

我们输入的提示词为”a beautiful mountain landscape“,生成一个漂亮的山景图,我们得到生成的图片:

图生图功能:

我们接下来了解Stability模型的图生图推理参数,以Stability AI SDXL 1.0为例,模型参数共分为必要参数和可选参数。

必要参数

参数描述最低值最高值
text_prompts生成文本提示数组,包含提示及权重02000

可选参数

参数描述默认值最低值最高值可选值
weight模型应用于提示的权重1
cfg_scale决定最终图像对提示的描绘程度7035
clip_guidance_preset预设参数FAST_BLUE, FAST_GREEN, NONE, SIMPLE SLOW, SLOWER, SLOWEST
height生成图像的高度1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, 896x1152
width生成图像的宽度1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, 896x1152
sampler扩散过程采样器DDIM, DDPM, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS
samples要生成的图像数量111
seed决定初始噪声设置的种子004294967295
steps生成步骤数,影响采样次数和结果准确度301050
style_preset将图像模型向特定样式引导的样式预设3d-model, analog-film, anime, cinematic, comic-book, digital-art, enhance, fantasy-art, isometric, line-art, low-poly, modeling-compound, neon-punk, origami, photographic, pixel-art, tile-texture
extras传递给引擎的额外参数

实操代码

我们利用Amazon Bedrock API基于现有图片生成图片推理,确认已安装”boto3“、”PIL“和”botocore“等必要依赖,以下为实例代码(具体的代码解释在代码备注中):

import base64
import io
import json
import os
import sys

import boto3
from PIL import Image
import botocore


def image_to_base64(img) -> str:
    """Convert a PIL Image or local image file path to a base64 string for Amazon Bedrock"""
    if isinstance(img, str):
        if os.path.isfile(img):
            print(f"Reading image from file: {img}")
            with open(img, "rb") as f:
                return base64.b64encode(f.read()).decode("utf-8")
        else:
            raise FileNotFoundError(f"File {img} does not exist")
    elif isinstance(img, Image.Image):
        print("Converting PIL Image to base64 string")
        buffer = io.BytesIO()
        img.save(buffer, format="jpeg")
        return base64.b64encode(buffer.getvalue()).decode("utf-8")
    else:
        raise ValueError(f"Expected str (filename) or PIL Image. Got {type(img)}")

boto3_bedrock = boto3.client('bedrock-runtime')

img_path = '../image/data/image_1.jpg'
# 打开图片
img = Image.open(img_path)

init_image_b64 = image_to_base64(img)
print(init_image_b64[:80] + "...")

change_prompt = "add denser number of trees, extend lake"
negative_prompts = [
    "poorly rendered",
    "poor background details",
    "poorly drawn mountains",
    "disfigured mountain features",
]#负向提示词列表,用于指定不希望在生成的图片中出现的特征
style_preset = "cinematic"  #风格预设,用于指定生成图片的风格。在这里,选择了“photographic”风格,意味着生成的图片将具有类似摄影照片的效果。 (e.g. photographic, digital-art, cinematic, ...)
clip_guidance_preset = "FAST_BLUE" #这是 Clip 引导预设,用于控制图像生成过程中的一些参数和行为。"FAST_GREEN" 是一种预设选项,可能会影响生成速度和结果的某些方面。 (e.g. FAST_BLUE FAST_GREEN NONE SIMPLE SLOW SLOWER SLOWEST)
sampler = "K_DPMPP_2S_ANCESTRAL" # 这是采样器的选择,用于确定在生成图片时使用的采样方法。"K_DPMPP_2S_ANCESTRAL" 是一种具体的采样器,不同的采样器可能会对生成的图片质量和多样性产生影响。(e.g. DDIM, DDPM, K_DPMPP_SDE, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS)
width = 768 #这是设置生成图片的宽度,单位为像素。这里指定宽度为 768 像素

request = json.dumps({
    "text_prompts": (
        [{"text": change_prompt, "weight": 1.0}]
        + [{"text": negprompt, "weight": -1.0} for negprompt in negative_prompts]
    ),
    "cfg_scale": 10,
    "init_image": init_image_b64,
    "seed": 321,
    "start_schedule": 0.6,
    "steps": 50,
    "style_preset": style_preset,
    "clip_guidance_preset": clip_guidance_preset,
    "sampler": sampler,
})
modelId = "stability.stable-diffusion-xl-v1"

response = boto3_bedrock.invoke_model(body=request, modelId=modelId)
response_body = json.loads(response.get("body").read())

print(response_body["result"])
image_2_b64_str = response_body["artifacts"][0].get("base64")
print(f"{image_2_b64_str[0:80]}...")

os.makedirs("data", exist_ok=True)
image_2 = Image.open(io.BytesIO(base64.decodebytes(bytes(image_2_b64_str, "utf-8"))))
image_2.save("data/image_2.jpg")

 推理结果

我们输入的提示词为”add denser number of trees, extend lake”,为现有图片添加一片茂密的树林和一个湖泊,我们得到生成的图片:

图片编辑功能

我们接下来了解Stability模型的图片编辑推理参数,主要是利用新生成的图片替换原图片中的蒙版部分,以Stability AI SDXL 1.0为例,模型参数共分为必要参数和可选参数。

必要参数

参数描述最低值最高值
text_prompt用于生成的文本提示数组02000
init_image初始化扩散过程的base64编码图像
mask_source确定蒙版来源
mask_image用作init_image中源图像蒙版的base64编码

可选参数

参数默认值最低值最高值描述和可选值
weight1模型应用于提示的权重。
cfg_scale7035确定最终图像对提示的描绘程度。
clip_guidance_preset模型生成图像流程的预设参数。可选值:FAST_BLUE, FAST_GREEN, NONE, SIMPLE, SLOW, SLOWER, SLOWEST。
sampler扩散过程的采样器。可选值:DDIM, DDPM, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS。
samples111生成图像的数量。
seed004294967295初始化噪声设置的种子。
steps301050对图像进行采样的生成步骤数。
style_preset图像模型特定样式的预设。可选值:3d-model, analog-film, anime, cinematic, comic-book, digital-art, enhance, fantasy-art, isometric, line-art, low-poly, modeling-compound, neon-punk, origami, photographic, pixel-art, tile-texture。
extras引擎的额外参数。注意:'extras'参数用于开发中或实验性功能,可能会有变更,应谨慎使用。

实操代码

我们利用Amazon Bedrock API进行图像编辑功能,确认已安装”boto3“、”PIL“和”botocore“等必要依赖,以下为实例代码(具体的代码解释在代码备注中):

import base64
import io
import json
import os
import sys

import boto3
from PIL import Image
import botocore

from PIL import ImageOps

def image_to_base64(img) -> str:
    """Convert a PIL Image or local image file path to a base64 string for Amazon Bedrock"""
    if isinstance(img, str):
        if os.path.isfile(img):
            print(f"Reading image from file: {img}")
            with open(img, "rb") as f:
                return base64.b64encode(f.read()).decode("utf-8")
        else:
            raise FileNotFoundError(f"File {img} does not exist")
    elif isinstance(img, Image.Image):
        print("Converting PIL Image to base64 string")
        buffer = io.BytesIO()
        img.save(buffer, format="jpeg")
        return base64.b64encode(buffer.getvalue()).decode("utf-8")
    else:
        raise ValueError(f"Expected str (filename) or PIL Image. Got {type(img)}")

def inpaint_mask(img, box):
    """Generates a segmentation mask for inpainting"""
    img_size = img.size
    assert len(box) == 4  # (left, top, right, bottom)
    assert box[0] < box[2]
    assert box[1] < box[3]
    return ImageOps.expand(
        Image.new(
            mode = "RGB",
            size = (
                box[2] - box[0],
                box[3] - box[1]
            ),
            color = 'black'
        ),
        border=(
            box[0],
            box[1],
            img_size[0] - box[2],
            img_size[1] - box[3]
        ),
        fill='white'
    )
    
img_path = '../image_to_image/data/image_2.jpg'
# 打开图片
image_2 = Image.open(img_path)

img2_size = image_2.size
box = (
        (0),
        (img2_size[1] - 900) ,
        (img2_size[0]),
        img2_size[1] - 700
    )

# Mask
mask = inpaint_mask(
    image_2,
    box
)

# Debug
mask

boto3_bedrock = boto3.client('bedrock-runtime')

inpaint_prompt = "add a helicopter"#添加一架直升机
style_preset = "cinematic"  #风格预设,用于指定生成图片的风格。在这里,选择了“photographic”风格,意味着生成的图片将具有类似摄影照片的效果。 (e.g. photographic, digital-art, cinematic, ...)
clip_guidance_preset = "FAST_BLUE" #这是 Clip 引导预设,用于控制图像生成过程中的一些参数和行为。"FAST_GREEN" 是一种预设选项,可能会影响生成速度和结果的某些方面。 (e.g. FAST_BLUE FAST_GREEN NONE SIMPLE SLOW SLOWER SLOWEST)
sampler = "K_DPMPP_2S_ANCESTRAL" # 这是采样器的选择,用于确定在生成图片时使用的采样方法。"K_DPMPP_2S_ANCESTRAL" 是一种具体的采样器,不同的采样器可能会对生成的图片质量和多样性产生影响。(e.g. DDIM, DDPM, K_DPMPP_SDE, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN, K_LMS)
width = 768 #这是设置生成图片的宽度,单位为像素。这里指定宽度为 768 像素
request = json.dumps({
    "text_prompts":[{"text": inpaint_prompt}],
    "init_image": image_to_base64(image_2),
    "mask_source": "MASK_IMAGE_BLACK",
    "mask_image": image_to_base64(mask),
    "cfg_scale": 10,
    "seed": 32123,
    "style_preset": style_preset,
})

modelId = "stability.stable-diffusion-xl-v1"

response = boto3_bedrock.invoke_model(body=request, modelId=modelId)
response_body = json.loads(response.get("body").read())

print(response_body["result"])
image_3_b64_str = response_body["artifacts"][0].get("base64")

os.makedirs("data", exist_ok=True)
inpaint = Image.open(io.BytesIO(base64.decodebytes(bytes(image_3_b64_str, "utf-8"))))
inpaint.save("data/inpaint.jpg")

推理结果

我们输入的提示词为"add a helicopter",为现有图片在指定蒙版涂黑区域(图像底部向上900像素和700像素之间的正中间部分)添加一个直升机图像,我们得到生成的图片:

 

以上就是在亚马逊云科技控制台中沉浸式体验Amazon Bedrock的Stability AI模型、并利用该图像生成模型API开发生成式AI应用,应用到开发者日常开发工作中的下篇内容。欢迎大家关注小李哥的亚马逊云科技AI服务深入调研系列,未来获取更多国际前沿的AWS云开发/云架构方案。 

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

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

相关文章

Vue setup语法糖

未使用setup语法糖 <script lang"ts">export default {name: "App",setup() {let name "张三"let age 20function handleClick() {age 1}return {name,age,handleClick,}}} </script><template><div class"class&…

基于django+vue+uniapp的摄影竞赛小程序

开发语言&#xff1a;Python框架&#xff1a;djangouniappPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员主界面 教师管理 学…

open3d无法读取的obj点云文件处理方案

open3d无法读取的obj点云文件处理方案 open3d读取obj文件什么原因解决方案导入选择点云文件选择 file -> save->保存格式解决 数据下载 open3d读取obj文件 import open3d as o3dif __name__ __main__:# 读取obj文件mesh o3d.io.read_triangle_mesh(r/home/gj/gj/open3…

【DCVRP】元启发式算法进一步优化

为什么加入元启发式算法&#xff1f; DCVRP-IMGR的求解质量可以快速的达到10%之内&#xff0c;但在DCVRP_IMGR生成方案完成后至下一个动态事件发生之间存在一段时间&#xff0c;当动态事件发生的非常频繁&#xff0c;这段时间可能会非常短暂&#xff0c;然而动态事件发生得不是…

mmitmproxy 抓包工具使用

mitmproxy 抓包工具使用 前言 本章内容均来自&#xff0c;《Python3 网络爬虫开发实战》- 崔庆才&#xff0c;在学习过程中&#xff0c;遇到写问题故此记录一下 学习本文章前确保准备好如下内容&#xff1a; 安装并成功运行 mumu 安卓模拟器 mitmproxy 介绍 mitmproxy是一…

【小记】excel函数 vlookup,hyperlink,批量修改文件名称

统计是否缺少文件【hlook函数】&#xff0c;超链接到对应文件【hyperlink函数】&#xff0c;批量修改文件名称 统计是否缺少文件【hlook函数】step1&#xff1a;路径复制进表格step2&#xff1a;处理文件名称step3&#xff1a;使用vlookup函数 超链接到对应文件【hyperlink函数…

【MySQL】插入优化篇——(少量插入数据优化&批量插入数据load指令)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

axios响应

一.axios请求配置项(axios在调用时所接收的参数对象&#xff09; 以下是请求时可用的配置选项&#xff0c;只有url是必须的&#xff0c;如果没有指定method&#xff0c;请求将默认使用get方法 { // url 是用于请求的服务器 URL url: "/user", // method 是创建请…

二叉树的相关oj题目 — java实现

二叉树的所有相关oj题 题目翻转二叉树判断两颗树是否相同对称二叉树判断一棵二叉树是否为另一颗的子树平衡二叉树方法1&#xff1a;方法2&#xff1a;&#xff08;更快&#xff09; 二叉树的层序遍历二叉树的层序遍历II最近公共祖先方法1&#xff1a;方法2&#xff1a; 二叉树的…

实操经验 | Apache 基金会顶级项目版本管理和发布流程

前言 前段时间&#xff0c;Apache SeaTunnel经过几个月的迭代和架构升级&#xff0c;终于迎来第一个正式2.3.0版本&#xff0c;我也有幸作为本次的Release Manager&#xff0c;体验了一把从0到1的Apache发版流程&#xff0c;不得不说Apache基金会在项目的版本管理这块有着完善…

从报名到领证:软考中级系统集成项目管理工程师考试全流程指南

本文共计11564字&#xff0c;预计阅读38分钟。包括七个篇章&#xff1a;报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求&#xff1a; 1.凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术…

数字化转型的内容框架解析,附华为数字化转型内容框架及方法论

数字化转型的内容框架是一个系统性、多维度的体系&#xff0c;旨在通过数字技术的融入和应用&#xff0c;对传统业务、流程和模式进行重构、升级&#xff0c;以提升效率、创造更多价值。以下是对数字化转型内容框架的详细阐述&#xff1a; 一、总体要求 数字化转型的总体要求…

07:为电源和GND分配网络颜色

1.创建电源类和GND类 2为电源和GND分配颜色

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件(含基础Demo)

一、编辑Tab顺序 点击下面这个按钮后&#xff0c;按控件调整tab的顺序&#xff0c;设置好后&#xff0c;鼠标聚焦在输入框1中&#xff0c;按一下tab鼠标聚焦会跳到下一个输入框中 编辑tab结束后&#xff0c;按下面这个按钮重新返回页面布局 二、编辑伙伴 &#xff08;删除伙伴…

会声会影和剪映哪个好?会声会影和剪映对比详解,视频剪辑软件推荐

随着社交媒体和网络视频的发展&#xff0c;在线视频编辑工具也变得越来越受欢迎。在视频编辑软件中&#xff0c;会声会影和剪映都是非常受欢迎的选择。它们都具有用户友好的界面和强大的功能&#xff0c;可以满足不同用户的需求。那么&#xff0c;哪一个软件更好呢&#xff1f;…

【OpenCV】初步认识 OpenCV

文章目录 1. OpenCV 简介 1. OpenCV 简介 &#x1f427;OpenCV是应用广泛的开源图像处理库。OpenCV用C语言编写&#xff0c;它具有C、Java、Pyhthon等接口&#xff0c;并支持Windows、Linux、Android&#xff0c;OpenCV主要倾向于实时视觉应用领域。 OpenCV应用领域&#xff1…

华为云征文|部署内容管理系统 Joomla

华为云征文&#xff5c;部署内容管理系统 Joomla 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 核心竞争力 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Joomla3.1 Joomla 介绍3.2 Docker 环境搭建3.3 Joomla 部署3.4 Joom…

谈一谈JVM的GC(垃圾回收)

JVM&#xff08;Java Virtual Machine&#xff09;的GC&#xff08;Garbage Collection&#xff0c;垃圾回收&#xff09;是Java语言的一个重要特性&#xff0c;它负责自动管理内存&#xff0c;释放那些不再被使用的对象所占用的内存空间。以下是对JVM GC的详细介绍&#xff1a…

Nginx: 使用KeepAlived配置实现虚IP在多服务器节点漂移及Nginx高可用原理

使用KeepAlived配置实现虚IP在多服务器节点漂移 1 &#xff09;环境准备 2台 linux , 一主一备 节点1&#xff1a;192.168.184.30 CentOS 7 Master节点2&#xff1a;192.168.184.40 CentOS 7 BackupVIP 192.168.184.50 安装 KeepAlived, $ yum install keepalived 注意&#x…

前端源码解读:前端小白也能轻松理解的axios源码

作为前端开发的小伙伴&#xff0c;你肯定对 axios 这个超级好用的 HTTP 请求库不陌生吧&#xff1f;它不仅操作简单&#xff0c;功能还特别强大&#xff0c;难怪大家都爱用&#xff01;但你知道吗&#xff1f;axios 的魅力可不仅仅在于它的好用&#xff0c;真正让人佩服的是它源…