主頁 >  其他 > 繪畫手殘黨的福音:涂鴉線稿秒變絕美影像

繪畫手殘黨的福音:涂鴉線稿秒變絕美影像

2023-05-06 08:02:04 其他

摘要:涂鴉線稿秒變絕美影像,ControlNet-Scribble2Img適配華為云ModelArts,提供更加便利和創新的影像生成體驗,將你的想象變為真實的影像,

本文分享自華為云社區《AIGC拯救手殘黨:涂鴉線稿秒變絕美影像》,作者:Emma_Liu ,

ControlNet

什么是ControlNet?簡而言之,文本到影像的生成涉及使用預訓練的擴散模型來生成基于某些文本的影像,

從輸入影像中提取特定資訊的程序稱為注釋(在paper中)或預處理(在 ControlNet extension中),
這個擴散模型是在數十億張圖片上預訓練的,當我們輸入文字時,模型會根據輸入的內容生成一張圖片,然而,有時輸出結果與我們的意圖并不完全一致,這就是ControlNet的作用…

ControlNet最早是在L.Zhang等人的論文《Adding Conditional Control to Text-to-Image Diffusion Model》中提出的,目的是提高預訓練的擴散模型的性能,特別是,在預訓練的擴散模型中加入另一個神經網路模型(ControlNet),使我們對輸出有更多的控制,

ControlNet 的作業原理是將可訓練的網路模塊附加到穩定擴散模型的U-Net (噪聲預測器)的各個部分,Stable Diffusion 模型的權重是鎖定的,在訓練程序中它們是不變的,在訓練期間僅修改附加模塊,

研究論文中的模型圖很好地總結了這一點,最初,附加網路模塊的權重全部為零,使新模型能夠利用經過訓練和鎖定的模型,

訓練 ControlNet 包括以下步驟:

  1. 克隆擴散模型的預訓練引數,如Stable Diffusion的潛在UNet,(稱為 “可訓練副本”),同時也單獨保留預訓練的引數(“鎖定副本”),這樣做是為了使鎖定的引數副本能夠保留從大型資料集中學習到的大量知識,而可訓練的副本則用于學習特定的任務方面,
  2. 引數的可訓練副本和鎖定副本通過 "零卷積 "層連接,該層作為ControlNet框架的一部分被優化,這是一個訓練技巧,在訓練新的條件時,保留凍結模型已經學會的語意,
    從圖上看,訓練ControlNet是這樣的:

ControlNet提供了八個擴展,每個擴展都可以對擴散模型進行不同的控制,這些擴展是Canny, Depth, HED, M-LSD, Normal, Openpose, Scribble, and Semantic Segmentation.

ControlNet-Scribble2img

Scribble 用于預處理用戶繪制的涂鴉, 這個預處理程式不應該用在真實的影像上,由于它能夠根據簡單的草圖生成令人驚嘆、逼真或改進的影像,理想情況下,不需要任何提示,通過輸入一個基本的圖畫,模型可以推斷出細節和紋理,從而產生一個更高質量的影像,

下面是用ModelArts的Notebook適配Scribble2img生成的幾幅圖,一起來看看吧,

浮世繪風格的海浪 || 滿天繁星 || 小兔子和蘿卜

發光水母||一筐橙子||小花喵||微笑的太陽

嘗試用自己畫的素描生成,效果也不錯

接下來讓我們從零開始,在ModelArts上一起來體驗Scribble2img涂鴉生圖的樂趣吧,

涂鴉生成影像 ControlNet-Scribble2img

本文介紹如何在ModelArts來實作 ControlNet-Scribble2img 涂鴉生成影像,

AI Gallery - Notebook鏈接:拯救手殘黨:AI涂鴉一鍵成圖 (huaweicloud.com)

前言

ModelArts 是面向開發者的一站式 AI 開發平臺,為機器學習與深度學習提供海量資料預處理及互動式智能標注、大規模分布式訓練、自動化模型生成,及端-邊-云模型按需部署能力,幫助用戶快速創建和部署模型,管理全周期 AI 作業流,

前期準備

在使用ModelArts之前,需要進入華為云官網 https://www.huaweicloud.com/ ,然后注冊華為云賬號,再進行實名認證,主要分為3步(注冊–>實名認證–>服務授權)(如有已完成部分,請忽略)

點去完成 實名認證,賬號型別選"個人",個人認證型別推薦使用"掃碼認證",

進入ModelArts 控制臺資料管理頁面,上方會提示訪問授權,點擊【服務授權】按鈕,按下圖順序操作:

注意事項

  • 本案例需使用 Pytorch-1.8 GPU-P100 及以上規格運行;
  • 點擊Run in ModelArts,將會進入到ModelArts CodeLab中,如果您沒有登錄需要進行登錄, 登錄之后,等待片刻,即可進入到CodeLab的運行環境;
  • 出現 Out Of Memory ,請檢查是否為您的引數配置過高導致,修改引數配置,重啟kernel或更換更高規格資源進行規避;
  • 運行代碼方法:點擊本頁面頂部選單欄的三角運行按鈕或按Ctrl+Enter或cell左側三角按鈕運行每個方塊中的代碼;
  • 如果您是第一次使用 JupyterLab,請查看《ModelArts JupyterLab使用指導》了解使用方法;
  • 如果您在使用 JupyterLab 程序中碰到報錯,請參考《ModelArts JupyterLab常見問題解決辦法》嘗試解決問題,

 

1.環境設定

check GPU & 拷貝代碼及資料

為了更快的準備資料和模型,將其轉存在了華為云OBS中,方便大家使用,

!nvidia-smi
import os
import moxing as mox
parent = "/home/ma-user/work/ControlNet"
bfp = "/home/ma-user/work/ControlNet/openai/clip-vit-large-patch14/pytorch_model.bin"
sfp = "/home/ma-user/work/ControlNet/models/control_sd15_scribble.pth"
if not os.path.exists(parent):
 mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet',parent)
 if os.path.exists(parent):
 print('Download success')
 else:
        raise Exception('Download Failed')
elif os.path.exists(bfp)==False or os.path.getsize(bfp)!=1710671599: 
 mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet/openai/clip-vit-large-patch14/pytorch_model.bin', bfp)
elif os.path.exists(sfp)==False or os.path.getsize(sfp)!=5710757851: 
 mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet/models/control_sd15_scribble.pth', sfp)
else:
 print("Model Package already exists!")

安裝庫,大約耗時1min,請耐心等待,

%cd /home/ma-user/work/ControlNet
!pip uninstall torch torchtext -y
!pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 
!pip install omegaconf==2.1.1 einops==0.3.0
!pip install pytorch-lightning==1.5.0
!pip install transformers==4.19.2 open_clip_torch==2.0.2
!pip install gradio==3.24.1
!pip install translate==3.6.1

2. 加載模型

導包并加載模型,加載約40s,請耐心等待,

import numpy as np
from PIL import Image as PilImage
import cv2
import einops
import matplotlib.pyplot as plt
from IPython.display import HTML, Image
from base64 import b64decode
from translate import Translator
import torch
from pytorch_lightning import seed_everything
import config
from cldm.model import create_model, load_state_dict
from ldm.models.diffusion.ddim import DDIMSampler
from annotator.util import resize_image, HWC3
model = create_model('./models/cldm_v15.yaml')
model.load_state_dict(load_state_dict('./models/control_sd15_scribble.pth', location='cuda'))
model = model.cuda()
ddim_sampler = DDIMSampler(model)

3. 涂鴉生成影像

涂鴉生成影像函式定義

def process(input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta):
    trans = Translator(from_lang="ZH",to_lang="EN-US")
    prompt = trans.translate(prompt)
 a_prompt = trans.translate(a_prompt)
 n_prompt = trans.translate(n_prompt)
 guess_mode = False
    # 影像預處理
 with torch.no_grad():
 if type(input_image) is str:
 input_image = np.array(PilImage.open(input_image))
 img = resize_image(HWC3(input_image), image_resolution)
 else:
 img = resize_image(HWC3(input_image['mask'][:, :, 0]), image_resolution)  # scribble
 H, W, C = img.shape
        # 初始化檢測映射
 detected_map = np.zeros_like(img, dtype=np.uint8)
 detected_map[np.min(img, axis=2) > 127] = 255
        control = torch.from_numpy(detected_map.copy()).float().cuda() / 255.0
        control = torch.stack([control for _ in range(num_samples)], dim=0)
        control = einops.rearrange(control, 'b h w c -> b c h w').clone()
        # 設定隨機種子
 if seed == -1:
            seed = random.randint(0, 65535)
 seed_everything(seed)
 if config.save_memory:
 model.low_vram_shift(is_diffusing=False)
 cond = {"c_concat": [control], "c_crossattn": [model.get_learned_conditioning([prompt + ', ' + a_prompt] * num_samples)]}
 un_cond = {"c_concat": None if guess_mode else [control], "c_crossattn": [model.get_learned_conditioning([n_prompt] * num_samples)]}
        shape = (4, H // 8, W // 8)
 if config.save_memory:
 model.low_vram_shift(is_diffusing=True)
        # 采樣
 model.control_scales = [strength * (0.825 ** float(12 - i)) for i in range(13)] if guess_mode else ([strength] * 13)  # Magic number. 
        samples, intermediates = ddim_sampler.sample(ddim_steps, num_samples,
                                                     shape, cond, verbose=False, eta=eta,
 unconditional_guidance_scale=scale,
 unconditional_conditioning=un_cond)
 if config.save_memory:
 model.low_vram_shift(is_diffusing=False)
        # 后處理
 x_samples = model.decode_first_stage(samples)
 x_samples = (einops.rearrange(x_samples, 'b c h w -> b h w c') * 127.5 + 127.5).cpu().numpy().clip(0, 255).astype(np.uint8)
        results = [x_samples[i] for i in range(num_samples)]
 return [255 - detected_map] + results

3.1設定引數,生成影像

在/home/ma-user/work/ControlNet/test_imgs/ 此路徑下,我們預置了一些線稿供您測驗,當然您可以自己上傳您的涂鴉畫至此路徑下,然后更改影像路徑及其他引數后,點擊運行,

引數說明

images:生成影像張數

img_path:輸入影像路徑,黑白稿

prompt:提示詞(建議填寫)

a_prompt:正面提示(可選,要附加到提示的其他文本)

n_prompt: 負面提示(可選)

image_resolution: 對輸入的圖片進行最長邊等比resize

scale:classifier-free引導比例

seed: 隨機種子

ddim_steps: 采樣步數,一般15-30,值越大越精細,耗時越長

eta: 控制在去噪擴散程序中添加到輸入資料的噪聲量,0表示無噪音,1.0表示更多噪音,eta對影像有微妙的、不可預測的影響,所以您需要嘗試一下這如何影響您的專案,

strength: 這是應用 ControlNet 的步驟數,它類似于影像到影像中的去噪強度,如果指導強度為 1,則 ControlNet 應用于 100% 的采樣步驟,如果引導強度為 0.7 并且您正在執行 50 個步驟,則 ControlNet 將應用于前 70% 的采樣步驟,即前 35 個步驟,

#@title Scribble2img 
img_path = "test_imgs/cat.jpg" #@param {type:"string"}
prompt = "小花貓" #@param {type:"string"}
num_samples = 1
# Added Prompt
a_prompt = "質量最好,非常詳細" #@param {type:"string"}
# Negative Prompt
n_prompt = "裁剪,質量最差,質量低" #@param {type:"string"}
image_resolution = 512 #@param {type:"raw", dropdown}
scale = 4.3 #@param {type:"slider", min:0.1, max:30, step:0.1}
seed = 1773327477 #@param {type:"slider", min:-1, max:2147483647, step:1}
eta = 0.02 #@param {type:"slider", min:-1.00, max:3.00, step:0.01}
ddim_steps = 15 #@param {type:"slider", min:1, max:100, step:1}
guess_mode = False
strength = 1.0
np_imgs = process(img_path, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta)
src = PilImage.fromarray(~np_imgs[0])
dst = PilImage.fromarray(np_imgs[1])
fig = plt.figure(figsize=(25, 10))
ax1 = fig.add_subplot(1, 2, 1)
plt.title('Scribble image', fontsize=16)
ax1.axis('off')
ax1.imshow(src)
ax2 = fig.add_subplot(1, 2, 2)
plt.title('Generate image', fontsize=16)
ax2.axis('off')
ax2.imshow(dst)
plt.show()

在右側有互動式控制元件,可以簡單調整引數,然后運行即可,等待生成,

3.2模型局限性以及可能的偏差

  • Prompt只支持中英文輸入,
  • 所提供的影像或簡筆畫過于簡單或意義不明確時,模型可能生成與上傳影像相關度低的物體或是一些無意義的前景物體,可以修改上傳影像重新嘗試,
  • 在一些場景下,描述Prompt不夠明確時,模型可能生成錯誤的前景物體,可以更改Prompt并生成多次,取效果較好的結果,

當所提供的影像或簡筆畫與描述Prompt相關度低或無關時,模型可能生成偏向影像或偏向Prompt的內容,也可能生成無意義的內容;因此建議描述Prompt與所上傳的影像緊密相關并且盡可能詳細,

4. Gradio可視化部署

如果想進行可視化部署,可以繼續以下步驟: Gradio應用啟動后可在下方頁面進行涂鴉生成影像,您也可以分享public url在手機端,PC端進行訪問生成影像,

4.1 ControlNet擴展說明

  • 影像畫布:您可以拖動設定畫布寬度和畫布高度,然后點擊 開啟畫布! 來創建一張空白畫布,
  • 調整筆刷進行繪畫
  • 輸入描述詞(推薦),點擊 Run
  • 高級選項(可選),您可點擊此選項卡,打開折疊部分,按照上述引數說明進行設定,設定完成后點擊 Run
import gradio as gr
# 畫布生成函式
def create_canvas(w, h):
 img = np.zeros(shape=(h-2, w-2, 3), dtype=np.uint8) + 255
 im = cv2.copyMakeBorder(img,1,1,1,1,cv2.BORDER_CONSTANT)
 return im
block = gr.Blocks().queue()
with block:
 with gr.Row():
 gr.Markdown("##  涂鴉生成影像 ")
 with gr.Row():
 with gr.Column():
 canvas_width = gr.Slider(label="畫布寬度", minimum=256, maximum=1024, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/512, step=1)
 canvas_height = gr.Slider(label="畫布高度", minimum=256, maximum=1024, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/512, step=1)
 create_button = gr.Button(label="Start", value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/'開啟畫布!')
 gr.Markdown(value='點擊下面右上角小鉛筆圖示,改變你的刷子寬度,讓它變的更細 (Gradio不允許開發人員設定畫筆寬度,因此需要手動設定) ')
 input_image = gr.Image(source='upload', type='numpy', tool='sketch')
 create_button.click(fn=create_canvas, inputs=[canvas_width, canvas_height], outputs=[input_image])
            prompt = gr.Textbox(label="Prompt")
 run_button = gr.Button(label="運行")
 with gr.Accordion("高級選項", open=False):
 num_samples = gr.Slider(label="Images", minimum=1, maximum=12, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/1, step=1)
 image_resolution = gr.Slider(label="Image Resolution", minimum=256, maximum=768, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/512, step=64)
                strength = gr.Slider(label="Control Strength", minimum=0.0, maximum=2.0, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/1.0, step=0.01)
 ddim_steps = gr.Slider(label="Steps", minimum=1, maximum=100, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/20, step=1)
                scale = gr.Slider(label="Guidance Scale", minimum=0.1, maximum=30.0, value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/9.0, step=0.1)
                seed = gr.Slider(label="Seed", minimum=-1, maximum=2147483647, step=1, randomize=True)
                eta = gr.Number(label="eta (DDIM)", value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/0.0)
 a_prompt = gr.Textbox(label="Added Prompt", value=https://www.cnblogs.com/huaweiyun/archive/2023/05/05/'質量最好,非常詳細')
 n_prompt = gr.Textbox(label="Negative Prompt",
                                      value='裁剪,質量最差,質量低')
 with gr.Column():
 result_gallery = gr.Gallery(label='Output', show_label=False, elem_id="gallery").style(grid=2, height='auto')
 ips = [input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta]
 run_button.click(fn=process, inputs=ips, outputs=[result_gallery])
block.launch(share=True)

請注意: 影像生成消耗顯存,您可以在左側操作欄查看您的實時資源使用情況,點擊GPU顯存使用率即可查看,當顯存不足時,您生成影像可能會報錯,此時,您可以通過重啟kernel的方式重置,然后重頭運行即可規避,或更換更高規格的資源

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551746.html

標籤:其他

上一篇:小程式都能在PC端打開嗎?

下一篇:返回列表

標籤雲
其他(158510) Python(38118) JavaScript(25401) Java(18023) C(15222) 區塊鏈(8261) C#(7972) AI(7469) 爪哇(7425) MySQL(7162) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5335) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1965) Web開發(1951) HtmlCss(1932) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 繪畫手殘黨的福音:涂鴉線稿秒變絕美影像

    摘要:涂鴉線稿秒變絕美影像,ControlNet-Scribble2Img適配華為云ModelArts,提供更加便利和創新的影像生成體驗,將你的想象變為真實的影像。 本文分享自華為云社區《AIGC拯救手殘黨:涂鴉線稿秒變絕美影像》,作者:Emma_Liu 。 ControlNet 什么是Contro ......

    uj5u.com 2023-05-06 08:02:04 more
  • 小程式都能在PC端打開嗎?

    經常有萌新小伙伴來問我:小程式能在windows系統、mac、統信UOS等桌面作業系統中打開嗎?估計現在還是有很多小伙伴對此有疑問,今天就統一來給大家解答一下。 結論先行:可以! ?接下來再給大家介紹幾種實作小程式在PC端運行的方法,以及一些工具推薦。 小程式在桌面端運行通常需要借助一些技術手段,以 ......

    uj5u.com 2023-05-06 08:01:51 more
  • 到底什么是小程式插件?

    最近和小伙伴交流,時常發生插件、組件、控制元件等概念混淆的情況,因此導致經常會錯意。感徑訓是很有必要帶大家整理清楚的,今天就來跟大家來聊一聊插件、組件、控制元件的區別。 什么是插件 先按照官方的一些解釋來看看插件的概念描述? 微信小程式官方描述: 插件,是可被添加到小程式內直接使用的功能組件。開發者可以像開 ......

    uj5u.com 2023-05-06 08:01:43 more
  • 青年開發者說:了不起的“樁源”守護者,開啟智能充電新模式

    摘要:聽來自深圳大學的高校開發者們,分享基于華為云技術創新、識訓成功的故事。代碼改變世界,2023年華為開發者大賽不容錯過! 本文分享自華為云社區《青年開發者說:了不起的“樁源”守護者,開啟智能充電新模式》,作者:華為云社區精選 。 “樁源守護者”,一個聽起來有點熱血、又充滿了英雄主義色彩的詞,這是 ......

    uj5u.com 2023-05-06 08:01:17 more
  • RocketMQ消費者是如何負載均衡的

    摘要:RocketMQ 支持兩種訊息模式:集群消費( Clustering )和廣播消費( Broadcasting )。 本文分享自華為云社區《一文講透RocketMQ消費者是如何負載均衡的》,作者:勇哥java實戰分享。 RocketMQ 支持兩種訊息模式:集群消費( Clustering )和 ......

    uj5u.com 2023-05-06 08:00:59 more
  • 青年開發者說:了不起的“樁源”守護者,開啟智能充電新模式

    摘要:聽來自深圳大學的高校開發者們,分享基于華為云技術創新、識訓成功的故事。代碼改變世界,2023年華為開發者大賽不容錯過! 本文分享自華為云社區《青年開發者說:了不起的“樁源”守護者,開啟智能充電新模式》,作者:華為云社區精選 。 “樁源守護者”,一個聽起來有點熱血、又充滿了英雄主義色彩的詞,這是 ......

    uj5u.com 2023-05-06 08:00:25 more
  • 文鼎創智能物聯云原生容器化平臺實踐

    作者:sekfung,深圳市文鼎創資料科技有限公司研發工程師,負責公司物聯網終端平臺的開發,穩定性建設,容器化上云作業,擅長使用 GO、Java 開發分布式系統,持續關注分布式,云原生等前沿技術,KubeSphere Contributor,KubeSphere 社區用戶委員會深圳站委員。 公司簡介 ......

    uj5u.com 2023-05-06 07:59:55 more
  • UnityC#腳本的熱更新原理

    Unity的腳本如何跨平臺 想要了解Unity的熱更原理,必須要先了解Unity腳本的編譯和跨平臺機制。通常游戲的跨平臺主要指安卓和IOS端。Unity的官方腳本語言是C#,但也有不少專案會采用C# + Lua語言的方式進行開發。它們主要有三種跨平臺的形式:JIT、AOT、腳本語言。 Unity的C ......

    uj5u.com 2023-05-06 07:59:33 more
  • 「學習筆記」AC 自動機

    「學習筆記」AC 自動機 點擊查看目錄 前置:「學習筆記」字串基礎:Hash,KMP與Trie。 好像對例題的講解越來越抽象了? 演算法 問題 求 $n$ 個單詞在一個長度為 $m$ 的文章里出現過多少個。 思路 很多文章都說這玩意是 Trie 樹 + KMP,我覺得確實可以這樣理解但是不完全一樣。 ......

    uj5u.com 2023-05-06 07:59:13 more
  • 【光伏預報/太陽能預報】上海道寧與Solargi為您提供開發地理資料

    Solargis提供開發地理資料庫 模擬工具和網路服務 用于太陽能發電的規劃 性能監控和管理 推動全球經濟 轉向可持續生產和消費 并推廣環保能源技術 Solargis資料是用于 屋頂光伏系統性能監測的 日射強度計的實用替代方案 對于大型地面安裝光伏系統 Solargis可作為 獨立資料源來驗證 和填 ......

    uj5u.com 2023-05-06 07:58:48 more