主頁 >  其他 > 我的畢業設計之基于深度學習的人臉識別系統

我的畢業設計之基于深度學習的人臉識別系統

2021-08-12 06:41:12 其他

如今在人臉識別領域中,開始逐步加強對深度學習技術的運用,這促使人臉識別的相關技術的發展速度得到顯著提升,在此背景下,人臉識別技術在未來必然會擁有更為廣闊的發展前景,

本文主要以卷積神經網路為基礎對人臉識別模型進行設計,使用深度學習框架,通過Keras完成對卷積神經網路模型進行構建,使用OpenCV介面識別人臉并處理人臉資料建立資料集,然后對設立的模型開展訓練,在完成訓練后,運用該模型來實作人臉識別打卡,系統主要分為人臉采集、人臉影像處理、訓練人臉模型訓練和人臉識別打卡小程式四個模塊,四個模塊均能按照預定方式實作相應功能,整體來看,系統所具備的性能能夠達到預期水平,

關鍵詞 人臉識別 卷積神經網路 OpenCV Keras

5 系統實作

經過前期的需求分析與系統設計,本章將按照人臉檢測收集、人臉處理、模型訓練和人臉識別GUI打卡小程式模塊,分別介紹基于深度學習的人臉識別系統的開發的具體程序及實作代碼,

5.1 人臉檢測收集

設定獲取圖片后的保存路徑save_path,然后執行get_face.py中的__name__ == '__main__方法,首先使用OpenCV中的VideoCapture函式呼叫并啟用攝像頭,然后使用OpenCV中的級聯分類器(CascadeClassifier)加載人臉識別分類器haarcascade_frontalface_default.xml,針對所收集每幀影像中包含的人臉相關資訊進行檢測,且把得到的資訊保存至特定位置,同時在視頻中標記出人臉框與當前以保存圖片張數,實作效果如圖5.1所示,

圖5.1 人臉檢測收集實作

實作代碼如下:
def getface(name, cameraid, max_num, path_name):
cv2.namedWindow(name)
videocap = cv2.VideoCapture(cameraid)
data_path = "haarcascade_frontalface_default.xml"
classfier = cv2.CascadeClassifier(data_path)#加載OpenCV人臉識別器
color = (0, 255, 0
num = 0
while videocap.isOpened):
ok, frame = videocap.read()

if not ok:
break
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32
if len(faceRects) > 0: #檢測到人臉,對人臉進行加框

for faceRect in faceRects:

x, y, w, h = faceRect
img_name = '%s/%d.jpg ' %(path_name, num)#保存人臉到目錄

if num > max_num: #如果下載數量完成,退出

break
cv2.rectangle(frame,

if num > max_num:
break
cv2.imshow(name, frame)
c = cv2.waitKey(10
if c & 0xFF == ord'q'):
break
videocap.release()
cv2.destroyAllWindows()

5.2 人臉處理

首先設定影像大小引數IMAGE_SIZE,影像尺寸進行調整圖片初始長寬存在差異先確定哪一個邊的長度是最長的,之后對其跟短邊的差距進行計算,以明確短邊對應的像素寬度需增加的具體數值,給影像增加邊界,然后使用OpenCV中的cv2.copyMakeBorder函式進行邊緣填充,最后使用OpenCV中的cv2.resize函式調整影像大小并回傳,當訓練模型時,會呼叫load_dataseth函式,從指定路徑讀取訓練資料圖片進行轉換并得到相應的四維陣列,

尺寸最后標注資料,chenkepu檔案夾下都是需要被識別的臉部影像,全部指定為0,其他檔案夾下是其他人臉,全部指定為1,最后回傳資料集,實作代碼如下:
IMAGE_SIZE = 64 #影像大小引數IMAGE_SIZE
def resize_image(image,value=BLACK)
return cv2.resize(constant,(height, width)
images = [] #保存圖片
labels = []#保存標簽
# 讀取圖片
def read_path(path_name):
for dir_item in os.listdir(path_name):
full_path = os.path.abspath(os.path.join(path_name, dir_item)
if os.path.isdir(full_path): #讀取路徑
read_path(full_path)
else:
if dir_item.endswith('.jpg'):
image = cv2.imread(full_path)
image = resize_image(image, IMAGE_SIZE, IMAGE_SIZE)
images.append(image)
labels.append(path_name)
return images, labels

def load_dataset(path_name): #加載資料時呼叫此函式
images, labels = read_path(path_name)
images = np.array(images)
labels = np.array([0 if label.endswith('chenkepu'else 1 for label in labels])#打上標簽
return images, labels #回傳圖片與標簽

5.3 模型訓練

5.3.1 資料集處理

收集人臉資料完成后,開始訓練模型,完成對所需資料的全面加載后,基于函式對資料集進行合理劃分,以得到分別用于訓練、測驗不同方面的集,本次運用比例為7:3的,劃分前,先會將資料全部都打亂,使得訓練集和測驗集的資料分布均勻,劃分好資料集以后,若Keras中運用的后端引擎為,則具備的屬性為,若為Theano,則具備的屬性為,為保證程式具有更高的穩健性,需先對具備的實際屬性進行判定,且以此為依據來調整維度順序,最后要開展歸一化處理,保證各特征值所對應的尺度能夠相對一致,若不開展該處理,所具備尺度不同的特征值對應的梯度會存在顯著差異,但對梯度進行更新的程序中,對應的學習率卻具備較高統一性,若其對應數值較小,則較小的梯度難以實作快速的更新,若其對應的數值較大,則較大的梯度在方向上面會缺乏穩定性,不易收斂,一般會將學習率對應的數值調低,以實作跟所具備尺度較大的維度實作匹配,進而保證損失函式能夠處于較低范圍內,因此,通過歸一化,把不同維度的特征值范圍調整到相近的范圍內,就能統一使用較大的學習率加速學習,因為圖片像素值的范圍都在0~255,圖片資料的歸一化可以簡單地除以255,實作代碼如下:

class Dataset:
def __init__(self, path_name):
# 訓練集
self.train_images = None
self.train_labels = None
# 驗證集
self.valid_images = None
self.valid_labels = None
# 測驗集
self.test_images = None
self.test_labels = None
# 資料集加載路徑
self.path_name = path_name
#def load(self, img_rows=IMAGE_SIZE, img_cols=IMAGE_SIZE,
img_channels=3, nb_classes=2):
# 加載資料集到記憶體
images, labels = load_dataset(self.path_name)
#訓練 驗證 訓練標簽 驗證標簽
train_images, valid_images, train_labels, valid_labels = train_test_split(images, labels, test_size=0.3, random_state=random.randint(0, 100))
_, test_images, _, test_labels = train_test_split(images, labels, test_size=0.5,
random_state=random.randint(0, 100))
if K.image_data_format() == 'channels_first':
train_images = train_images.reshape(train_images.shape[0], img_channels, img_rows, img_cols)
valid_images = valid_images.reshape(valid_images.shape[0], img_channels, img_rows, img_cols)
test_images = test_images.reshape(test_images.shape[0], img_channels, img_rows, img_cols)
self.input_shape = (img_channels, img_rows, img_cols)
else:
train_images = train_images.reshape(train_images.shape[0], img_rows, img_cols, img_channels)
valid_images = valid_images.reshape(valid_images.shape[0], img_rows, img_cols, img_channels)
test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, img_channels)
self.input_shape = (img_rows, img_cols, img_channels)
valid_labels = np_utils.to_categorical(valid_labels, nb_classes)
test_labels = np_utils.to_categorical(test_labels, nb_classes)
# 像素資料浮點化以便歸一化
train_images = train_images.astype('float32')
valid_images = valid_images.astype('float32')
test_images = test_images.astype('float32')
# 將其歸一化,影像的各像素值歸一化到0~1區間
train_images /= 255
valid_images /= 255
test_images /= 255
self.train_images = train_images #加載訓練資料
self.valid_images = valid_images #加載驗證資料
self.test_images = test_images #加載測驗資料
self.train_labels = train_labels #加載訓練標簽
self.valid_labels = valid_labels #加載驗證標簽
self.test_labels = test_labels #加載測驗標簽

5.3.2 搭建神經網路

該網路具備的整體結構列示在表5.1中,Layer指各層對應的具體型別,Filters指輸出濾波器的具體數量,Size為卷積核體積,為輸出資料資訊,

表5.1 網路結構概況

Layer (type)

Filters

Size

Output Shape

conv2d (Conv2D)

32

(3,3)

(22, 22, 32)

activation (Activation)

(22, 22, 32)

conv2d_1 (Conv2D)

32

(3,3)

(20, 20, 32)

activation_1 (Activation)

(20, 20, 32)

max_pooling2d (MaxPooling2D)

(2,2)

(10, 10, 32)

dropout (Dropout)

(10, 10, 32)

conv2d_2 (Conv2D)

64

(3,3)

(10, 10, 64)

activation_2 (Activation)

(10, 10, 64)

conv2d_3 (Conv2D)

64

(3,3)

(8, 8, 64)

activation_3 (Activation)

(8, 8, 64)

max_pooling2d_1 (MaxPooling2)

(2,2)

(4, 4, 64)

dropout_1 (Dropout)

(4, 4, 64)

flatten (Flatten)

(1024)

dense (Dense)

(512)

activation_4 (Activation)

(512)

dropout_2 (Dropout)

(512)

dense_1 (Dense)

(2)

activation_5 (Activation)

(2)

上表描述了搭建神經網路的詳細資訊,如下圖5.2是基于CNN的人臉識別神經網路結構圖,包含4個卷積層、池化及全連接層各2各、Flatten及分類層各1個,其中每一層的作用如下:

圖5.2 基于CNN的人臉識別神經網路結構圖

(1)卷積層(convolution layer):運用keras內包含的函式基于二維層面開展相關的卷積計算,輸入影像純為64*64,對其開展滑窗計算,如下圖5.2所示:

圖5.3 卷積計算

(2)激活函式層:激活函式將簡單的線性分類變成復雜的非線性分類以獲得更好的分類效果,該網路主要運用了relu函式,輸入的具體數值若小于0,則輸出的所有數值均為0,若輸入部分超過0,那么最終輸出的數值會與之相等,其優點為能夠在較短時間內實作收斂,其數學形式如下:

圖5.4 池化

(4)Dropout層:隨機對一定數量的輸入神經元間存在的鏈接進行斷開,避免出現過擬合情況,

(5)Flatten層:完成上面提及的各個程序后,資料仍舊以二維方式呈現,而基于該層能夠將其壓縮為一維,

(6)全連接層:負責將資料劃分成不同型別且開展回歸處理,該層會對512個特征進行保留并傳給下層,函式為基礎完成整個分類程序,基于分類層面,若神經元所輸出的具體數值較大,則更可能被歸為真實類別,所以通過該函式進行處理后,從上層得到的N個輸入會以映射方式形成與之對應的概率分布,且所有概率相加后為1,所對應概率最高的便是預估的具備類別,其函式式如下:

實作代碼如下:

# 建立模型
def build_model(self, dataset, nb_classes=2):

# 構建一個空的線性堆疊網路模型

self.model = Sequential()
self.model.add(Convolution2D(32, 3, 3, padding='same',
input_shape=dataset.input_shape)) # 2維卷積層
self.model.add(Activation('relu')) #
self.model.

self.model.add(MaxPooling2D(pool_size=(2, 2))) # 池化層
self.model.add(Dropout(0.25)) #
self.model.add(Dropout(0.5)) # Dropout層
self.model.add(Dense(nb_classes)) # Dense層
self.model.add(Activation('softmax')) #分類層,輸出最終結果
# 輸出模型概況
self.model.summary()

5.3.3 模型訓練

搭建神經網路后,開始訓練模型, 在開始訓練前,先對優化器對應的函式進行設定,優化器在訓練程序主要對相關引數進行調節,保證處于最優水平,本次基為主要依據來判定是不是要運用相應的動量方法,相對于傳統動量法,其效率更高,實作代碼如下:

# 訓練模型
def train(self, dataset, batch_size = 32, nb_epoch = 5, data_augmentation=True):
sgd = SGD(lr=0.01, decay=1e-6,
momentum=0.9, nesterov=True) # 采用SGD+momentum的優化器進行訓練,首先生成一個優化器物件
self.model.compile(loss='categorical_crossentropy',
optimizer=sgd,

if not data_augmentation:
self.model.fit(dataset.train_images,
dataset.train_labels,
batch_size=batch_size,
nb_epoch=nb_epoch,
validation_data=(dataset.valid_images, dataset.valid_labels),
shuffle=True)
featurewise_std_normalization=False, # 是否資料標準化(輸入資料除以資料集的標準差)
datagen.fit(dataset.train_images)
# 利用生成器開始訓練模型
self.model.fit(datagen.flow(dataset.train_images, dataset.train_labels,
batch_size=batch_size),

steps_per_epoch = int(2100/batch_size),
epochs=nb_epoch,

validation_data=(dataset.valid_images, dataset.valid_labels),verbose=1)

5.4 人臉識別GUI打卡小程式

人臉識別GUI打卡小程式使用Python GUI庫 Tkinter,實作了簽到打卡,模式選擇,錄入新人,查看簽到資訊等功能,使用Frame初始化頁面,組件使用grid布局排列,資料庫使用SqlLite3,在頁面創建時初始化,

  1. 初始資料庫

在啟動小程式時,首先使用sqlite3.connect函式創建或打開一個資料庫,然后在初始化資料庫時,創建打卡記錄表、管理員表、人臉標簽表表,在需要呼叫資料庫時,使用資料庫類中封裝的方法,主要實作代碼如下:

self.conn.execute('create table if not exists record_table('
'id integer primary key autoincrement,'
'name varchar(30) ,'
'record_time timestamp)')
self.conn.execute('create table if not exists name_table('
'id integer primary key autoincrement,'
'name varchar(30))')
self.conn.execute('create table if not exists admin_table('
'id integer primary key autoincrement,'
'username varchar(30),'
'password varchar(32))')

  1. 主頁頁面

啟動小程式后,通過Frame類創建一個視窗,使用grid布局,在網格布局上添加Label標簽,設定字體font為粗體,在網格布局上添加簽到打卡、錄入新人按鈕,給按鈕command屬性上系結點擊事件,分別跳轉到簽到打卡頁面與錄入新人界面,通過給按鈕bg屬性添加16進制顏色,改變按鈕的顏色,實作效果如圖5.1所示,

圖5.5 主頁頁面

  1. 簽到打卡

在主頁上點擊簽到打卡后,小程式將呼叫電腦攝像頭,對攝像頭外的人臉進行識別,在CNN模式下,加載訓練的H5模式模型檔案,對獲取的人臉進行識別,識別成功將在打卡記錄表中插入一條資料,在LBPH模式下,將加載訓練后的yml檔案,對人臉進行識別打卡,實作代碼如下:

def check(names,mode_id):
cam = cv2.VideoCapture(0)
if mode_id==1:
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('face_trainer/trainer.yml') #加載模型
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)#加載人臉識別器
font = cv2.FONT_HERSHEY_SIMPLEX
(gray[y:y + h, x:x + w])
if confidence < 100:
username = names[idnum-1]
confidence = "{0}%".format(round(100 - confidence))
cv2.putText(img, str(username
cv2.imshow('camera', img)
time.sleep(2)
db.record().insert_record(username) # 簽到資訊插入數
cam.release()
cv2.destroyAllWindows()
return
else:
idnum = "unknown"
confidence = "{0}%".format(round(100 - confidence))
cv2.putText(img, str(idnum), (x + 5, y - 5), font, 1, (0, 0, 255), 1)
cv2.putText(img, str(confidence),

break
elif mode_id==2:
face_recognition(names,True) #進行加載H5人臉識別模型
print(2)
else:
print("請選著模式")
cam.release()
cv2.destroyAllWindows()

  1. 登錄界面

點擊選單欄中登錄按鈕,創建Frame視窗,并銷毀主頁頁面,用戶名和密碼使用Entry控制元件實作獲取輸入的資料,獲取資料后,點擊按鈕觸發點擊事件中函式,把輸入的用戶名與密碼跟資料庫中保存的資料開展全面對比,若發現彼此能夠匹配,跳轉到主頁,同時將用戶狀態self.authority的值改為1,

圖5.6 登錄界面

  1. 注冊界面

點擊選單欄中注冊按鈕,創建Frame視窗,并銷毀主頁頁面,用戶名和密碼使用Entry控制元件實作獲取輸入的資料,獲取資料后,點擊按鈕觸發點擊事件中函式,將獲取到的用戶名與密碼向資料中插入資料,實作效果如圖5.3所示,

圖5.7 注冊界面

向資料庫中插入資料代碼如下:

usr_name = self.var_usr_name.get()
usr_pwd = self.var_usr_pwd.get()
if usr_name == "" or usr_pwd == "":
tkinter.messagebox.askokcancel(title='提示', message='請輸入用戶名或密碼!')
return
tkinter.messagebox.askokcancel(title='提示', message='注冊成功!')
self.mydb.add_admin(usr_name,usr_pwd)

#向資料庫插入一條資料

def add_admin(self,username,password):
sql = "INSERT INTO admin_table VALUES (null,?,?);"
self.conn.execute(sql,[username,password])
self.conn.commit()

  1. 增加人臉界面

在主頁上點擊增加新人按鈕,創建Frame視窗,并銷毀主頁頁面,在LBPH模式下,提示輸入姓名,輸入姓名后,點擊確定后呼叫OpenCV的VideoCapture函式打開電腦的攝像頭,獲取人臉并訓練資料,實作效果如圖5.3所示,

圖5.8 增加人臉界面

  1. 簽到資訊

管理員點擊簽到資訊按鈕,從資料庫讀取打卡記錄表,將所有資料都系結在Treeview上,實作效果如圖5.5所示,查詢資料庫實作代碼如下:

def query_record(self):
self.cursor.execute('select * from record_table') #執行一條查找的SQL資料
results = self.cursor.fetchall()
return results

圖5.9 簽到資訊

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

標籤:AI

上一篇:【Pytorch】學習筆記(四)

下一篇:人工智能正在學習如何創造自己

標籤雲
其他(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