電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>人臉驗(yàn)證解鎖的安全系統(tǒng)開源分享

人臉驗(yàn)證解鎖的安全系統(tǒng)開源分享

2022-10-27 | zip | 0.03 MB | 次下載 | 免費(fèi)

資料介紹

描述

歡迎,好奇的朋友!我們生活在一個(gè)互聯(lián)網(wǎng)革命的時(shí)代,現(xiàn)在比以往任何時(shí)候都更容易進(jìn)行實(shí)驗(yàn)和創(chuàng)新,以提出可以對(duì)全球數(shù)百萬人產(chǎn)生積極影響的絕妙想法。

曾經(jīng)想為您家中的架子、抽屜、衣柜或門增加一點(diǎn)額外的安全性嗎?當(dāng)談到使用互聯(lián)網(wǎng)進(jìn)行創(chuàng)新時(shí),在我們可用的數(shù)千個(gè)平臺(tái)和工具中,有幾個(gè)脫穎而出的是. 在這個(gè)項(xiàng)目中,我們將修改一個(gè)標(biāo)準(zhǔn)架子,使其擁有一個(gè)使用人臉驗(yàn)證解鎖的安全系統(tǒng)。我們將C#構(gòu)建一個(gè)Windows 窗體應(yīng)用程序,它可以存儲(chǔ)、驗(yàn)證和解鎖受信任的面孔。用于面部驗(yàn)證和Bolt IoT Cloud API,用于與 Bolt WiFi 模塊和 Arduino 進(jìn)行通信我們將 Bolt WiFi 模塊與Arduino Uno連接,它將控制伺服電機(jī)鎖定/解鎖門。ArduinoBolt IoTFacePlusPlus API

興奮的?讓我們開始吧。

背景

我將這個(gè)項(xiàng)目作為由 Internshala Trainings 舉辦的創(chuàng)新挑戰(zhàn)和物聯(lián)網(wǎng)培訓(xùn)的一部分。他們的培訓(xùn)有助于了解處理 API 服務(wù)、面向?qū)ο?a target='_blank' class='arckwlink_none'>編程以及最重要的是使用 Bolt WiFi 模塊的基礎(chǔ)知識(shí)。可以在此處找到作為本次培訓(xùn)的一部分完成的 Capstone 項(xiàng)目的概要在這個(gè)項(xiàng)目的開發(fā)過程中,很多這些概念都派上了用場(chǎng)。因此,非常感謝 Internshala 團(tuán)隊(duì)讓這一切成為可能。

第 1 步:構(gòu)建軟件

我們將使用 Visual Studio 構(gòu)建一個(gè) Windows 窗體應(yīng)用程序。此應(yīng)用程序在 Windows 機(jī)器上運(yùn)行,將負(fù)責(zé)管理授權(quán)人臉、使用 FacePlusPlus API 驗(yàn)證人臉以及與 Bolt WiFi 模塊通信。我們將使用 C# 進(jìn)行編碼。

啟動(dòng) Visual Studio 并創(chuàng)建新的 Windows 窗體應(yīng)用程序項(xiàng)目。如果您完全不熟悉 Visual Studio,我建議您學(xué)習(xí)使用 Visual Studio 進(jìn)行 Windows 窗體應(yīng)用程序開發(fā)的基礎(chǔ)知識(shí)。都是很好的入門資源。

在本教程中,我將僅使用項(xiàng)目中執(zhí)行主要和重要功能的代碼片段來解釋代碼。瀏覽整個(gè)代碼將是乏味且不必要的,因?yàn)槠渲写蟛糠侄际遣谎宰悦髑矣袚?jù)可查的。

我們的 Visual Studio 項(xiàng)目將 3 個(gè)庫用于各種目的。他們是:

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

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

入門

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

1. Bolt Cloud API 憑證

如果您還沒有,請(qǐng)?jiān)L問cloud.boltiot.com并設(shè)置一個(gè)帳戶。登錄后,將您的 WiFi 模塊與 Bolt Cloud 鏈接。為此,請(qǐng)?jiān)谀?a target='_blank' class='arckwlink_none'>手機(jī)上下載 Bolt IoT 設(shè)置應(yīng)用程序。按照應(yīng)用程序中的說明將您的設(shè)備與您的帳戶相關(guān)聯(lián)。這涉及將 Bolt 與本地 WiFi 網(wǎng)絡(luò)配對(duì)。成功鏈接后,您的儀表板將顯示您的設(shè)備。您現(xiàn)在可以從儀表板獲取您的設(shè)備 IDAPI 密鑰。

2. FacePlusPlus API 憑證

我們?cè)谶@個(gè)項(xiàng)目中依賴的另一個(gè) API 服務(wù)是FacePlusPlus API。它是一個(gè)免費(fèi)平臺(tái),提供各種圖像識(shí)別服務(wù)。我們將其用于面部識(shí)別。創(chuàng)建一個(gè)帳戶并轉(zhuǎn)到 FacePlusPlus 控制臺(tái)。轉(zhuǎn)到下方并單擊。記下新生成的API KeyAPI Secret 。API KeyApps+Get API Key

?
poYBAGNYe5CASqNCAAAZOaOqW8g988.png
?

現(xiàn)在您應(yīng)該準(zhǔn)備好以下內(nèi)容:

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";

我們創(chuàng)建一個(gè)名為 的 Bolt 類的新全局實(shí)例myBolt,通過它我們將與 WiFi 模塊進(jìn)行所有未來的通信:

myBolt = new Bolt(BOLT_API_KEY, BOLT_DEVICE_ID);

也就是說,現(xiàn)在讓我們看看我們的應(yīng)用程序如何執(zhí)行一些核心功能。

1. 鎖定/解鎖門

我們?cè)O(shè)計(jì)了這樣的電路,當(dāng)數(shù)字引腳 0 為HIGH時(shí),門應(yīng)該被鎖定,而當(dāng)數(shù)字引腳 3 為 時(shí)HIGH,門應(yīng)該被解鎖。稍后我們討論電路原理圖時(shí)會(huì)更清楚地說明這一點(diǎn)。

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

執(zhí)行鎖定的代碼:

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);
}

執(zhí)行解鎖的代碼:

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. 添加/刪除可信面孔

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

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

去除臉部非常簡(jiǎn)單。按刪除按鈕將從保存的列表中刪除圖像數(shù)據(jù)和名稱。

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

//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();

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

3.人臉驗(yàn)證

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

進(jìn)行此比較的代碼如下所示:

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方法將請(qǐng)求連同要比較的兩個(gè)人臉的 base64 編碼人臉數(shù)據(jù)和我們的 API 憑據(jù)一起發(fā)送到 FacePlusPlus API。使用Newtonsoft JSON庫解析響應(yīng)并confidence獲取值。閱讀比較 API文檔以清楚地理解參數(shù)。

4. 聽鐘線

我們計(jì)劃提供一個(gè)物理按鈕,類似于呼叫鈴按鈕,以便用戶可以在看著攝像頭時(shí)按下以解鎖門。為了使這成為可能,我們需要?jiǎng)?chuàng)建一個(gè)新的專用線程來持續(xù)偵聽鈴聲按鈕按下事件。

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

這是將在鈴聲偵聽線程上連續(xù)運(yùn)行的代碼:

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

我們?cè)诿看蔚g停止并等待 2 秒。否則會(huì)很快耗盡 Bolt Cloud API 的使用配額。

第 2 步:構(gòu)建 Visual Studio 項(xiàng)目

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

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

?
?
?
?
poYBAGNYe5OAJSdXAAGF6uafi8k360.png
?
1 / 3 ?修改 API 憑證并運(yùn)行
?

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

第 3 步:電路設(shè)計(jì)和 Arduino 代碼

在我們的電路中,我們打算實(shí)現(xiàn)以下功能:

  • 分別用于鎖定和解鎖門狀態(tài)的紅色和綠色 LED 指示燈。
  • 一個(gè)按鈕,就像一個(gè)呼叫鈴開關(guān)。按下時(shí),我們的 WinForms 應(yīng)用程序應(yīng)驗(yàn)證面部并在成功進(jìn)行面部身份驗(yàn)證后打開門。
  • 另一個(gè)按鈕來鎖門。
  • 在門鈴響起和門鎖時(shí)發(fā)出蜂鳴聲的蜂鳴器。

我們項(xiàng)目的電路連接如下圖所示:

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

如果您還沒有,請(qǐng)從此處下載 Arduino IDE并將您的 Arduino 連接到系統(tǒng)。在上傳代碼之前,請(qǐng)確保您已在 IDE 設(shè)置中設(shè)置了正確的 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);
    }
}

事件流

現(xiàn)在我們已經(jīng)準(zhǔn)備好 WinForm 應(yīng)用程序和 Arduino 設(shè)計(jì),讓我們深入研究代碼并探索每個(gè)操作的控制流程。

1. 響鈴按鈕按下

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

2. 鎖定按鈕按下

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

上述兩個(gè)操作也可以直接從 Windows 窗體應(yīng)用程序執(zhí)行。

在這里,我們可以觀察到Bolt WiFi 模塊作為 Windows 窗體應(yīng)用程序和 Arduino 之間的重要無線接口。Bolt Cloud API 的使用使我們能夠擴(kuò)展我們的項(xiàng)目并在 Android 等其他平臺(tái)上構(gòu)建應(yīng)用程序,并使用我們的手機(jī)解鎖門!這種靈活性是物聯(lián)網(wǎng)和 Bolt 平臺(tái)的力量所在。

現(xiàn)在我們已經(jīng)完成了軟件設(shè)計(jì)部分,讓我們繼續(xù)構(gòu)建一個(gè)可鎖定的門機(jī)制。

第 4 步:構(gòu)建硬件

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

我們需要建立一個(gè)耦合機(jī)構(gòu),將我們的伺服電機(jī)與鎖連接起來。為此,我的想法是使用一個(gè)瓶子和另一個(gè)瓶蓋的截?cái)囝i部。將瓶頸連接到伺服電機(jī),將蓋子連接到鎖上。然后我們將使用尼龍線將它們連接起來。每當(dāng)電機(jī)轉(zhuǎn)動(dòng)時(shí),這將導(dǎo)致鎖定/解鎖動(dòng)作。

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

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

另一個(gè)瓶子的蓋子必須連接到伺服電機(jī)上。我們使用銅線將蓋子連接到電機(jī)的轉(zhuǎn)軸。

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

現(xiàn)在我們需要將這兩者結(jié)合起來。為此,我們使用尼龍線。使用所需長度的線制作一個(gè)環(huán),并將線連接到兩個(gè)蓋子上。

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

一旦耦合,它們可以引起相互旋轉(zhuǎn)的動(dòng)作:

使用尼龍線連接的瓶蓋
?

現(xiàn)在我們已經(jīng)準(zhǔn)備好轉(zhuǎn)動(dòng)機(jī)構(gòu),是時(shí)候進(jìn)入鎖并修復(fù)我們的瓶頸了。我們?cè)谏厦驺@了一個(gè)孔,所以我們需要做的就是從機(jī)架上擰下鎖軸,將瓶頸放在上面,然后重新擰緊鎖。

將瓶頸固定在鎖定機(jī)構(gòu)上
?

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

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

調(diào)整好螺紋長度并充分?jǐn)Q緊后,我們就完成了最后的設(shè)置。如下圖所示,伺服電機(jī)可以正確鎖門和開鎖!

?
?
?
?
?
1 / 2 ?使用尼龍螺紋的聯(lián)軸器鎖和電機(jī)
?

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

幸運(yùn)的是,我在機(jī)架的正確位置開了一個(gè)小口。這使我能夠輕松地連接伺服電機(jī)。經(jīng)過一些裝飾工作和貼標(biāo)后,我們最終的智能鞋架現(xiàn)已準(zhǔn)備就緒。

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

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

結(jié)論

哈夫..那是相當(dāng)長的。該項(xiàng)目是由 Bolt IoT 提供支持的 Internshala 物聯(lián)網(wǎng)培訓(xùn)的成果。雖然這個(gè)項(xiàng)目非常簡(jiǎn)單,但它向我們展示了物聯(lián)網(wǎng)的潛力以及它如何讓人們的日常生活更輕松。

無論如何..這對(duì)我來說是一次很棒的學(xué)習(xí)經(jīng)歷。我希望你們會(huì)喜歡構(gòu)建它,我很高興看到你們會(huì)想出什么新的創(chuàng)新。最后,我衷心感謝 Internshala 和 Bolt IoT 的培訓(xùn)團(tuán)隊(duì)使這項(xiàng)事業(yè)成為可能。

這是一個(gè)包裝!

?

?


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

評(píng)論

查看更多

下載排行

本周

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

本月

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

總榜

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