主頁 >  其他 > 物件存盤只能按檔案名搜索,你out了吧

物件存盤只能按檔案名搜索,你out了吧

2022-10-26 09:12:36 其他

摘要:不少大公司的一個桶里都是幾億幾十億的物件,那他們都是怎么檢索的呢?

本文分享自華為云社區《物件存盤只能按檔案名搜索? 用 DWR + ElasticSearch 實作檔案名、檔案內容、圖片文字的模糊搜索!》,作者:云存盤開發者支持團隊 ,

眾所周知,由于物件存盤的架構限制,要想檢索物件存盤里的檔案,只能使用前綴的方式過濾,然后一頁一頁的列舉,限制多,效率低,要是桶內物件實在太多,可能光列舉就要列舉一兩天,你可能會問,不少大公司的一個桶里都是幾億幾十億的物件,那他們都是怎么檢索的呢?很簡單但很有效的方案——在上傳物件時候把物件資訊存到其他資料庫里,如 Elasticsearch、MongoDB、MySOL 等,然后在資料庫里檢索,

這種方案雖然見到有效,但修改成本極高,如果在業務設計初期沒有考慮到,或系統運行程序中想要添加些新的欄位,那就只能修改業務代碼并重新部署,要是再碰上有已分發客戶端的情況下還要推動客戶端升級才能解決,

有沒有升級簡單,不用改動業務代碼的方案呢?還真有,把存資料庫的程序轉移到物件存盤來做就好了,每次上傳物件之后,讓物件存盤幫你把物件資訊存一份到你指定的位置,本文我們嘗試通過 DWR 平臺來進行解決,DWR 是華為云推出的一個近資料計算平臺,簡單來說,通過 DWR 平臺,我們可以在不改動業務系統的情況下實作對物件的處理,如圖片上傳時把圖片轉成 JPG 格式并存盤在另一個桶里、在獲取圖片時給圖片加上水印等,DWR 將這一個個的能力都封裝成了“算子”,除了官方和第三方伙伴提供的算子外,我們也可以撰寫自定義算子來實作我們的其他定制類要求,

一、架構總覽

1.1 資料庫選型

物件存盤中一個物件(Object)由物件名(Key)、元資料(Metadata)、物件內容(Data)三部分組成,從原始需求出發,為了實作物件的模糊搜索,我們首先要把物件名存起來,進一步的,元資料中也包含了許多可以進行過略、排序用的資訊,如物件大小、最后修改時間、上傳時間、物件 Content-Type、自定義元資料等,其中自定義元資料中包含的 Key 的數目、value 型別都是可變的,為了方便存盤和檢索自定義元資料,不在每次想增加一個欄位時都去修改資料庫,我們首先就排除了傳統的關系型資料庫,

非關系型資料庫(NoSQL)中,比較符合我們要求的是兩款檔案型資料庫——MongoDB 與 Elasticsearch,從定位上來說,MongoDB 更偏向于資料庫,可以用作資料管理和資料搜索; CSS 則偏向于資料搜索服務,具體到我們這個場景,從訪問便捷度、最小規格價格幾個維度對比,最終選擇了選擇 CSS 服務,下表為華為云上的 DDS、CSS、GaussDB for NoSQL 的對比,大家也可以根據自己具體場景選擇合適的服務,

1.2 存盤物件資訊的整體流程

總的流程分 3 步:

1. 上傳檔案到物件存盤
2. DWR 自動觸發,保存需要的資訊到 CSS
3. 通過 API、kibana 等方式檢索 CSS 中存盤的資料

其中第二步還可以進行些進階的操作,例如上傳圖片時,檢測圖片中的文字資訊,一并存入資料庫;上傳視頻時,檢測把視頻大小、碼率、清晰度等資訊抽取出來存入資料庫…

二、購買與配置 CSS

2.1 購買 CSS

1.配置集群 控制臺找到 CSS 服務,點擊創建集群,集群版本選擇了 7.10.2,在此我們先選擇最低配的單節點,存盤選了超高 IO,

2.配置網路 需要注意,安全組一定要允許 9200 埠,集群在創建后不支持修改安全組,只能洗掉重新創建,如果只是在 VPC 內網訪問可以不開安全模式,要是想開放給公網訪問就必須開啟完全模式,

3.配置備份 建議開啟下資料備份,OBS 本身價格也不貴,還可以通過轉冷存盤進一步降低成本,資料多一份保護,萬一哪天誤刪了不用從頭挨個列舉,

4.完成配置 至此就完成了初始的配置,點擊立即申請即開始創建集群,

2.2 初始化 Mapping

ES 中的 Mapping 大致可以類比為資料庫中的表結構,通過定義 mapping,可以指定欄位的存盤型別,我們目前需要的欄位如下,可以使用 CSS 自帶的 kibana 控制臺創建 Mapping,

在 CSS 控制臺找到 kibana,點擊跳轉后登錄,側邊欄找到 Dev Tools

把下面的代碼插入進去,點擊運行,記得把 your-bucket-name 替換成你實際要用的桶名,需要自己在 OBS 手動創建桶

PUT your-bucket-name
{
 "mappings": {
 "dynamic": true,
 "properties": {
 "etag": {
 "type": "text"
 },
 "expiration": {
 "type": "text"
 },
 "content-type": {
 "type": "text"
 },
 "date": {
 "type": "text"
 },
 "content-length": {
 "type": "integer"
 },
 "bucket_name": {
 "type": "text"
 },
 "object_name": {
 "type": "text"
 },
 "create_time": {
 "type": "integer"
 }
 }
 }
}

三、配置 DWR

資料工坊(Data Workroom,DWR)是一款近資料處理服務,下層呼叫了函式服務 FunctionGraph 的能力,自定義算子本質上就是 FunctionGraph 的一個函式,為了開發自定義算子,我們首先要在 FunctionGraph 上創建一個自定義函式并測驗通過,

3.1 創建 FunctionGraph 函式

創建函式包含上傳依賴包、創建函式、創建委托、測驗函式幾個步驟,都不復雜,

3.1.1 上傳依賴包

本地 Python 操作 Elasticsearch 需要通過 pip 安裝 Elasticsearch Python 依賴,相應的,我們在函式作業流中呼叫也需要添加對應的依賴包,我們需要安裝7.10.1 版本的 elasticsearch ,

首先需要使用你對應 python 版本創建個新的虛擬環境,如果沒有新建,而你本地已經有了部分依賴,會導致依賴包裝不出來,

建議使用 Linux 環境打包依賴包,在 windows 環境下打包出的部分包可能不兼容 functionGraph 環境

# 安裝虛擬環境包,有的話可以跳過
pip install virtualenv 
# 創建 python 3.9 的虛擬環境
virtualenv fgpackage --python=3.9
# Linux 激活虛擬環境
source ./fgpackage/bin/activate
# Windows 激活虛擬環境
# .\fgpackage\Scripts\activate
# 安裝指定包到臨時目錄
pip install elasticsearch==7.10.1 --root \tmp\fgpackage

經過上面的操作,把就elasticsearch 和它們需要的依賴安裝到了 \tmp\fgpackage 下了,一層一層進入 \tmp\es_package,一直到 site-packages 一層,全選后添加到一個壓縮包內,

在函式串列頁點擊函式-依賴包管理-添加依賴包

運行語言選 Python3.9,上傳剛剛打包的壓縮檔案點擊確定即可,

更多可參考 官方添加依賴說明

3.1.2 創建函式

控制臺找到 FuntionGraph 服務,點擊創建函式,

選擇空白函式,運行時選擇為 Python 3.9 (話說把 Runtime 翻譯成運行時好奇怪,這種專有詞是不是最好別強行翻譯?);委托需要具有 VPC Administrator 與 Tenant Administrator 兩個權限,用以訪問其他云服務和 VPC 內網資源,如果有現成的可以直接選擇,沒有的話點擊創建委托進入創建頁,參考下一節進行創建,然后重繪下選擇即可,

點擊完成創建,

3.1.3 創建委托

委托需要有 VPC Administrator 與 Tenant Administrator 兩個權限,如果已有可以直接跳過,上一節中的創建函式位置點擊 創建委托 跳轉到委托創建頁,點擊創建委托,

委托型別選擇云服務

權限選擇 VPC Administrator 與 Tenant Administrator 兩個權限

授權范圍選擇所有資源,或跟你需要自己配置

點擊完成即可,

3.1.4 填寫代碼

創建過函式后,會進入函式編輯頁面,將下面的代碼寫到編輯器里,點擊下部署,或鍵盤按 Ctrl + S 進行部署

# -*- coding:utf-8 -*-
import time
from urllib.parse import unquote_plus
from elasticsearch import Elasticsearch
from obs import ObsClient
def handler(event, context):
 # 獲取桶名與物件名
 region_id, bucket_name, object_name = get_obs_obj_info(event.get("Records", None)[0])
 context.getLogger().info(f"bucket name: {bucket_name}, object key: {object_name}")
 ak = context.getAccessKey()
 sk = context.getSecretKey()
    server = 'obs.' + region_id + '.myhuaweicloud.com'
 context.getLogger().info("before token")
 context.getLogger().info(context.getToken())
 context.getLogger().info("finish token")
 obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
 # 獲取物件元資料
 object_metadata = obs_client.getObjectMetadata(bucket_name, object_name)
 # 將頭域轉為字典
 info_dict = {i[0]: i[1] for i in object_metadata["header"]}
 info_dict["bucket_name"] = bucket_name
 info_dict["object_name"] = object_name
 # 為了不同系統下時區轉換導致時間不統一,這里不使用 OBS 里的 last-modified 的 GMT 時間,改用時間戳
 info_dict["create_time"] = int(time.time())
 # 把物件大小轉為數字格式
 info_dict["content-length"] = int(info_dict["content-length"])
 # 去除部分無用的 header
 for i in ["id-2", "request-id", "connection", "last-modified", "uploadid"]:
 if i in info_dict:
 info_dict.pop(i)
 # 把其他算子里包含的資訊也一起保存下來
 if "other_info" in event["dynamic_source"]:
 info_dict.update(event["dynamic_source"]["other_info"])
 context.getLogger().info(f"metadata to save: {info_dict}")
 es_user = event["dynamic_source"]["es_user"]
 es_password = event["dynamic_source"]["es_password"]
 es_server_ip = event["dynamic_source"]["es_server"]
 es_port = event["dynamic_source"]["es_port"]
 context.getLogger().info(es_port)
 if es_user != "" and es_password != "":
 es_server = f"https://{es_user}:{es_password}@{es_server_ip}:{es_port}"
 context.getLogger().info(es_server.replace(es_password, "xxxxxxx"))
 else:
 es_server = f"http://{es_server_ip}:{es_port}"
 context.getLogger().info(es_server)
    es = Elasticsearch([es_server], ca_certs=False, verify_certs=False)
    response = es.index(index=bucket_name, body=info_dict)
 context.getLogger().info(response)
 return {
 "statusCode": 200,
 "isBase64Encoded": False,
 "body": response,
 "headers": {
 "Content-Type": "application/json"
 }
 }
def get_obs_obj_info(record):
 if 's3' in record:
        s3 = record['s3']
 return record["eventRegion"], s3['bucket']['name'], unquote_plus(s3['object']['key'])
 else:
 obs_info = record['obs']
 return record["eventRegion"], obs_info['bucket']['name'], \
 unquote_plus(obs_info['object']['key'])

3.1.5 配置函式

1.配置依賴 在代碼配置頁最下找到添加依賴包按鈕,分別添加公共依賴中的OBS 3.21.8 與 私有依賴中的fgpackage

2.配置 VPC 還是代碼配置頁,點擊基本資訊的編輯按鈕,這里要記得與 2.1 節中的 CSS 選擇同一個 VPC,

3.1.6 測驗函式

在 OBS 里創建一個桶,最好和 CSS、FunctionGraph 都在同一個 Region,我用的上海一節點,region id 為 cn-east-3 桶內隨便上傳一個物件做備用,然后點擊函式代碼頁中配置測驗事件,把下面這段 Json 添加進去,并修改下面的配置為你的配置,其中 es_server 的值為 CSS 集群 IP,

{
 "Records": [
 {
 "eventRegion": "cn-east-3",
 "obs": {
 "bucket": {
 "name": "your-bucket-name"
 },
 "object": {
 "key": "your-object-name"
 }
 }
 }
 ],
 "dynamic_source": {
 "es_server": "your-CSS-endpoint",
 "es_user": "admin",
 "es_password": "your-CSS-password",
 "es_port": 9200
 }
}

保存后點擊測驗,如果一切配置正確,右邊會出現這樣的結果,如果提示執行失敗,就看下下面報錯,再找找前面幾步哪個寫錯了,

3.2 配置 DWR 作業流

DWR 現在還在公測中,需要點擊申請公測,資訊隨便填就可以,目測是自動審核的,點完申請就通知申請成功了,

進入頁面,點擊作業流選項-創建作業流

左側把自定義算子拖到中間,和 Start、End 連上線,函式選擇剛剛創建的函式,再填寫下引數,這里的引數就是上一節 Json 檔案里 dynamic_source 欄位的引數即可,

點擊保存,寫上名字,會自動跳轉出來,創建個觸發器再

這里我沒有寫前綴和后綴,對桶內所有物件生效,如果填了前綴后綴,則會只匹配指定事件,

四、檢索

到現在所有配置都完成了,使用 OBS Browser+ 向桶里上傳幾個測驗檔案,然后用自己熟悉 Elasticsearch 呼叫方法嘗試下檢索,我這里使用 CSS 自帶的 kibana 控制臺,

4.1 檢索名字里包含測驗 兩個字的物件

測驗代碼:

POST _search
{
 "query": {
 "match": {
 "object_name": "測驗"
 }
 }
}

4.2 檢索為 .mp4 結尾的物件

POST _search
{
 "query": {
 "regexp": {
 "object_name": ".*mp4"
 }
 }
}

4.3 檢索大小介于 100k 到 1M 的物件

POST _search
{
 "query": {
 "range": {
 "content-length": {
 "gt":"102400",
 "lt":"1048576"}
 }
 }
}

4.4 檢索創建時間在 2022 年 8 月 5 日與 2022 年 8 月 6 日之間的物件(時間戳)

POST _search
{
 "query": {
 "range": {
 "create_time": {
 "gt":"1659628800",
 "lt":"1659715200"}
 }
 }
}

五、再進一步

有的同學可能注意到了,流程介紹時我提到可以進行進階的操作,存入 CSS 的算子上頭可以拼接很多其他算子,算子的代碼包里也留了一個小擴展,可以從上一個算子中讀取 other_info 并一起保存,這個能干點啥嘞,咱們舉幾個場景:

  1. 把物件名縮寫存起來,如一個檔案叫我的檔案.txt,只用輸入 wdwj 就能找到該檔案的全稱
  2. 圖片檔案上傳后,呼叫 AI 給圖片打個標簽,把標簽存到資料庫,可以通過風景、美食、貓咪 等關鍵詞檢索到圖片,現在華為鴻蒙、蘋果 iOS 都有這樣的功能
  3. 圖片包含文字的話,把文字識別出來存入資料庫,可以通過文字搜索圖片,在某些業務系統里還可以用專用的算子,如發票識別、身份證識別等,

這里先把最簡單的物件名縮寫給個示例,拋磚引玉,大家可以自行嘗試更多功能,

用了xpinyin 這個庫,上傳依賴包步驟參考前面的介紹,代碼很簡單:

# coding:utf-8
from urllib.parse import unquote_plus
from xpinyin import Pinyin
def handler(event, context):
 # 獲取桶名與物件名
    _, _, object_name = get_obs_obj_info(event.get("Records", None)[0])
 context.getLogger().info(f"Object name is {object_name}")
    pinyin = Pinyin()
    pinyin = pinyin.get_pinyin(object_name, '-')
 short_pinyin = "".join([i[0] for i in pinyin.split("-") if i[0].isalpha()])
 if "other_info" in event["dynamic_source"]:
        event["dynamic_source"]["other_info"]["short_pinyin"] = short_pinyin
 else:
        event["dynamic_source"]["other_info"] = {"short_pinyin": short_pinyin}
 context.getLogger().info(f"Object short name is {short_pinyin}")
 context.getLogger().info(event)
 return event
def get_obs_obj_info(record):
 if 's3' in record:
        s3 = record['s3']
 return record["eventRegion"], s3['bucket']['name'], unquote_plus(s3['object']['key'])
 else:
 obs_info = record['obs']
 return record["eventRegion"], obs_info['bucket']['name'], \
 unquote_plus(obs_info['object']['key'])

這就配置完了,只用去 DWR 作業流頁面創建個作業流,把這個函式加載前面:

給作業流配置個觸發器,然后把之前創建的作業流先洗掉掉,以免重復觸發,再上傳幾個檔案,

搜索下包含 cs 的物件

POST _search
{
 "query": {
 "regexp": {
 "short_pinyin": ".*cs.*"
 }
 }
}

 

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

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

標籤:其他

上一篇:【遠程訪問與設備重定向】上海道寧為您助您遠程共享USB設備與USB設備重定向到遠程會話

下一篇:NFS共享檔案服務

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(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
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more