精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>人臉驗證解鎖的安全系統開源分享

人臉驗證解鎖的安全系統開源分享

2022-10-27 | zip | 0.03 MB | 次下載 | 免費

資料介紹

描述

歡迎,好奇的朋友!我們生活在一個互聯網革命的時代,現在比以往任何時候都更容易進行實驗和創新,以提出可以對全球數百萬人產生積極影響的絕妙想法。

曾經想為您家中的架子、抽屜、衣柜或門增加一點額外的安全性嗎?當談到使用互聯網進行創新時,在我們可用的數千個平臺和工具中,有幾個脫穎而出的是. 在這個項目中,我們將修改一個標準架子,使其擁有一個使用人臉驗證解鎖的安全系統。我們將C#構建一個Windows 窗體應用程序,它可以存儲、驗證和解鎖受信任的面孔。用于面部驗證和Bolt IoT Cloud API,用于與 Bolt WiFi 模塊和 Arduino 進行通信我們將 Bolt WiFi 模塊與Arduino Uno連接,它將控制伺服電機鎖定/解鎖門。ArduinoBolt IoTFacePlusPlus API

興奮的?讓我們開始吧。

背景

我將這個項目作為由 Internshala Trainings 舉辦的創新挑戰和物聯網培訓的一部分。他們的培訓有助于了解處理 API 服務、面向對象編程以及最重要的是使用 Bolt WiFi 模塊的基礎知識。可以在此處找到作為本次培訓的一部分完成的 Capstone 項目的概要在這個項目的開發過程中,很多這些概念都派上了用場。因此,非常感謝 Internshala 團隊讓這一切成為可能。

第 1 步:構建軟件

我們將使用 Visual Studio 構建一個 Windows 窗體應用程序。此應用程序在 Windows 機器上運行,將負責管理授權人臉、使用 FacePlusPlus API 驗證人臉以及與 Bolt WiFi 模塊通信。我們將使用 C# 進行編碼。

啟動 Visual Studio 并創建新的 Windows 窗體應用程序項目。如果您完全不熟悉 Visual Studio,我建議您學習使用 Visual Studio 進行 Windows 窗體應用程序開發的基礎知識。都是很好的入門資源。

在本教程中,我將僅使用項目中執行主要和重要功能的代碼片段來解釋代碼。瀏覽整個代碼將是乏味且不必要的,因為其中大部分都是不言自明且有據可查的。

我們的 Visual Studio 項目將 3 個庫用于各種目的。他們是:

  • AForge .NET:一種流行的 .NET 框架,用于 Windows 中的圖像處理。我們使用它從網絡攝像頭捕獲圖像。
  • Bolt IoT API .NET:我用 C# 編寫的非官方客戶端庫,用于與 Bolt Cloud API 進行通信。
  • Newtonsoft JSON:一種流行的 .NET 高性能 JSON 框架。用于在我們的項目中解析 A??PI 響應。

注意:為了清楚了解上述 API 中不同方法的用法,請參閱各自的文檔here herehere

入門

在開始編碼之前,我們需要設置一些東西。

1. Bolt Cloud API 憑證

如果您還沒有,請訪問cloud.boltiot.com并設置一個帳戶。登錄后,將您的 WiFi 模塊與 Bolt Cloud 鏈接。為此,請在您的手機上下載 Bolt IoT 設置應用程序。按照應用程序中的說明將您的設備與您的帳戶相關聯。這涉及將 Bolt 與本地 WiFi 網絡配對。成功鏈接后,您的儀表板將顯示您的設備。您現在可以從儀表板獲取您的設備 IDAPI 密鑰。

2. FacePlusPlus API 憑證

我們在這個項目中依賴的另一個 API 服務是FacePlusPlus API它是一個免費平臺,提供各種圖像識別服務。我們將其用于面部識別。創建一個帳戶并轉到 FacePlusPlus 控制臺。轉到下方并單擊記下新生成的API KeyAPI Secret API KeyApps+Get API Key

?
poYBAGNYe5CASqNCAAAZOaOqW8g988.png
?

現在您應該準備好以下內容:

private readonly string BOLT_DEVICE_ID = "BOLTXXXXXX";
private readonly string BOLT_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  
private readonly string FPP_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
private readonly string FPP_API_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

我們創建一個名為 的 Bolt 類的新全局實例myBolt,通過它我們將與 WiFi 模塊進行所有未來的通信:

myBolt = new Bolt(BOLT_API_KEY, BOLT_DEVICE_ID);

也就是說,現在讓我們看看我們的應用程序如何執行一些核心功能。

1. 鎖定/解鎖門

我們設計了這樣的電路,當數字引腳 0 為HIGH時,門應該被鎖定,而當數字引腳 3 為 時HIGH,門應該被解鎖。稍后我們討論電路原理圖時會更清楚地說明這一點。

對于鎖定,我們使用DigitalMultiWrite庫中的方法將HIGH值寫入 D0 并將 LOW 值寫入 D3。這將向 Arduino 發出鎖門信號同樣對于解鎖,我們將LOW值寫入 D0 并將HIGH值寫入 D3。這將向 Arduino 發出解鎖門的信號。我們將在本教程后面討論 Arduino 代碼和電路設計

執行鎖定的代碼:

private async Task LockDoor()
{
   MultiPinConfig multiPinConfig = new MultiPinConfig();
   MultiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.High); //Lock Signal 
   multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); //Unlock Signal
  
   await myBolt.DigitalMultiWrite(multiPinConfig);
  
   multiPinConfig = new MultiPinConfig();
   multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); //Lock Signal 
   multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); //Unlock Signal
  
   await myBolt.DigitalMultiWrite(multiPinConfig);
}

執行解鎖的代碼:

private async Task UnlockDoor()
{
   MultiPinConfig multiPinConfig = new MultiPinConfig();
   multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); //Lock Signal 
   multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.High); //Unlock Signal
  
   await myBolt.DigitalMultiWrite(multiPinConfig);
  
   multiPinConfig = new MultiPinConfig();
   multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); //Lock Signal 
   multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); //Unlock Signal
  
   await myBolt.DigitalMultiWrite(multiPinConfig);
}

2. 添加/刪除可信面孔

可信人臉的圖像數據被編碼為 Base64 字符串,并存儲在本地機器中。還存儲了每個人臉的對應名稱列表。在我們的程序中,要添加人臉,我們首先驗證當前幀中是否有可用的人臉。我們使用FacePlusPlus的Detect API來執行此操作。它返回一個 JSON 響應,其中包含檢測到的面部特征。如果沒有檢測到人臉,則響應將是[]一旦檢測到人臉,我們就會保存圖像的 base64 編碼字符串和相應的名稱。這是添加可信面孔的視頻演示。

演示 - 添加受信任的面孔。
?

去除臉部非常簡單。按刪除按鈕將從保存的列表中刪除圖像數據和名稱。

添加和保存人臉信息的代碼:

//Converting image to base64 string and adding it to the list. 
ImageDataList.Add(ImageToBase64((Image)PreviewBox.Image.Clone()));
//Adding name of the face to the list
NameList.Add(FaceNameTextBox.Text.Trim());
  
//Saves the face image data as a base encoded string, along with its name
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Save();

刪除人臉信息的代碼:

//Removing face information at specified position in the list
NameList.RemoveAt(e.RowIndex);
ImageDataList.RemoveAt(e.RowIndex);
  
//Saving the the list after removal of a face
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.Save();

查看附加項目中的代碼,其中每行中都將流程解釋為注釋,以便有一個清晰的想法。

3.人臉驗證

我們通過使用FacePlusPlus 中的比較 API來驗證人臉是否可信。在此過程中,我們線性迭代保存列表中的每個人臉,并將其與捕獲的圖像進行比較。如果 API 返回超過 80% 的置信度,我們將解鎖門。

進行此比較的代碼如下所示:

WebClient client = new WebClient();
  
byte[] response = client.UploadValues("https://api-us.faceplusplus.com/facepp/v3/compare", new NameValueCollection()
{
    { "api_key", FPP_API_KEY },
    { "api_secret", FPP_API_SECRET },
    { "image_base64_1", face1Base64},
    { "image_base64_2", face2Base64}
    });
});
  
string confidence = JObject.Parse(System.Text.Encoding.UTF8.GetString(response))["confidence"].ToString();

WebClient.UploadValues方法將請求連同要比較的兩個人臉的 base64 編碼人臉數據和我們的 API 憑據一起發送到 FacePlusPlus API。使用Newtonsoft JSON庫解析響應并confidence獲取值。閱讀比較 API文檔以清楚地理解參數

4. 聽鐘線

我們計劃提供一個物理按鈕,類似于呼叫鈴按鈕,以便用戶可以在看著攝像頭時按下以解鎖門。為了使這成為可能,我們需要創建一個新的專用線程來持續偵聽鈴聲按鈕按下事件。

在本教程的后面,我們將看到如何使用按鈕以及按下按鈕時它將如何使 Bolt WiFi 模塊HIGH的 D4 引腳。現在,我們只假設上述情況。所以在這個線程中,我們不斷地計算 D4 引腳的值。如果是,我們將其作為鈴聲事件并進行人臉捕獲和驗證。DigitalReadHIGH

這是將在鈴聲偵聽線程上連續運行的代碼:

while (ListenForBell)
{
    Response R = await myBolt.DigitalRead(DigitalPins.D4);
    if (R.Value == "1")
    {
        RingBell_Click(null, null);
        Thread.Sleep(2000);
    }
    Thread.Sleep(2000);
}

我們在每次迭代之間停止并等待 2 秒。否則會很快耗盡 Bolt Cloud API 的使用配額。

第 2 步:構建 Visual Studio 項目

在此處下載整個項目在 Visual Studio 中打開文件。解決方案加載后,打開文件并使用您的 API 憑據更新代碼。按名為“開始”的綠色播放按鈕,構建并運行程序。 Facebolt Doorlock.slnForm1.cs

該程序允許您從連接到系統的攝像頭設備中進行選擇,并查看來自攝像頭的實時信息。您可以添加/刪除受信任的面孔。開始人臉監控。一旦程序驗證了您的 Bolt 設備的連接性,您就可以直接從程序中按鈴或鎖門。

?
?
?
?
poYBAGNYe5OAJSdXAAGF6uafi8k360.png
?
1 / 3 ?修改 API 憑證并運行
?

如果您現在對程序中人臉驗證、鎖定和解鎖的工作方式感到困惑,沒關系。一旦我們看到電路原理圖設計和Arduino代碼,就會變得更加清晰。最后,我還將分解每個操作的事件流。

第 3 步:電路設計和 Arduino 代碼

在我們的電路中,我們打算實現以下功能:

  • 分別用于鎖定和解鎖門狀態的紅色和綠色 LED 指示燈。
  • 一個按鈕,就像一個呼叫鈴開關。按下時,我們的 WinForms 應用程序應驗證面部并在成功進行面部身份驗證后打開門。
  • 另一個按鈕來鎖門。
  • 在門鈴響起和門鎖時發出蜂鳴聲的蜂鳴器。

我們項目的電路連接如下圖所示:

?
?
?
?
pYYBAGNYe5aAIlJ7AAIFsldKn6U870.png
?
1 / 2 ?電路連接
?

如果您還沒有,請從此處下載 Arduino IDE并將您的 Arduino 連接到系統。在上傳代碼之前,請確保您已在 IDE 設置中設置了正確的 Arduino 模型和端口

Arduino代碼:

#include 
  
#define ServoPin 4
#define LockSignalPin 2
#define UnLockSignalPin 3
#define BellButtonPin 5
#define LockButtonPin 8
#define RingBellSignalPin 6
#define BuzzerPin 7
#define GreenLedPin 9
#define RedLedPin 10
  
Servo myServo;
  
void setup() 
{
    pinMode(LockSignalPin, INPUT);
    pinMode(UnLockSignalPin, INPUT);
    pinMode(BellButtonPin, INPUT);
    pinMode(LockButtonPin, INPUT);
  
    pinMode(BuzzerPin, OUTPUT);
    pinMode(RedLedPin, OUTPUT);
    pinMode(GreenLedPin, OUTPUT);
    pinMode(RingBellSignalPin, OUTPUT);
  
    digitalWrite(RedLedPin, LOW);
    digitalWrite(GreenLedPin, LOW);
    digitalWrite(RingBellSignalPin, LOW);
  
    myServo.attach(ServoPin);
    Serial.begin(9600);
}
  
void loop() 
{
    int lockButton, lock, unlock, bell;
    char snum[5];
  
    lock = digitalRead(LockSignalPin);
    unlock = digitalRead(UnLockSignalPin);
    
    // Check if lock signal from Bolt is HIGH
    if(lock == HIGH)
    {
        // Turn motor to locked position
        myServo.write(120);
        
        // Set LED indications
        digitalWrite(GreenLedPin, LOW);
        digitalWrite(RedLedPin, HIGH);
  
        // Buzz locking sound
        digitalWrite(BuzzerPin, HIGH);
        delay(1000);
        digitalWrite(BuzzerPin, LOW);
        delay(1000);
    }
    // Check if unlock signal from Bolt is HIGH
    else if(unlock == HIGH)
    {
        // Turn motor to unlocked position
        myServo.write(0);
        
        // Set LED indications
        digitalWrite(GreenLedPin, HIGH);
        digitalWrite(RedLedPin, LOW);
        delay(2000);
    }
  
    bell = digitalRead(BellButtonPin);
    if(bell == HIGH) // User pressed bell ring betton
    {
        // Signal Bolt that ring button was pressed
        digitalWrite(RingBellSignalPin, HIGH);
  
        // A calling bell sound pattern !
        digitalWrite(BuzzerPin, HIGH); 
        delay(100);
        digitalWrite(BuzzerPin, LOW);
        delay(20);
        digitalWrite(BuzzerPin, HIGH);
        delay(200);
        digitalWrite(BuzzerPin, LOW);
        delay(100);
        digitalWrite(BuzzerPin, HIGH);
        delay(100);
        digitalWrite(BuzzerPin, LOW);
        delay(20);
        digitalWrite(BuzzerPin, HIGH);
        delay(200);
        digitalWrite(BuzzerPin, LOW);
        delay(1500);
  
        // Turn off the signal
        digitalWrite(RingBellSignalPin, LOW);
    }
  
    lockButton = digitalRead(LockButtonPin);
    if(lockButton == HIGH) // User pressed lock betton
    {
        // Turn motor to locked position
        myServo.write(120);
        
        // Set LED indications
        digitalWrite(GreenLedPin, LOW);
        digitalWrite(RedLedPin, HIGH);
  
        // Buzz locking sound
        digitalWrite(BuzzerPin, HIGH);
        delay(1000);
        digitalWrite(BuzzerPin, LOW);
    }
}

事件流

現在我們已經準備好 WinForm 應用程序和 Arduino 設計,讓我們深入研究代碼并探索每個操作的控制流程。

1. 響鈴按鈕按下

?
poYBAGNYe5uAGtyxAAMdtKaPu0E910.png
響鈴按鈕按下 - 事件流
?

2. 鎖定按鈕按下

?
pYYBAGNYe52AK_ygAADG05FpawU461.png
鎖定按鈕按下 - 事件流
?

上述兩個操作也可以直接從 Windows 窗體應用程序執行。

在這里,我們可以觀察到Bolt WiFi 模塊作為 Windows 窗體應用程序和 Arduino 之間的重要無線接口Bolt Cloud API 的使用使我們能夠擴展我們的項目并在 Android 等其他平臺上構建應用程序,并使用我們的手機解鎖門!這種靈活性是物聯網和 Bolt 平臺的力量所在。

現在我們已經完成了軟件設計部分,讓我們繼續構建一個可鎖定的門機制。

第 4 步:構建硬件

我有一個鞋架,所以在這個項目中,我將用它來演示鎖具。您可以使用架子、門或衣柜或任何具有可破解鎖定機制的東西。這真的取決于你。

我們需要建立一個耦合機構,將我們的伺服電機與鎖連接起來。為此,我的想法是使用一個瓶子和另一個瓶蓋的截斷頸部。將瓶頸連接到伺服電機,將蓋子連接到鎖上。然后我們將使用尼龍線將它們連接起來。每當電機轉動時,這將導致鎖定/解鎖動作。

所需的瓶蓋上鉆有一個孔,如下圖所示。我們將把它連接到鞋架的鎖軸上。

?
pYYBAGNYe6aAeZUOAAaHKfOxOTA478.jpg
?
1 / 2 ?帶鉆孔的瓶蓋
?

另一個瓶子的蓋子必須連接到伺服電機上。我們使用銅線將蓋子連接到電機的轉軸。

?
?
?
?
poYBAGNYe6uAGJOuAAa_nwBk9KI914.jpg
?
1 / 3 ?伺服電機軸使用銅線連接到瓶蓋
?

現在我們需要將這兩者結合起來。為此,我們使用尼龍線。使用所需長度的線制作一個環,并將線連接到兩個蓋子上。

?
?
?
?
pYYBAGNYe7CAdGDgAAdUllWZbBI837.jpg
?
1 / 2 ?使用金屬墊圈將環形螺紋連接到蓋子上
?

一旦耦合,它們可以引起相互旋轉的動作:

使用尼龍線連接的瓶蓋
?

現在我們已經準備好轉動機構,是時候進入鎖并修復我們的瓶頸了。我們在上面鉆了一個孔,所以我們需要做的就是從機架上擰下鎖軸,將瓶頸放在上面,然后重新擰緊鎖。

將瓶頸固定在鎖定機構上
?

現在唯一要做的就是將伺服電機固定在鞋架上。我們將使用熱膠槍將電機密封到機架上。

?
?
?
?
pYYBAGNYe7aAX5qXAAoihwwCBqA943.jpg
?
1 / 2 ?將伺服電機連接到鞋架
?

調整好螺紋長度并充分擰緊后,我們就完成了最后的設置。如下圖所示,伺服電機可以正確鎖門和開鎖!

?
?
?
?
?
1 / 2 ?使用尼龍螺紋的聯軸器鎖和電機
?

您不一定必須使用瓶頸 - 螺紋耦合方法。使用最適合和方便您的鎖系統的任何方法。

幸運的是,我在機架的正確位置開了一個小口。這使我能夠輕松地連接伺服電機。經過一些裝飾工作和貼標后,我們最終的智能鞋架現已準備就緒。

?
?
?
?
poYBAGNYe7yANIcwAAj2Vs3XWCY625.jpg
?
1 / 6 ?智能鞋架
?

我們現在都準備好了。剩下要做的就是啟動電路,在 WinForms 應用程序上添加一個受信任的面孔,并享受我們門上的人臉鎖安全性。您需要同時為 Arduino 和 Bolt WiFi 模塊供電我使用 10000 毫安時的移動電源為他們倆供電。我使用的網絡攝像頭是 Microsoft LifeCam VX-800。它很舊,但仍然比筆記本電腦的相機好。請查看演示視頻。它詳細顯示了我們項目的工作。

結論

哈夫..那是相當長的。該項目是由 Bolt IoT 提供支持的 Internshala 物聯網培訓的成果。雖然這個項目非常簡單,但它向我們展示了物聯網的潛力以及它如何讓人們的日常生活更輕松。

無論如何..這對我來說是一次很棒的學習經歷。我希望你們會喜歡構建它,我很高興看到你們會想出什么新的創新。最后,我衷心感謝 Internshala 和 Bolt IoT 的培訓團隊使這項事業成為可能。

這是一個包裝!

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費