主頁 >  其他 > orangepi 4B利用python3使用snowboy實作語音喚醒以及使用騰訊AI api實作語音識別、回復以及合成

orangepi 4B利用python3使用snowboy實作語音喚醒以及使用騰訊AI api實作語音識別、回復以及合成

2020-10-03 09:32:21 其他

orangepi 4B利用python3使用snowboy實作語音喚醒以及使用騰訊AI api實作語音識別、回復以及合成

  • 一個月來經歷無數個坑,終于完成教程,整理不易,轉載請注明出處,謝謝
  • 準備作業
    • 基本知識與儲備
    • 硬體方面準備
      • 準備材料
      • 鏡像下載地址
      • 鏡像安裝方法
    • 軟體方面準備
      • 騰訊AI開放平臺注冊開發者
      • 仔細查看開發檔案以及完成應用創建
  • 正式開始操作
    • 登錄以及環境配置
      • 切換中文環境以及安裝中文輸入法
      • 時區設定與中文支持
    • python3安裝及snowboy編譯
      • 安裝python3以及pip3
      • 安裝portaudio、pyaudio以及其他python3的支持包(重點,不安裝無法使用pyaudio,更無法使用語音識別)
      • 安裝swig以及ATLAS依賴
      • 獲取snowboySDK以及snowboy的編譯(注:4B需要修改的地方是重點否則無法完成編譯)
    • 利用騰訊AI api完成語音識別,回復,以及語音合成
      • 用到的python模塊以及引數設定
      • 用來生成需要位數的隨機字符
      • 介面鑒權撰寫
      • 利用wave模塊保存錄音
      • 使用pyaudio錄音
      • 使用pyaudio播放
      • 語音識別
      • 得到回答
      • 語音合成
    • 測驗snowboy以及修改demo
      • 測驗snowboy熱詞喚醒功能
      • 修改Demo
  • 后續延伸
    • 語音控制智能機器人
    • 語音控制家庭智能家居中心

一個月來經歷無數個坑,終于完成教程,整理不易,轉載請注明出處,謝謝

準備作業

基本知識與儲備

1.python基本語法、模塊庫的呼叫、常用模塊熟練呼叫
2.Linux環境的使用,熟悉apt,pip,git下載,python3環境配置
3.一顆能堅持下來的耐心
4.遇到問題能主動去找百度,而不是放棄

硬體方面準備

準備材料

一張16Gclass10SD卡、一個USB2.0或3.0的讀卡器、一個orangepi4B主板、一個USB麥克風(淘寶10塊還包郵那種)、一個支持AUX音響(沒有可以用耳機代替)、一個支持HDMI的顯示幕、一個鍵盤、一個滑鼠以及一個USB擴展塢
下面是我準備的SD卡以及讀卡器
在這里插入圖片描述

鏡像下載地址

我使用的是香橙派官方ubuntu-npu鏡像地址:香橙派官網.
選擇下載用戶手冊和原理圖在檔案中找到這個檔案OrangePi_4_ubuntu_bionic_desktop_linux4.4.179_npu_v1.3.tar.gz
也可以直接在這個鏈接下載: https://pan.baidu.com/s/17549ZGbNTLuJANoiJAA7JQ 提取碼: sja5
同時下載官方工具包找到Win32DiskImager以及SDFormatter或者百度自行下載
Win32DiskImagerSDFormatter

鏡像安裝方法

首先使用SDFormatter將SD卡格式化(這里請備份好自己的資料)第一步
格式化完成
接下來使用Win32DiskImager寫入鏡像到SD卡
寫入鏡像到SD卡
等待提示完成,拔出SD卡,插入opi4b卡槽插上顯示幕鍵盤滑鼠然后插上電源開機,先使用賬號為root密碼為orangepi登錄root登錄
打開LX終端
打開終端

使用install_to_emmc命令將鏡像燒錄至emmc(期間會提示輸入一次Y)

在這里插入圖片描述

提示燒錄完成執行reboot命令重啟香橙派,同時拔出SD卡
至此完成鏡像燒錄以及準備作業

軟體方面準備

騰訊AI開放平臺注冊開發者

很簡單,百度一大堆,自己也可以摸索,這里就不贅述了

仔細查看開發檔案以及完成應用創建

###################################################

正式開始操作

登錄以及環境配置

切換中文環境以及安裝中文輸入法

打開LX終端執行sudo apt-get install ttf-wqy-zenhei安裝中文字庫
執行sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
安裝中文輸入法
然后重啟就可以看到輸入法安裝完成(中英文切換方式為)

時區設定與中文支持

在LX終端設定上海時間
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
中文環境設定, 打開終端, 輸入以下命令
sudo dpkg-reconfigure locales
語言配置界面
然后往下找(鍵盤-按下鍵) , 在較后面, 找到 en_US.UTF-8 UTF-8,zh_CN.UTF-8 UTF-8,zh_CN.GBK GBK 如上圖所示,按空格選中, 按回車確定,
然后來到如下界面, 選擇 zh_CN.UTF-8, 確定, 按下回車鍵,
選擇中文
出現如下資訊, 配置完成,重啟系統即可,
完成

python3安裝及snowboy編譯

安裝python3以及pip3

終端執行

sudo apt-get install python3 python3-pip3

安裝portaudio、pyaudio以及其他python3的支持包(重點,不安裝無法使用pyaudio,更無法使用語音識別)

終端執行

sudo apt-get install portaudio19-dev python-all-dev python3-all-dev jackd1 portaudio19-doc jack-tools meterbridge liblo-dev
sudo apt-get install pyaudio

安裝swig以及ATLAS依賴

終端執行

sudo apt-get install swig
sudo apt-get install libatlas-base-dev

獲取snowboySDK以及snowboy的編譯(注:4B需要修改的地方是重點否則無法完成編譯)

終端執行

git clone https://github.com/Kitt-AI/snowboy.git

需要修改的地方①在snowboy/swig/Python3中的makefile
找到下圖中位置將ubuntu64替換為aarch64-ubuntu1604
修改1
地方②在snowboy/examples/Python3中的snowboydecoder.py檔案
將from * import snowboydetect 修改為import snowboydetect
在這里插入圖片描述
在snowboy/swig/Python3檔案夾打開終端執行make
至此snowboy編譯完成,

利用騰訊AI api完成語音識別,回復,以及語音合成

用到的python模塊以及引數設定

import base64
import json
import operator
import random
import time
import wave
from urllib import parse
import hashlib
import snowboydecoder
import signal
from contextlib import contextmanager
import requests
from pyaudio import PyAudio, paInt16
CHUNK = 1024  # wav檔案是由若干個CHUNK組成的,CHUNK我們就理解成資料包或者資料片段,
FORMAT = paInt16  # 表示我們使用量化位數 64位來進行錄音
CHANNELS = 1  # 代表的是聲道,1是單聲道,2是雙聲道,
RATE = 16000  # 采樣率 一秒內對聲音信號的采集次數,常用的有8kHz, 16kHz, 32kHz, 48kHz,11.025kHz, 22.05kHz, 44.1kHz,
RECORD_SECONDS = 5  # 錄制時間這里設定了5秒
app_id = '你的appid' # 從開發者平臺得到
appkey = '你的appkey ' # 從開發者平臺得到

用來生成需要位數的隨機字符

def roda(num):
    a = ''
    for i in range(0, num):
        a = a + random.choice('abcdefghijklmnopqrstuvwxyz123456789')
    return a

介面鑒權撰寫

官方解釋
用于計算簽名的引數在不同介面之間會有差異,但演算法程序固定如下4個步驟,
1…將<key, value>請求引數對按key進行字典升序排序,得到有序的引數對串列N
2.將串列N中的引數對按URL鍵值對的格式拼接成字串,得到字串T(如:key1=value1&key2=value2),URL鍵值拼接程序value部分需要URL編碼,URL編碼演算法用大寫字母,例如%E8,而不是小寫%e8
3.將應用密鑰以app_key為鍵名,組成URL鍵值拼接到字串T末尾,得到字串S(如:key1=value1&key2=value2&app_key=密鑰)
4.對字串S進行MD5運算,將得到的MD5值所有字符轉換成大寫,得到介面請求簽名
實際撰寫

def sortDict(data):
    return dict(sorted(data.items(), key=operator.itemgetter(0), reverse=False))

def getReqSign(params, appkey):
    # 1. 字典升序排序
    params1=sortDict(params)
    # 2. 拼按URL鍵值對
    str1 = parse.urlencode(params1)
    # 3. 拼接app_key
    str1 = str1 + '&' + 'app_key=' + appkey
    # 4. MD5運算并轉換大寫,回傳請求簽名
    m = hashlib.md5()
    m.update(str1.encode())
    str_md5 = m.hexdigest()
    return str_md5.upper()

利用wave模塊保存錄音

def save_wave_file(pa, filename, data):
    wf = wave.open(filename, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(pa.get_sample_size(paInt16))
    wf.setframerate(16000)
    print(type(data))
    wf.writeframes(b"".join(data))
    wf.close()

使用pyaudio錄音

def get_audio(filepath):  # 錄音實作
    print("請開始說話:")  # 提示文本
    pa = PyAudio()
    stream = pa.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
    print("*" * 10, "開始錄音:請在5秒內輸入語音")
    frames = []  # 定義一個串列
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):  # 回圈,采樣率 44100 / 1024 * 5
        data = stream.read(CHUNK)  # 讀取chunk個位元組 保存到data中
        frames.append(data)  # 向串列frames中添加資料data吃
    print("*" * 10, "錄音結束\n")
    stream.stop_stream()
    stream.close()  # 關閉
    pa.terminate()  # 終結
    save_wave_file(pa, filepath, frames)

使用pyaudio播放


def play(fname):
    ding_wav = wave.open(fname, 'rb')
    ding_data = ding_wav.readframes(ding_wav.getnframes())
    with no_alsa_error():
        audio = PyAudio()
    stream_out = audio.open(
        format=audio.get_format_from_width(ding_wav.getsampwidth()),
        channels=ding_wav.getnchannels(),
        rate=ding_wav.getframerate(), input=False, output=True)
    stream_out.start_stream()
    stream_out.write(ding_data)
    time.sleep(0.2)
    stream_out.stop_stream()
    stream_out.close()
    audio.terminate()

語音識別

1.請求引數

引數名稱是否必選資料型別資料約束示例資料描述
app_idint正整數1000001應用標識(AppId)
time_stampint正整數1493468759請求時間戳(秒級)
nonce_strstring非空且長度上限32位元組fa577ce340859f9fe隨機字串
signstring非空且長度固定32位元組簽名資訊,詳見介面鑒權
format 是int正整數2語音壓縮格式編碼,定義見下文描述
speechstring語音資料的Base64編碼,非空且長度上限8MB待識別語音(時長上限15s)
rateint正整數16000語音采樣率編碼,定義見下文描述,(不傳)默認即16KHz

語音壓縮格式編碼

格式名稱格式編碼
PCM1
WAV2
AMR3
SILK4

語音采樣率編碼

采樣率編碼
8KHz8000
16KHz16000

2. 回應引數

引數名稱是否必選資料型別描述
retint回傳碼; 0表示成功,非0表示出錯
msgstring回傳資訊;ret非0時表示出錯時錯誤原因
dataobject回傳資料;ret為0時有意義
+ formatintAPI請求中的格式編碼
+ rateintAPI請求中的采樣率編碼
+ textstring語音識別結果(UTF-8編碼)

撰寫示例

def get_text():
    get_audio('ceshi.wav') # 錄音
    fwave = open('ceshi.wav', mode='rb').read() # 打開錄音檔案
    base64Wav = base64.b64encode(fwave).decode('utf8') # 進行編碼(騰訊api要求base64編碼)
    params = {'app_id': app_id,
     		  'format': '2', 
    		  'rate': '16000',  
              'speech': base64Wav,     # base64編碼的語音資料
              'time_stamp': int(time.time()),  # 時間戳
              'nonce_str': roda(10)}
    params['sign'] = getReqSign(params, appkey) # 得到介面鑒權
    # print(params)
    url = 'https://api.ai.qq.com/fcgi-bin/aai/aai_asr'
    resp = requests.post(url, params)  # post請求
    return json.loads(resp.text).get('data').get('text') #回傳識別到的文本

得到回答

1. 請求引數

引數名稱是否必選資料型別資料約束示例資料描述
app_idint正整數1000001應用標識(AppId)
time_stampint正整數1493468759請求時間戳(秒級)
nonce_strstring非空且長度上限32位元組fa577ce340859f9fe隨機字串
signstring非空且長度固定32位元組簽名資訊,詳見介面鑒權
sessionstringUTF-8編碼,非空且長度上限32位元組10000會話標識(應用內唯一)
questionstringUTF-8編碼,非空且長度上限300位元組你叫啥用戶輸入的聊天內容

2. 回應引數

引數名稱是否必選資料型別描述
retint回傳碼; 0表示成功,非0表示出錯
msgstring回傳資訊;ret非0時表示出錯時錯誤原因
dataobject回傳資料;ret為0時有意義
sessionstringUTF-8編碼,非空且長度上限32位元組
answerstringUTF-8編碼,非空

撰寫示例

def get_chat_text(text):  # 得到回答
    paramsd = {
        'app_id': app_id,
        'session': '10000',
        'question': text,    # 問題文本
        'time_stamp': int(time.time()),
        'nonce_str': roda(17),
    }
    paramsd['sign'] = getReqSign(paramsd, appkey)
    urld = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat'
    respd = requests.post(urld, paramsd)
    return json.loads(respd.text).get('data').get('answer')  # 回傳回答文本

語音合成

1. 請求引數

引數名稱是否必選資料型別資料約束示例資料描述
app_idint正整數1000001應用標識(AppId)
time_stampint正整數1493468759請求時間戳(秒級)
nonce_strstring非空且長度上限32位元組fa577ce340859f9fe隨機字串
signstring非空且長度固定32位元組簽名資訊,詳見介面鑒權
speakerint正整數1語音發音人編碼,定義見下文描述
formatint正整數2合成語音格式編碼,定義見下文描述
volumeint[-10, 10]0合成語音音量,取值范圍[-10, 10],如-10表示音量相對默認值小10dB,0表示默認音量,10表示音量相對默認值大10dB
speedint[50, 200]100合成語音語速,默認100
textstringUTF-8編碼,非空且長度上限150位元組騰訊,你好!待合成文本
ahtint[-24, 24]0合成語音降低/升高半音個數,即改變音高,默認0
apcint[0, 100]58控制頻譜翹曲的程度,改變說話人的音色,默認58

語音發音人編碼

發音人編碼
普通話男聲1
靜琪女聲5
歡馨女聲6
碧萱女聲7

合成語音格式編碼

格式名稱編碼
PCM1
WAV2
MP33

2. 回應引數

引數名稱是否必選資料型別描述
retint回傳碼;
msgstring回傳資訊;ret非0時表示出錯時錯誤原因
dataobject回傳資料;ret為0時有意義
+ formatintAPI請求中的格式編碼
+ speechstring合成語音的base64編碼資料
+ md5sumstring合成語音的md5摘要(base64編碼之前)

base64解碼及寫入檔案

def ToFile(voicex, file):
    base64_data = voicex
    ori_image_data = base64.b64decode(base64_data)
    fout = open(file, 'wb')
    fout.write(ori_image_data)
    fout.close()

撰寫示例

def get_voice(text):
    test = {
        'app_id': app_id,
        'speaker': '6',
        'format': '2',
        'volume': '0',
        'speed': '100',
        'text': text,
        'aht': '0',
        'apc': '58',
        'time_stamp': int(time.time()),
        'nonce_str': roda(17),
    }
    test['sign'] = getReqSign(test, appkey)
    url2 = 'https://api.ai.qq.com/fcgi-bin/aai/aai_tts'
    resp2 = requests.post(url2, test)
    voicex=json.loads(resp2.text).get('data').get('speech')
    ToFile(str(voicex), 'audio.txt')
    ToFile(voicex, 'audio.mp3')
    return 'audio.mp3'

測驗snowboy以及修改demo

測驗snowboy熱詞喚醒功能

終端打開目錄 snowboy/examples/Python3

     cd  snowboy/examples/Python3

開始運行,喊一聲snowboy就可以聽到叮的一聲

    python3 demo.py resources/models/snowboy.umdl

修改Demo

interrupted = False

def signal_handler(signal, frame):
    global interrupted
    interrupted = True

def interrupt_callback():
    global interrupted
    return interrupted

# 回呼函式,語音識別在這里實作,修改也是在這里
def callbacks():
    global detector
    time.sleep(0.2)
    your_text=['哎,我在,你說','我來啦,我來啦,我來啦~','我是你的語音助手小貝']
    a=random.randint(1,3)
    print('小貝'+your_text[a])
    play('huda/xiaobeihuida'+ str(a) +'.wav')  # 為喚醒詞事先準備好的回答
    time.sleep(0.2)
    try:
        a = get_text()
        if a =='嗯' or '':
            continue
        print('你:'+a)
        b =get_chat_text(a)
        print('小貝:'+b)
        c = get_voice(b)
        play(c)
    except Exception:
        print('exception happened...')


@contextmanager
def no_alsa_error():
    try:
        asound = cdll.LoadLibrary('libasound.so')
        asound.snd_lib_error_set_handler(c_error_handler)
        yield
        asound.snd_lib_error_set_handler(None)
    except:
        yield
        pass


def wake_up():
    global detector
    model = 'xiaobeixiaobei.pmdl'  # 我的喚醒詞為 小貝小貝
    # 終止方法為ctrl+c
    signal.signal(signal.SIGINT, signal_handler)
    # 喚醒詞檢測函式,調整sensitivity引數可修改喚醒詞檢測的準確性
    detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
    print('正在聆聽... 請說喚醒詞:小貝小貝')
    # main loop
    # 回呼函式 detected_callback=snowboydecoder.play_audio_file
    # 修改回呼函式可實作我們想要的功能
    detector.start(detected_callback=callbacks,  # 自定義回呼函式
                   interrupt_check=interrupt_callback,
                   sleep_time=0.03)
    # 釋放資源
    detector.terminate()
#程式入口
if __name__ == "__main__":
    wake_up()

后續延伸

修改回呼函式可以完成更多作業

語音控制智能機器人

與arduino使用uart通信可實作智能控制機器人
等待后續更新
已經更新傳送門

語音控制家庭智能家居中心

加入mqtt可以作為語音控制家庭智能家居中心
等待后續更新

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

標籤:其他

上一篇:Python編譯成.so檔案后呼叫

下一篇:python基礎教程#菜鳥也能看懂的超簡單入門必備知識

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