主頁 >  其他 > ModelBox實戰開發:RK3568實作攝像頭虛擬背景

ModelBox實戰開發:RK3568實作攝像頭虛擬背景

2023-06-20 08:49:52 其他

摘要:本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛擬背景AI應用的開發,

本文分享自華為云社區《ModelBox開發案例 - RK3568實作攝像頭虛擬背景【玩轉華為云】》,作者:AI練習生 ,

本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛擬背景AI應用的開發,

最終運行效果如下:

RK3568

本應用采用RK開發套件完成,需要具備RK3568開發板,本硬體可以通過以下鏈接購買:https://marketplace.huaweicloud.com/contents/2b73a21b-91c5-4c58-a61a-5a5460afeaf7 ,規格包含:RK3568開發板×1、A2 WiFi模塊×1、外殼×1、電源線和電源插頭×1、散熱片×1,

模型訓練

Notebook:

模型推理

Notebook:

onnx結構:

linknet.onnx.png

模型轉換

Notebook:

rknn結構:

linknet.rknn.png

原生onnxruntime推理

我們準備了(1080p, 30fps)的視頻,使用原生的onnxruntime進行推理,幀率最高是7:

實作代碼:

"""
OpenCV 讀取攝像頭視頻視頻流,使用原生的onnxruntime推理
"""
# 匯入OpenCV
import cv2
import time
import drawUtils
import numpy as np
import onnxruntime
# cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture('test.mp4')

if not cap.isOpened():
 print('檔案不存在或編碼錯誤')
else:
 i = 0
 fps = 30
 start_time = time.time()
 font = cv2.FONT_HERSHEY_PLAIN
 image_background = cv2.imread('R-C.jpg')
 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
 onnx_model = onnxruntime.InferenceSession('linknet.onnx')
 image_background = cv2.resize(image_background, (width, height))
 writer = cv2.VideoWriter('test_result.mp4',cv2.VideoWriter_fourcc(*'X264'),fps,(width,height))
 image_background = image_background/255.

while cap.isOpened():
 ret,frame = cap.read()
 if ret:
 img = cv2.resize(frame, (256, 256))
 img = img[...,::-1]/255.
 img = img.astype(np.float32)
 img = np.transpose(img, (2, 0, 1))
 data = np.expand_dims(img, axis=0)
 onnx_input ={onnx_model.get_inputs()[0].name: data}
 pred_mask = onnx_model.run(None, onnx_input)
 pred_mask = np.array(pred_mask)
 pred_mask = pred_mask[0][0][0]
 pred_mask = cv2.resize(pred_mask, (width, height))
 pred_mask = pred_mask.reshape((height, width, 1))
 img_multi = pred_mask*frame/255.
 mask_layer = np.ones((height, width)).reshape(height, width, 1)-pred_mask
 mask_layer = image_background*mask_layer
 image_add = img_multi+mask_layer
 image_add = image_add*255
 image_add = image_add.astype(np.uint8)
 # 計算FPS
 i += 1
 now = time.time()
 fps_text = int(1 / ( now - start_time))
 start_time = now
 print('linknet post ' + str(i))
 # 添加中文(首先匯入模塊)
 img_add = drawUtils.cv2AddChineseText(image_add, '幀率:'+str(fps_text), (20,50), textColor=(0, 255, 0), textSize=30)
 # 顯示畫面
 # cv2.imshow('demo',img_add)
 writer.write(img_add)
 # 退出條件
 if cv2.waitKey(1) & 0xFF == ord('q'):
 break
 else:
 break

cap.release()
cv2.destroyAllWindows()

修改使用編為0攝像頭(默認為PC自帶的攝像頭)進行實時檢測:

ModelBox AI應用開發

直接使用工程

1)下載案例

本案例所需資源(代碼、模型、測驗資料等)均可從網盤鏈接下載,

2)運行應用

將virtual_background檔案夾拖到工程目錄workspace目錄下面,開啟性能統計:

切換到工程目錄,執行bin/main.bat運行應用,生成的視頻和性能統計檔案都在hilens_data_dir檔案夾下面:

3)性能統計

在Chrome瀏覽器chrome://tracing中加載性能統計檔案:

該AI應用輸入1080p的視頻,batch_size=4耗時約為256ms,平均每幀處理速度為64ms,fps=1000/64≈16,接下來我們給出該AI應用在ModelBox中的完整開發程序(以開發套件為例),

4)攝像頭檢測

打開工程目錄bin/mock_task.toml檔案,修改其中的任務輸入和任務輸出,配置為如下內容:

# 用于本地mock檔案讀取任務,腳本中已經配置了IVA_SVC_CONFIG環境變數, 添加了此檔案路徑
########### 請確定使用linux的路徑型別,比如在windows上要用  D:/xxx/xxx  不能用D:\xxx\xxx  ###########
# 任務的引數為一個壓縮并轉義后的json字串
# 直接寫需要轉義雙引號, 也可以用 content_file 添加一個json檔案,如果content和content_file都存在content會被覆寫
# content_file支持絕對路徑或者相對路徑,不支持決議環境變數(包括${HILENS_APP_ROOT}、${HILENS_DATA_DIR}等)
[common]
content = "{\"param_str\":\"string param\",\"param_int\":10,\"param_float\":10.5}"
# 任務輸入配置,mock模擬目前僅支持一路rtsp或者本地url, 當前支持以下幾種輸入方式:
# 1. rtsp攝像頭或rtsp視頻流:type="rtsp", url="rtsp://xxx.xxx"  (type為rtsp的時候,支持視頻中斷自動重連)
# 2. 設備自帶攝像頭或者USB攝像頭:type="url",url="攝像頭編號,比如 0 或者 1 等" (需配合local_camera功能單元使用)
# 3. 本地視頻檔案:type="url",url="視頻檔案路徑" (可以是相對路徑 -- 相對這個mock_task.toml檔案, 也支持從環境變數${HILENS_APP_ROOT}所在目錄檔案輸入)
# 4. http服務:type="url", url="http://xxx.xxx"(指的是任務作為http服務啟動,此處需填寫對外暴露的http服務地址,需配合httpserver類的功能單元使用)
# 5. 支持多輸入[input] [input1] [input2] ...,對應的輸出為[output] [output1] [output2] ...,如果使用videoout功能單元輸出,則輸入和輸出個數必須匹配,同時url不能重名
[input]
type = "url"
url = "0"
#url = "../data/test.mp4"
# 任務輸出配置,當前支持以下幾種輸出方式:
# 1. rtsp視頻流:type="local", url="rtsp://xxx.xxx"
# 2. 本地螢屏:type="local", url="0:xxx" (設備需要接顯示幕,系統需要安裝桌面)
# 3. 本地視頻檔案:type="local",url="視頻檔案路徑" (可以是相對路徑——相對這個mock_task.toml檔案, 也支持輸出到環境變數${HILENS_DATA_DIR}所在目錄或子目錄)
# 4. http服務:type="webhook", url="http://xxx.xxx" (指的是任務產生的資料上報給某個http服務,此處需填寫上傳的http服務地址)
[output]
type = "local"
url = "0"
#url = "../hilens_data_dir/test_result.mp4"

執行.\bin\main.bat camera運行應用,將會自動彈出實時的人像分割畫面:

從零開發工程

如果你對專案開發感興趣,可以通過本章進一步了解,

1)遠程連接開發板

我們推薦在PC端使用VS Code遠程連接開發板來對設備進行操作,安裝Remote-SSH:

2)查看設備ip地址

可以在APP應用智慧生活上查看設備的ip地址:

3)配置SSH連接

電腦和設備處于同一WiFi下,在VS Code中使用Remote-SSH遠程登陸:

RK3568應用開發

創建工程

在SDK目錄下使用create.py腳本創建工程,我決定工程取名為virtual_background:

rock@rock-3a:~$ cd /home/rock/modelbox
rock@rock-3a:~/modelbox$ ./create.py -t server -n virtual_background
sdk version is modelbox-rk-aarch64-1.5.3
success: create virtual_background in /home/rock/modelbox/workspace

創建推理功能單元

rock@rock-3a:~/modelbox$ ./create.py -t infer -n linknet_infer -p virtual_background
sdk version is modelbox-rk-aarch64-1.5.3
success: create infer linknet_infer in /home/rock/modelbox/workspace/virtual_background/model/linknet_infer

可以看到推理功能單元創建在了專案工程的model目錄下面:

將我們轉換好的模型linknet.rknn拖到linknet_infer目錄下,接著編輯.toml組態檔,主要修改模型的路徑與輸入輸出,由于我們模型有一個來自rknpu的uint8的型別輸入和一個float型別的輸出,所以對組態檔編輯如下:

# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved.
[base]
name = "linknet_infer"
device = "rknpu"
version = "1.0.0"
description = "your description"
entry = "./linknet.rknn" # model file path, use relative path
type = "inference"
virtual_type = "rknpu2" # inference engine type: rockchip now support rknpu, rknpu2(if exist)
group_type = "Inference" # flowunit group attribution, do not change
is_input_contiguous = "false" # rk do not support memory combine, fix, do not change
# Input ports description
[input]
[input.input1]  # input port number, Format is input.input[N]
name = "Input" # input port name
type = "uint8" # input port data type ,e.g. float or uint8
device = "rknpu" # input buffer type: use rknpu for zero-copy, cpu also allow
# Output ports description
[output]
[output.output1] # output port number, Format is output.output[N]
name = "Output" # output port name
type = "float" # output port data type ,e.g. float or uint8

可以看到該模型有1個輸入節點,1個輸出節點,需要注意其中的virtual_type配置與npu類別有關,RK3568需配置為rknpu2;輸入節點的device配置建議設為與該推理功能單元的上一個功能單元相同,

ModelBox內置了rknn推理引擎和推理邏輯,開發者只需要準備好模型檔案、編輯好組態檔,即可使用該模型進行推理,無需撰寫推理代碼,

另外,本案例使用的人像分割模型是由Pytorch框架訓練得到,我們事先使用rknn-toolkit2工具將它轉換為RK3568支持的模型格式,感興趣的話可以在RK3568模型轉換查看模型轉換程序,

創建后處理功能單元

我們需要一個后處理功能單元來對模型推理結果進行解碼,依然是萬能的create.py腳本:

rock@rock-3a:~/modelbox$ ./create.py -t python -n linknet_post -p virtual_background
sdk version is modelbox-rk-aarch64-1.5.3
success: create python linknet_post in /home/rock/modelbox/workspace/virtual_background/etc/flowunit/linknet_post

可以看到在專案工程的etc/flowunit目錄下面已經生成了該功能單元,存放.toml組態檔與.py功能代碼檔案:

接下來補充該功能單元的邏輯代碼,如果對此不感興趣,可以將我們資源包中的代碼CtrlC+V速通本節,

首先補充后處理功能單元的組態檔,對于后處理功能單元,我們需要知道模型推理的shape,因此需要對config欄位進行配置,此外,我們還需要修改輸入輸出,接收一個float型別的推理結果與一個uint8型別的原圖,輸出融合后的新圖:

# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
# Basic config
[base]
name = "linknet_post" # The FlowUnit name
device = "cpu" # The flowunit runs on cpu
version = "1.0.0" # The version of the flowunit
type = "python" # Fixed value, do not change
description = "description" # The description of the flowunit
entry = "linknet_post@linknet_postFlowUnit" # Python flowunit entry function
group_type = "Generic" # flowunit group attribution, change as Input/Output/Image/Generic ...
# Flowunit Type
stream = false # Whether the flowunit is a stream flowunit
condition = false # Whether the flowunit is a condition flowunit
collapse = false # Whether the flowunit is a collapse flowunit
collapse_all = false # Whether the flowunit will collapse all the data
expand = false #  Whether the flowunit is a expand flowunit
# The default Flowunit config
[config]
mask_h = 256
mask_w = 256
# Input ports description
[input]
[input.input1] # Input port number, the format is input.input[N]
name = "in_mask" # Input port name
type = "float" # Input port type
[input.input2] # Input port number, the format is input.input[N]
name = "in_image" # Input port name
type = "uint8" # Input port type
# Output ports description
[output]
[output.output1] # Output port number, the format is output.output[N]
name = "out_image" # Output port name
type = "uint8" # Output port type

后處理代碼:

# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import _flowunit as modelbox
import numpy as np
import cv2
class linknet_postFlowUnit(modelbox.FlowUnit):
 # Derived from modelbox.FlowUnit
 def __init__(self):
 super().__init__()
 self.image_background = cv2.imread('data/R-C.jpg')
 self.image_background = cv2.cvtColor(self.image_background,cv2.COLOR_BGR2RGB)
 self.image_background = self.image_background/255.
 def open(self, config):
 # Open the flowunit to obtain configuration information
 self.mask_h = config.get_int('mask_h', 256)
 self.mask_w = config.get_int('mask_w', 256)
 self.index = 0 
 return modelbox.Status.StatusCode.STATUS_SUCCESS
 def process(self, data_context):
 # Process the data
 in_mask = data_context.input("in_mask")
 in_image = data_context.input("in_image")
 out_image = data_context.output("out_image")
 # linknet_post process code.
 # Remove the following code and add your own code here.
 for buffer_mask, buffer_image in zip(in_mask, in_image):
 # 獲取輸入Buffer的屬性資訊
 width = buffer_image.get('width')
 height = buffer_image.get('height')
 channel = buffer_image.get('channel')
 # 將輸入Buffer轉換為numpy物件
 image_background = cv2.resize(self.image_background, (width, height))
 mask_data = np.array(buffer_mask.as_object(), copy=False)
 mask_data = mask_data.reshape(self.mask_h, self.mask_w)
 mask_data = cv2.resize(mask_data, (width, height))
 mask_data = mask_data.reshape(height, width, 1)
 image_data = np.array(buffer_image.as_object(), dtype=np.uint8, copy=False)
 image_data = image_data.reshape(height, width, channel)
 img_multi = mask_data*image_data/255.
 mask_layer = np.ones((height, width))
 mask_layer = mask_layer.reshape(height, width, 1)
 mask_layer = mask_layer-mask_data
 mask_layer = image_background*mask_layer
 image_add = img_multi+mask_layer
 image_add = image_add*255
 image_add = image_add.astype(np.uint8)
 # frame計數
 self.index += 1
 print("linknet_post " + str(self.index))
 # 將業務處理回傳的結果資料轉換為Buffer
 add_buffer = modelbox.Buffer(self.get_bind_device(), image_add)
 # 設定輸出Buffer的Meta資訊,此處直接拷貝輸入Buffer的Meta資訊
 add_buffer.copy_meta(buffer_image)
 # 將輸出Buffer放入輸出BufferList中
 out_image.push_back(add_buffer)
 return modelbox.Status.StatusCode.STATUS_SUCCESS
 def close(self):
 # Close the flowunit
 return modelbox.Status()
 def data_pre(self, data_context):
 # Before streaming data starts
 return modelbox.Status()
 def data_post(self, data_context):
 # After streaming data ends
 return modelbox.Status()
 def data_group_pre(self, data_context):
 # Before all streaming data starts
 return modelbox.Status()
 def data_group_post(self, data_context):
 # After all streaming data ends
 return modelbox.Status()

搭建流程圖

修改virtual_background.toml內容:

# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved.
[driver]
dir = ["${HILENS_APP_ROOT}/etc/flowunit",
"${HILENS_APP_ROOT}/etc/flowunit/cpp",
"${HILENS_APP_ROOT}/model",
"${HILENS_MB_SDK_PATH}/flowunit"]
skip-default = true
[profile]
profile=true
trace=true
dir="${HILENS_DATA_DIR}/mb_profile"
[graph]
format = "graphviz"
graphconf = """digraph virtual_background {
    node [shape=Mrecord]
 queue_size = 1
 batch_size = 1
    # 定義節點,即功能單元及其屬性
    input1[type=input, flowunit=input, device=cpu, deviceid=0]
 data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0]
 video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0]
 video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt="rgb"]
 image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=256, image_height=256]
 linknet_infer[type=flowunit, flowunit=linknet_infer, device=rknpu, deviceid=0]
 linknet_post[type=flowunit, flowunit=linknet_post, device=cpu, deviceid=0]
 video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0]
    # 定義邊,即功能間的資料傳遞關系
    input1:input -> data_source_parser:in_data
 data_source_parser:out_video_url -> video_demuxer:in_video_url
 video_demuxer:out_video_packet -> video_decoder:in_video_packet
 video_decoder:out_video_frame -> image_resize:in_image
 image_resize:out_image -> linknet_infer:Input
 linknet_infer:Output -> linknet_post:in_mask
 video_decoder:out_video_frame -> linknet_post:in_image
 linknet_post:out_image -> video_out:in_video_frame
}"""
[flow]
desc = "virtual_background run in modelbox-rk-aarch64"

其中,profile欄位設為true啟用性能統計功能,

運行應用

應用的輸入和輸出可以在專案工程的bin/mock_task.toml中進行配置:

配置應用的輸入輸出,接下來就可以進入專案進行構建和運行了:

執行bin/main.sh運行應用,生成的視頻和性能統計檔案在hilens_data_dir檔案夾:

可以右鍵下載查看性能統計檔案:

可以看到模型推理確實很快,平均每4次推理耗時223ms,fps約等于18幀每秒,

開發板攝像頭檢測

創建virtual_background_cameral.toml檔案,編輯內容如下:

# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved.
[driver]
dir = ["${HILENS_APP_ROOT}/etc/flowunit",
"${HILENS_APP_ROOT}/etc/flowunit/cpp",
"${HILENS_APP_ROOT}/model",
"${HILENS_MB_SDK_PATH}/flowunit"]
skip-default = true
[profile]
profile=false
trace=false
dir="${HILENS_DATA_DIR}/mb_profile"
[graph]
format = "graphviz"
graphconf = """digraph virtual_background {
    node [shape=Mrecord]
 queue_size = 1
 batch_size = 1
    # 定義節點,即功能單元及其屬性
    input1[type=input, flowunit=input, device=cpu, deviceid=0]
 data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0]
 local_camera[type=flowunit, flowunit=local_camera, device=rknpu, deviceid=0, pix_fmt="rgb", cam_width=1280, cam_height=720]
 image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=256, image_height=256]
 linknet_infer[type=flowunit, flowunit=linknet_infer, device=rknpu, deviceid=0]
 linknet_post[type=flowunit, flowunit=linknet_post, device=cpu, deviceid=0]
 video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0]
    # 定義邊,即功能間的資料傳遞關系
    input1:input -> data_source_parser:in_data
 data_source_parser:out_video_url -> local_camera:in_camera_packet
 local_camera:out_camera_frame -> image_resize:in_image
 image_resize:out_image -> linknet_infer:Input
 linknet_infer:Output -> linknet_post:in_mask
 local_camera:out_camera_frame -> linknet_post:in_image
 linknet_post:out_image -> video_out:in_video_frame
}"""
[flow]
desc = "virtual_background run in modelbox-rk-aarch64"

打開工程目錄下bin/mock_task.toml檔案,修改任務輸入和任務輸出:

執行bin/main.sh camera運行應用,使用rtsp推流到本地進行查看:

至此我們就完成了攝像頭虛擬背景AI應用的開發以及在Windows和RK3568開發板上的部署,本案例所需資源(代碼、模型、測驗資料等)均可從網盤鏈接下載,感興趣的小伙伴趕快下載玩一玩吧!

 

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

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

標籤:其他

上一篇:詳解4種模型壓縮技術、模型蒸餾演算法

下一篇:返回列表

標籤雲
其他(161302) Python(38242) JavaScript(25505) Java(18249) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7258) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4603) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(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
最新发布
  • ModelBox實戰開發:RK3568實作攝像頭虛擬背景

    摘要:本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛擬背景AI應用的開發。 本文分享自華為云社區《ModelBox開發案例 - RK3568實作攝像頭虛擬背景【玩轉華為云】》,作者:AI練習生 。 本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛 ......

    uj5u.com 2023-06-20 08:49:52 more
  • 詳解4種模型壓縮技術、模型蒸餾演算法

    摘要:本文主要為大家講解關于深度學習中幾種模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT。 本文分享自華為云社區《深度學習實踐篇[17]:模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBE ......

    uj5u.com 2023-06-20 08:48:27 more
  • 自然語言處理 Paddle NLP - 快遞單資訊抽取 (ERNIE 1.0)

    檔案檢索:需要把業務問題拆解成子任務。文本分類 -> 文本匹配 -> 等任務 -> Panddle API 完成子任務 -> 子任務再拼起來 ## 介紹 在2017年之前,工業界和學術界對文本處理依賴于序列模型[Recurrent Neural Network (RNN)](https://baik ......

    uj5u.com 2023-06-20 08:46:25 more
  • Liunx nginx服務

    目錄 一、nginx概念 二、nginx特點 三、nginx應用場景 四、nginx和apache 五、阻塞和非阻塞 六、同步和異步 七、編譯安裝nginx 八、升級nginx 九、總結 一、nginx概念 1.nginx概念 Nginx ("engine x") 是一個高性能的 HTTP 和反向代 ......

    uj5u.com 2023-06-20 08:45:46 more
  • 云原生周刊:Dapr v1.11 發布

    ## 開源專案推薦 ### [Kamaji](https://github.com/clastix/kamaji) Kamaji 可以大規模地部署和運行 Kubernetes 控制平面,而只需承擔一小部分操作負擔。Kamaji 的特別之處在于,控制平面組件是在一個單一的 pod 中運行,而不是在專用 ......

    uj5u.com 2023-06-20 08:45:25 more
  • API網關-APISIX簡介

    本文分享自天翼云開發者社區《API網關-APISIX簡介》,作者:w****n Apache APISIX 是一個動態、實時、高性能的云原生 API 網關,提供了負載均衡、動態上游、灰度發布、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。APISIX 構建于nginx+ngx_lua的技識訓礎之 ......

    uj5u.com 2023-06-20 08:45:18 more
  • 華為云鄧明昆:云原生時代,以開源賦能數字化轉型

    摘要:云原生技術以“極致彈性、分布式、松耦合、高韌性”等特征,可有效幫助企業實作基礎架構升級,業務快速創新。 近日,以“開源賦能,貧訓未來”為主題的開放原子全球開源峰會在北京亦創國際會展中心順利舉行。其中,由華為云承辦的以“探索云原生技術發展與應用實踐,賦能企業數字化轉型”為主題的2023開放原子全 ......

    uj5u.com 2023-06-20 08:45:05 more
  • Grafana 系列-GaC-2-Grafana Terraform Provider 基礎

    ## 系列文章 * [Grafana 系列文章](https://ewhisper.cn/tags/Grafana/) * [Terraform 系列文章](https://ewhisper.cn/tags/Terraform/) ## 概述 [前文](https://ewhisper.cn/pos ......

    uj5u.com 2023-06-20 08:44:54 more
  • 在 Debian 12 上安裝 KubeSphere 實戰入門

    > 老 Z,運維架構師,云原生愛好者,目前專注于云原生運維,云原生領域技術堆疊涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 ## 前言 ### **知識點** - 定級:**入門級** - KubeKey 安裝部署 KubeSphere 和 ......

    uj5u.com 2023-06-20 08:39:22 more
  • 100個物聯網專案(基于ESP32)2快速入門

    ## 2快速入門 你將需要IDE來撰寫你的代碼。我們推薦初學者使用Arduino IDE。雖然它不是最好的IDE,但它可以完成作業,而且對初學者來說是直接和容易使用的。在熟悉了Arduino IDE并發展到更復雜的專案后,你可能會發現利用VS Code與Platformio插件來代替它更為方便。 # ......

    uj5u.com 2023-06-20 08:29:21 more