主頁 >  其他 > 樹莓派視覺小車 -- 人臉追蹤(人臉識別、PID控制舵機運動)

樹莓派視覺小車 -- 人臉追蹤(人臉識別、PID控制舵機運動)

2021-11-08 09:00:26 其他

目錄

效果展示

基礎理論(人臉識別)

1、基于特征的演算法

2、基于影像的演算法

3、Haar特征

4、Adaboost級聯決策器

API

基礎理論(PID演算法)

1、作用

應用場景

2、PID原理

1、P(比例)

2、D(微分)

3、I(積分)

3、PID公式

1、位置式演算法

2、增量式演算法

一、初始化

二、人臉識別

主程式

1、創建人臉分類器

2、打開攝像頭

3、轉灰度圖

4、人臉檢測

5、獲取人臉坐標、在影像上框出人臉

代碼

三、PID處理

主程式

函式前部

1、獲取誤差(x、y方向)

2、PID控制引數

3、保存本次誤差

4、得到最終的PID值(P分量)

5、限值

對比:不用PID處理

代碼

四、舵機運動

主程式(多執行緒舵機控制)

舵機運動函式

總代碼


效果展示

基礎理論(人臉識別)

人臉檢測演算法按照方法可以被分為兩大類,基于特征的演算法、基于影像的演算法

1、基于特征的演算法

基于特征的演算法就是通過提取影像中的特征和人臉特征進行匹配如果匹配上了就說明是人臉,反之則不是,提取的特征是人為設計的特征,例如Haar,FHOG,特征提取完之后,再利用分類器去進行判斷,通俗的說就是采用模板匹配,就是用人臉的模板影像與待檢測的影像中的各個位置進行匹配,匹配的內容就是提取的特征,然后再利用分類器進行判斷是否有人臉,

2、基于影像的演算法

基于影像的演算法將影像分為很多小視窗,然后分別判斷每個小窗是否有人臉,通常基于影像的方法依賴于統計分析和機器學習,通過統計分析或者學習的程序來找到人臉和非人臉之間的統計關系來進行人臉檢測,最具代表性的就是CNN,CNN用來做人臉檢測也是目前效果最好,速度最快的

3、Haar特征

我們使用機器學習的方法完成人臉檢測,首先需要大量的正樣本影像(面部影像)和負樣本影像〈不含面部的影像)來訓練分類器,我們需要從其中提取特征,下圖中的 Haar特征會被使用,就像我們的卷積核,每一個特征是一個值,這個值等于黑色矩形中的像素值之和減去白色矩形中的像素值之和

Haar特征值反映了影像的灰度變化情況,例如︰臉部的一些特征能由矩形特征簡單的描述,眼睛要比臉頰顏色要深,鼻梁兩側比鼻梁顏色要深,嘴巴比周圍顏色要深等,

Haar特征可用于于影像任意位置大小也可以任意改變,所以矩形特征值矩形模版類別矩形位置和矩形大小這三個因素的函式,故類別、大小和位置的變化,使得很小的檢測視窗含有非常多的矩形特征,

4、Adaboost級聯決策器

得到影像的特征后訓練一個決策樹構建的adaboost級聯決策器識別是否為人臉

人臉檢測,把影像分成一個個小塊,對每一個小塊判斷是否是人臉,假如一張圖被分成了5000塊,則速度非常慢,為了提高效率,OpenCV 提供 cascades 來避免這種情況,提供了一系列的xml檔案,(cascades :級聯)

cascade 對于每個資料塊,它都進行一個簡單快速的檢測若過,會再進行一個更仔細的檢測,該演算法有 30 到 50 個這樣的階段,或者說 cascade,只有通過全部階段,cascade才會判斷檢測到人臉,這樣做的好處是:大多數小塊都會在前幾步就產生否定反饋,節約時間

API

detectMultiScale :

灰度圖檢測人臉,輸出是人臉區域的外接矩形框

faces = face_cascade.detectMultiScale(self,
                                     image: Any,
                                     scaleFactor: Any = None,
                                     minNeighbors: Any = None,
                                     flags: Any = None,
                                     minSize: Any = None,
                                     maxSize: Any = None) -> None

引數:

1.image:表示的是要檢測的輸入影像

2.scaleFactor:表示每次影像尺寸減小的比例

3. minNeighbors:至少檢測次數,若為3,表示每一個目標至少要被檢測到3次才算是真的目標(因為周圍的像素和不同的視窗大小都可以檢測到人臉)

4.flags,要么使用默認值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果設定為CV_HAAR_DO_CANNY_PRUNING,那么函式將會使用Canny邊緣檢測來排除邊緣過多或過少的區域,因此這些區域通常不會是人臉所在區域

5.minSize為目標的最小尺寸

6.minSize為目標的最大尺寸

基礎理論(PID演算法)

1、作用

需要將某一個物理量“保持穩定”的場合(比如維持平衡、穩定溫度、轉速等),PID都會派上大用場,

黃色折線:控制指令, 綠色曲線:飛機運動軌跡

飛機具有慣性,所以不能隨著我們的指令瞬間移動,所以飛機的運動軌跡是一條曲線

我們的目標是讓飛機快速準確的懸停在目標高度,兩條曲線貼合越緊密,則說明控制效果越好

應用場景

1、平衡車傾斜角度

2、穿越機旋轉速度

3、對于反饋值向目標值的調節都適用PID控制

2、PID原理

1、P(比例)

測量無人機當前位置與目標位置的距離,距離越遠,我們就用越大的力把物體推回去

這個程序類似于彈簧(離平衡位置越遠,回復力越大):

P控制好,就相當于在目標點與飛機之間綁了一個彈簧,永遠會把飛機往平衡位置拉

缺陷:

但由于飛機本身具有一定的慣性,到達目標點時雖然沒有受力,但還是會偏移一定的距離,P越大,則說明彈簧越“硬”,回復速度越快,同時震動的頻率越高,如果只有P,那么飛機會反復處于矯正過度狀態,無休止運動

越接近目標,P的作用越溫柔

所以要控制好飛機,不僅要知道飛機的位置,還要知道飛機的速度,我們引入(D)

2、D(微分)

通過微分的方法來計算運動速度

D越大,物體運動時的阻力越大(這個阻力和物體的運動方向相反),

(場景模擬:把物體扔入液體,物體速度越大,阻力越大;液體密度越大,阻力越大)

D值適當:物體可以很快停留在目標位置,

D值過大:阻力很大,抵消回復力,讓控制變得遲鈍,

(D讓速度趨于0)

在動態控制中,最需要調節的就是P和D兩個引數, P和D就是為你要控制的系統模擬出合適的彈簧和緩沖液,

3、I(積分)

I的作用:減小靜態情況下的誤差,讓受控物理量盡可能接近目標值

只有在受到穩定的外界干擾,或是存在系統誤差的情況下,I值才能派上用場

飛機會不停檢測位置是否存在偏差,偏差越大,持續時間越長,矯正的力越大

舉例:

以熱水為例,假如把加熱裝置帶到了非常冷的地方,開始燒水,需要燒到50℃:

在P的作用下,水溫慢慢升高,直到升高到45℃時,他發現了一個不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了,

P:我和目標已經很近了,只需要輕輕加熱就可以了
D:加熱和散熱相等,溫度沒有波動,我好像不用調整什么

于是,水溫永遠地停留在45℃,永遠到不了50℃,

設定一個積分量I,

I:只要偏差存在,就不斷地對偏差進行積分(累加),并反應在調節力度上,

這樣一來,即使45℃和50℃相差不太大,但是隨著時間的推移,只要沒達到目標溫度,這個積分量就不斷增加,系統就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!
到了目標溫度后,假設溫度沒有波動,積分值就不會再變動,這時,加熱功率仍然等于散熱功率,但是,溫度是穩穩的50℃,

P、I、D分別代表著:現在、過去、未來

3、PID公式

Kp -> 控制器的比例系數
Ti -> 控制器的積分時間,也稱積分系數
Td -> 控制器的微分時間,也稱微分系數

1、位置式演算法

其中T為采樣時間,由于T之類的引數是常量,所以將Kp乘入公式中可以轉換成另一種寫法,這個公式叫位置式演算法,

位置式PID的輸出與過去的所有狀態有關,計算時要對e(每一次的控制誤差)進行累加,這個計算量非常大,而明顯沒有必要,而且小車的PID控制器的輸出并不是絕對數值,而是一個△,代表增多少,減多少,換句話說,通過增量PID演算法,每次輸出是PWM要增加多少或者減小多少,而不是PWM的實際值,所以明白增量式PID就行了

2、增量式演算法

由于要不斷的累加ej,增加了計算量,所以這個公式又可以轉換為增量式演算法

PID = Uk + KP*【E(k)-E(k-1)】+ KI*E(k) + KD*【E(k)-2E(k-1)+E(k-2)】

一、初始化

# 初始化PCA9685和舵機
def Servo_Init():
    global servo_pwm
    servo_pwm = Adafruit_PCA9685.PCA9685()  # 實體話舵機云臺

    # 設定舵機初始值,可以根據自己的要求除錯
    servo_pwm.set_pwm_freq(60)  # 設定頻率為60HZ
    servo_pwm.set_pwm(5, 0, 350)  # 底座舵機
    servo_pwm.set_pwm(4, 0, 370)  # 傾斜舵機
    time.sleep(1)


# 攝像頭初始化
def Capture_Init():
    global capture
    # 初始化攝像頭并設定闕值
    capture = cv2.VideoCapture(0)

    # 設定顯示的解析度,設定為320×240 px(即攝像頭大小)
    capture.set(3, 320)
    capture.set(4, 240)

二、人臉識別

主程式

while True:
        # 1 識別人臉
        (x, y) = Face_Detect()

1、創建人臉分類器

# 1 實體化官方訓練好的人臉識別器
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

2、打開攝像頭

# 2 獲取每幀影像
    ret,frame = capture.read()
    cv2.imshow('frame', frame)
    image = frame

3、轉灰度圖

# 3 轉灰度圖
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray', gray)

4、人臉檢測

# 4 人臉檢測
    faces = face_cascade.detectMultiScale(gray, 1.3, 1)

5、獲取人臉坐標、在影像上框出人臉

# 5 獲取人臉坐標并在影像上框出人臉
    try:
        x,y,w,h = faces[0]
        cv2.rectangle(image, (x,y),(x+w,y+h), (255,0,255),3)
        cv2.imshow('image',image)
        return (x+w/2, y+h/2)
    except:
        return (0, 0)

代碼

# 1 識別人臉
def Face_Detect():
    # 1 實體化官方訓練好的人臉識別器
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

    # 2 獲取每幀影像
    ret,frame = capture.read()
    cv2.imshow('frame', frame)
    image = frame
    
    # 3 轉灰度圖
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray', gray)
    
    # 4 人臉檢測
    faces = face_cascade.detectMultiScale(gray, 1.3, 1)
    
    # 5 獲取人臉坐標并在影像上框出人臉
    try:
        x,y,w,h = faces[0]
        cv2.rectangle(image, (x,y),(x+w,y+h), (255,0,255),3)
        cv2.imshow('image',image)
        return (x+w/2, y+h/2)
    except:
        return (0, 0)

三、PID處理

主程式

# 識別到人臉
        if not (x==0 and y==0):
            # 2 PID舵機控制
            PID_Servo_Control(x, y)

函式前部

# 2 PID舵機控制(這里分別設定使用PID和不用PID的情況)
def PID_Servo_Control(x, y):
    global error_x, error_y, last_error_x, last_error_y, pid_X_P, pid_Y_P
    # 下面開始pid演算法:
    # pid總公式:PID = Uk + KP*【E(k)-E(k-1)】 + KI*E(k) + KD*【E(k)-2E(k-1)+E(k-2)】 
    # 這里只用到了p,所以公式為:P = Uk + KP*【E(k)-E(k-1)】
    # uk:原值   E(k):當前誤差   KP:比例系數   KI:積分系數   KD:微分系數
    
    # 使用PID(可以發現舵機云臺運動比較穩定)

1、獲取誤差(x、y方向)

注:(x,y)是當前獲得的影像中心坐標(前面有過處理的:(x+width/2, y+height/2)),

相當于是計算影像中心對于攝像頭的x、y軸(水平、豎直中點線) 的偏移程度,

# 1 獲取誤差(x和y方向)(分別計算距離x、y軸中點的誤差)
    error_x = x - 160   # width:320
    error_y = y - 120   # height:240

2、PID控制引數

這里只用到了p,所以公式為:P = Uk + KP*【E(k)-E(k-1)】

計算PID的P分量:

# 2 PID控制引數
    pwm_x = error_x*3 + (error_x - last_error_x)*1
    pwm_y = error_y*3 + (error_y - last_error_y)*1
    # 這里pwm(p分量) = 當前誤差*3 + 上次的誤差增量*1

3、保存本次誤差

# 3 保存本次誤差,以便下一次運算
    last_error_x = error_x
    last_error_y = error_y

4、得到最終的PID值(P分量)

# 4 最終PID值(舵機旋轉角度)
    pid_X_P -= int(pwm_x/50)
    pid_Y_P -= int(pwm_y/50)
    # p(pid的p) = 原值 + p分量

5、限值

# 5 限值(0~650)
    if pid_X_P>650:
        pid_X_P=650
    if pid_X_P<0:
        pid_X_P=0
    if pid_Y_P>650:
        pid_Y_P=650
    if pid_X_P<0:
        pid_Y_P=0

對比:不用PID處理

這里做了一個不用PID處理的,和之前PID處理的做一個對比,

有PID處理:舵機移動平穩,

無PID處理:舵機移動不平穩(有比較明顯的搖搖晃晃),

# 不用PID(舵機云臺上下左右亂晃)
    if x<160:
        pid_X_P += 2
    elif x>=160:
        pid_X_P -= 2
    if y<120:
        pid_Y_P += 2
    elif y>=120:
        pid_Y_P -= 2

代碼

# 2 PID舵機控制(這里分別設定使用PID和不用PID的情況)
def PID_Servo_Control(x, y):
    global error_x, error_y, last_error_x, last_error_y, pid_X_P, pid_Y_P
    # 下面開始pid演算法:
    # pid總公式:PID = Uk + KP*【E(k)-E(k-1)】 + KI*E(k) + KD*【E(k)-2E(k-1)+E(k-2)】 
    # 這里只用到了p,所以公式為:P = Uk + KP*【E(k)-E(k-1)】
    # uk:原值   E(k):當前誤差   KP:比例系數   KI:積分系數   KD:微分系數
    
    # 使用PID(可以發現舵機云臺運動比較穩定)
    
    # 1 獲取誤差(x和y方向)(分別計算距離x、y軸中點的誤差)
    error_x = x - 160   # width:320
    error_y = y - 120   # height:240
    
    # 2 PID控制引數
    pwm_x = error_x*3 + (error_x - last_error_x)*1
    pwm_y = error_y*3 + (error_y - last_error_y)*1
    # 這里pwm(p分量) = 當前誤差*3 + 上次的誤差增量*1

    # 3 保存本次誤差,以便下一次運算
    last_error_x = error_x
    last_error_y = error_y
    
    # 4 最終PID值(舵機旋轉角度)
    pid_X_P -= int(pwm_x/50)
    pid_Y_P -= int(pwm_y/50)
    # p(pid的p) = 原值 + p分量
    
    
    '''# 不用PID(舵機云臺上下左右亂晃)
    if x<160:
        pid_X_P += 2
    elif x>=160:
        pid_X_P -= 2
    if y<120:
        pid_Y_P += 2
    elif y>=120:
        pid_Y_P -= 2'''
    
    # 5 限值(0~650)
    if pid_X_P>650:
        pid_X_P=650
    if pid_X_P<0:
        pid_X_P=0
    if pid_Y_P>650:
        pid_Y_P=650
    if pid_X_P<0:
        pid_Y_P=0

四、舵機運動

主程式(多執行緒舵機控制)

多執行緒呼叫舵機控制函式,

# 多執行緒處理(舵機控制)
        servo_tid = threading.Thread(target=Robot_servo) 
        #                                   函式               引數
        servo_tid.setDaemon(True)   # 設定守護執行緒,防止程式無限掛起
        servo_tid.start()           # 開啟執行緒

舵機運動函式

# 舵機旋轉
def Robot_servo():
    servo_pwm.set_pwm(5,0,650 - pid_X_P)
    servo_pwm.set_pwm(4,0,650 - pid_Y_P)

總代碼

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
from __future__ import division
import sys
reload(sys)
sys.setdefaultencoding('utf8')


# 人臉跟蹤(pid舵機云臺)

import cv2
import time  
import numpy as np
import Adafruit_PCA9685
import threading

    
#舵機云臺的每個自由度需要4個變數
error_x=500            #當前誤差值
last_error_x=100       #上一次誤差值
error_y=500
last_error_y=100

# 舵機的轉動角度(初始轉動角度)
pid_Y_P = 280
pid_X_P = 300     


# 初始化PCA9685和舵機
def Servo_Init():
    global servo_pwm
    servo_pwm = Adafruit_PCA9685.PCA9685()  # 實體話舵機云臺
    
    # 設定舵機初始值,可以根據自己的要求除錯
    servo_pwm.set_pwm_freq(60)  # 設定頻率為60HZ
    servo_pwm.set_pwm(5,0,350)  # 底座舵機
    servo_pwm.set_pwm(4,0,370)  # 傾斜舵機
    time.sleep(1)


# 攝像頭初始化
def Capture_Init():
    global capture
    #初始化攝像頭并設定闕值
    capture = cv2.VideoCapture(0)
    
    # 設定顯示的解析度,設定為320×240 px(即攝像頭大小)
    capture.set(3, 320)
    capture.set(4, 240)


# 舵機旋轉
def Robot_servo():
    servo_pwm.set_pwm(5,0,650 - pid_X_P)
    servo_pwm.set_pwm(4,0,650 - pid_Y_P)


# 1 識別人臉
def Face_Detect():
    # 1 實體化官方訓練好的人臉識別器
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

    # 2 獲取每幀影像
    ret,frame = capture.read()
    cv2.imshow('frame', frame)
    image = frame
    
    # 3 轉灰度圖
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray', gray)
    
    # 4 人臉檢測
    faces = face_cascade.detectMultiScale(gray, 1.3, 1)
    
    # 5 獲取人臉坐標并在影像上框出人臉
    try:
        x,y,w,h = faces[0]
        cv2.rectangle(image, (x,y),(x+w,y+h), (255,0,255),3)
        cv2.imshow('image',image)
        return (x+w/2, y+h/2)
    except:
        return (0, 0)


# 2 PID舵機控制(這里分別設定使用PID和不用PID的情況)
def PID_Servo_Control(x, y):
    global error_x, error_y, last_error_x, last_error_y, pid_X_P, pid_Y_P
    # 下面開始pid演算法:
    # pid總公式:PID = Uk + KP*【E(k)-E(k-1)】 + KI*E(k) + KD*【E(k)-2E(k-1)+E(k-2)】 
    # 這里只用到了p,所以公式為:P = Uk + KP*【E(k)-E(k-1)】
    # uk:原值   E(k):當前誤差   KP:比例系數   KI:積分系數   KD:微分系數
    
    # 使用PID(可以發現舵機云臺運動比較穩定)
    
    # 1 獲取誤差(x和y方向)(分別計算距離x、y軸中點的誤差)
    error_x = x - 160   # width:320
    error_y = y - 120   # height:240
    
    # 2 PID控制引數
    pwm_x = error_x*3 + (error_x - last_error_x)*1
    pwm_y = error_y*3 + (error_y - last_error_y)*1
    # 這里pwm(p分量) = 當前誤差*3 + 上次的誤差增量*1

    # 3 保存本次誤差,以便下一次運算
    last_error_x = error_x
    last_error_y = error_y
    
    # 4 最終PID值(舵機旋轉角度)
    pid_X_P -= int(pwm_x/50)
    pid_Y_P -= int(pwm_y/50)
    # p(pid的p) = 原值 + p分量
    
    
    '''# 不用PID(舵機云臺上下左右亂晃)
    if x<160:
        pid_X_P += 2
    elif x>=160:
        pid_X_P -= 2
    if y<120:
        pid_Y_P += 2
    elif y>=120:
        pid_Y_P -= 2'''
    
    # 5 限值(0~650)
    if pid_X_P>650:
        pid_X_P=650
    if pid_X_P<0:
        pid_X_P=0
    if pid_Y_P>650:
        pid_Y_P=650
    if pid_X_P<0:
        pid_Y_P=0

        

if __name__ == '__main__':
    # 攝像頭初始化
    Capture_Init()
    # 舵機初始化
    Servo_Init()
    
    while True:
        # 1 識別人臉
        (x, y) = Face_Detect()
        
        # 識別到人臉
        if not (x==0 and y==0):
            # 2 PID舵機控制
            PID_Servo_Control(x, y)
    
        # 多執行緒處理(舵機控制)
        servo_tid = threading.Thread(target=Robot_servo) 
        #                                   函式               引數
        servo_tid.setDaemon(True)   # 設定守護執行緒,防止程式無限掛起
        servo_tid.start()           # 開啟執行緒
        # Robot_servo(pid_X_P, pid_Y_P)
        
        if cv2.waitKey(1)=='q':
            break
            
    capture.release()
    cv2.destroyAllWindows()

可能有一些不正確或者理解有誤的地方,還請不吝賜教,(也可以互相交流一下想法)

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

標籤:其他

上一篇:【影像識別】基于傳統影像處理實作路面裂縫檢測識別系統設計matlab代碼

下一篇:【歷史上的今天】11 月 7 日:圖靈獎女性得主誕生;Twitter 告別 140 字符時代;首位中國 AI 主播

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