国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        2020-11-09 08:44
        磐創AI
        關注

        Nvidia Jetson Nano 2GB開發板(今天宣布!)是一款新的單板機,售價59美元,運行帶有GPU加速的人工智能軟件。

        在2020年,你可以從一臺售價59美元的單板計算機中獲得令人驚嘆的性能,讓我們用它來創建一個簡易版的門鈴攝像頭,該攝像頭可以識別走到房屋前門的每個人。通過面部識別,即使這些人穿著不同,它也可以立即知道你家門口的人是否曾經來拜訪過你。什么是Nvidia Jetson Nano 2GB Jetson Nano 2GB是一款單板計算機,具有四核的1.4GHz ARM CPU和內置的Nvidia Maxwell GPU。它是最便宜的Nvidia Jetson機型,針對的是購買樹莓派的業余愛好者。

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        如果你已經熟悉樹莓派的系列產品,則除了Jetson Nano配備Nvidia GPU外,和其他產品幾乎完全相同的。它可以運行GPU加速的應用程序(如深度學習模型),其速度遠比樹莓派這樣的開發板(不支持大多數深度學習框架的GPU)快得多。雖然有很多AI開發板和加速器模塊,但Nvidia擁有一大優勢——它與桌面AI庫直接兼容,不需要你將深度學習模型轉換為任何特殊格式即可運行他們。它使用幾乎所有每個基于Python的深度學習框架都已使用的相同的CUDA庫進行GPU加速,這意味著你可以采用現有基于Python的深度學習程序,幾乎無需修改就可以在Jetson Nano 2GB上運行它,并且可以獲得良好的性能(只要你的應用程序可以在2GB的RAM上運行)。它將為強大的服務器端Python代碼部署在價格為59美元的獨立設備上的能力非常出色。這款新的Jetson Nano 2GB主板也比Nvidia以前的硬件版本更加光鮮亮麗。第一個Jetson Nano機型莫名其妙地缺少WiFi,但該機型隨附一個可插入的WiFi模塊,因此你不必再加上雜亂的以太網電纜了。他們還將電源輸入升級到了更現代的USB-C端口,并且在軟件方面,一些粗糙的邊緣已被磨掉,例如,你無需執行諸如啟用交換文件之類的基本操作。讓我們組裝系統對于任何硬件項目,第一步都是收集我們需要的所有零件:1. Nvidia Jetson Nano 2GB主板(59美元)這開發板板目前可預訂(截至2020年10月5日),預計將于10月底發布。我不知道發行后的初始可用性會如何,但是先前的Jetson Nano機型在發行后的幾個月中供不應求。2. USB-C電源適配器新型Jetson Nano 2GB使用USB-C供電,其不包括電源適配器。3. 攝像頭—— USB網絡攝像頭或樹莓派攝像頭模塊v2.x(約30美元)如果你希望將小型相機安裝在機殼中,那么樹莓派相機模塊v2.x是一個不錯的選擇(注意:v1.x相機模塊是無法使用的),你可以在Amazon或各種經銷商處獲得它們。一些USB網絡攝像頭(如Logitech的C270或C920)也可以在Jetson Nano 2GB上正常工作,因此如果你已經擁有一個USB攝像頭,也可以拿來使用,以下是一個攝像頭的不完整清單。并非所有功能都支持Linux驅動程序,但有些功能會支持。我插入了在亞馬遜上買的價值20美元的通用HDMI到USB的適配器,它可以很好地工作,因此,我無需任何額外配置就可以將我的高端數碼相機作為使用HDMI的視頻源。

        除此之外,我們還需要其它設備,包括:至少具有32GB空間的microSD卡。我們將在此安裝Linux。一個microSD讀卡器:使用它可以安裝Jetson軟件。一個有線USB鍵盤和一個有線USB鼠標用來控制Jetson Nano。加載Jetson Nano 2GB軟件首先我們需要下載Jetson Nano的軟件映像。Nvidia的默認軟件映像包括預裝了Python 3.6和OpenCV的Ubuntu Linux 18.04。以下是將Jetson Nano軟件安裝到SD卡上的方法:從Nvidia下載Jetson Nano Developer Kit SD卡映像。下載Etcher,該程序將Jetson軟件映像寫入SD卡。運行Etcher并使用它來編寫下載到SD卡的Jetson Nano Developer Kit SD卡映像,這大約需要20分鐘。組裝所有設備零件首先,請拿出你的Jetson Nano 2GB:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        第一步是插入microSD卡,microSD卡插槽是隱藏的,但你可以在散熱器底部的背面找到它:

        你還應該繼續將隨附的USB WiFi適配器插入以下USB端口之一:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        接下來,你需要插入相機。如果你使用的是樹莓派 v2.x相機模塊,則它會通過帶狀電纜連接。在Jetson上找到帶狀電纜插槽,彈出連接器,插入電纜,然后將其彈出關閉。確保帶狀電纜上的金屬觸點向內朝向散熱器:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        如果你使用USB網絡攝像頭,可以直接將其插入USB端口,而不需要使用帶狀電纜端口。現在,插入其他所有零件:將鼠標和鍵盤插入USB端口。使用HDMI電纜插入顯示器。最后,插入USB-C電源線以啟動它。如果你使用的是樹莓派相機模塊,則最終會得到如下所示的內容:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        或者,如果你使用的是USB視頻輸入設備,則如下所示:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        插入電源線后,Jetson Nano會自動啟動,幾秒鐘后,你應該會看到Linux設置屏幕出現在顯示器上,按照提示步驟來創建你的帳戶并連接到WiFi。安裝Linux和Python庫來進行人臉識別一旦完成了Linux的初始設置,就需要安裝幾個我們將在人臉識別系統中使用的庫。在Jetson Nano桌面上,打開一個LXTerminal窗口并運行以下命令。每次要求輸入密碼時,請輸入創建用戶帳戶時輸入的密碼:sudo apt-get update

        sudo apt-get install python3-pip cmake libopenblas-dev liblapack-dev libjpeg-dev

        首先,我們要更新apt,這是標準的Linux軟件安裝工具,我們將使用它來安裝所需的其他系統庫。然后,我們將安裝一些尚未預先安裝我們軟件需要的linux庫。最后,我們需要安裝face_recognition Python庫及其依賴項,包括機器學習庫dlib。你可以使用以下單個命令自動執行此操作:sudo pip3 -v install Cython face_recognition

        因為沒有可用于Jetson平臺的dlib和numpy的預構建版本,所以此命令將從源代碼編譯這些庫,所以這可能需要一個小時的時間!當最終完成后,Jetson Nano 2GB就可以通過使用CUDA GPU來對人臉識別進行加速。運行門鈴攝像頭的人臉識別應用程序face_recognition庫是我編寫的一個Python庫,它使用DLIB做人臉識別超級簡單。它可以檢測到人臉,并將每個檢測到的人臉轉換為唯一的人臉特征編碼,然后比較這些特征編碼以查看它們是否屬于同一個人,該過程只需幾行代碼即可。face_recognition庫:我使用該庫構建了一個門鈴攝像頭的人臉識別應用程序,該應用程序可以識別走到你家門的人并對其進行跟蹤。運行時如下所示:

        首先,請下載代碼。我已經在此處添加了完整的代碼和注釋。但是這里有一個更簡單的方法,可以從命令行下載到你的Jetson Nano上:wget -O doorcam.py tiny.cc/doorcam2gb

        在程序中你需要編輯一行代碼來設置是使用USB相機還是樹莓派相機模塊。你可以像這樣編輯文件:gedit doorcam.py

        按照說明進行操作,然后保存它,退出GEdit并運行代碼:python3 doorcam.py

        你會在桌面上看到一個視頻窗口,每當有新人走到攝像機前時,它都會記錄他們的臉并開始跟蹤他們在你家門口的時間。如果同一個人離開并在5分鐘后回來,它將重新注冊并再次跟蹤他們,你可以隨時按鍵盤上的“ q”退出。該應用程序會自動將看到的每個人信息保存到一個名為known_faces.dat的文件中。當你再次運行該程序時,它將使用該數據記住以前的訪問者。如果要清除已知面孔的列表,只需退出程序并刪除該文件。將其變成獨立的硬件設備至此,我們有一個運行人臉識別模型的開發板,但它仍被束縛在桌面上,以實現強大的功能和顯示效果。讓我們看看無需插入如何運行它。現代單板計算機幾乎都支持相同的硬件標準,例如USB,這意味著你可以在亞馬遜上買到很多便宜的附件,例如觸摸屏顯示器和電池。你可以很多輸入,輸出和電源選項。這是我訂購的東西(但類似的東西都可以):一個7英寸觸摸屏HDMI顯示屏,使用USB電源:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        以及一個通用的USB-C電池組來供電:

        在Nvidia Jetson Nano 2GB開發板上構建人臉識別系統

        讓我們將其連接起來,看看作為獨立設備運行時的外觀。只需插入USB電池而不是壁式充電器,然后將HDMI顯示器插入HDMI端口和USB端口,即可充當屏幕和鼠標輸入。

        可以看到效果很好。觸摸屏可以像普通的USB鼠標一樣操作,無需任何其他配置。唯一的缺點是,如果Jetson Nano 2GB消耗的電量超過USB電池組可提供的電量,則會降低GPU的速度。如果你有其它的創意,可以將所有這些打包到一個項目案例中,用作原型硬件設備來測試你的想法,而且,如果你想批量生產某些產品,則可以購買Jetson主板的生產版本,并將其用于構建真正的硬件產品。門鈴攝像頭的Python代碼解析代碼從導入我們使用的庫開始,其中最重要的是OpenCV(Python中稱為cv2),我們將使用OpenCV從相機讀取圖像,以及檢測和識別人臉。import face_recognition
        import cv2
        from datetime import datetime, timedelta
        import numpy as np
        import platform
        import pickle

        然后,我們需要知道如何訪問相機——從樹莓派相機模塊獲取圖像的方法與使用USB相機的方法不同,因此,只需根據你的硬件將此變量更改為True或False即可:# 這里的設置取決于你的攝像機設備類型:

        # - True = 樹莓派 2.x camera module

        # - False = USB webcam or other USB video input (like an HDMI capture device)

        USING_RPI_CAMERA_MODULE = False

        接下來,我們將創建一些變量來存儲有關在攝像機前行走的人的數據,這些變量將充當已知訪客的簡單數據庫。known_face_encodings = []

        known_face_metadata = []

        該應用程序只是一個演示,因此我們將已知的人臉存儲在Python列表中。接下來,我們具有保存和加載已知人臉數據的功能,以下是保存功能:def save_known_faces():

           with open("known_faces.dat", "wb") as face_data_file:

               face_data = [known_face_encodings, known_face_metadata]

               pickle.dump(face_data, face_data_file)

               print("Known faces backed up to disk.")

        這將使用Python的內置pickle功能將已知的人臉寫入磁盤中,數據也可以以相同的方式加載回去,但是我在這里沒有寫。每當我們的程序檢測到新面孔時,我們都會調用一個函數將其添加到已知的人臉數據庫中:def register_new_face(face_encoding, face_image):
           known_face_encodings.append(face_encoding)
        known_face_metadata.append({
               "first_seen": datetime.now(),
               "first_seen_this_interaction": datetime.now(),
               "last_seen": datetime.now(),
               "seen_count": 1,
               "seen_frames": 1,
               "face_image": face_image,
           })

        首先,我們將表征人臉的編碼存儲在列表中,然后,我們將有關人臉的匹配數據字典存儲在第二個列表中。我們將使用它來跟蹤我們第一次見到該人的時間,他們最近在攝像頭周圍閑逛了的時間,他們訪問過我們房屋的次數以及他們的人臉圖像。我們還需要一個輔助函數來檢查人臉數據庫中是否已經存在未知人臉:def lookup_known_face(face_encoding):
           metadata = None
           if len(known_face_encodings) == 0:
               return metadata
           face_distances = face_recognition.face_distance(
               known_face_encodings,
               face_encoding
           )
           best_match_index = np.argmin(face_distances)
           if face_distances[best_match_index] < 0.65:
               metadata = known_face_metadata[best_match_index]
               metadata["last_seen"] = datetime.now()
               metadata["seen_frames"] += 1
               if datetime.now() - metadata["first_seen_this_interaction"]  
                       > timedelta(minutes=5):
                   metadata["first_seen_this_interaction"] = datetime.now()
                   metadata["seen_count"] += 1
           return metadata

        我們在這里做了一些重要的事情:使用face_recogntion庫,我們檢查未知人臉與所有以前的訪問者的相似程度。所述face_distance()函數為我們提供了未知臉部和所有已知人臉之間的相似性的數值測量——數字越小,人臉越相似。如果人臉與我們的一位已知訪客非常相似,則我們可以假設他們是重復訪客,在這種情況下,我們將更新它們的“上次拜訪”時間,并增加在視頻幀中看到這人臉的次數。最后,如果在最近的五分鐘內有人在鏡頭前看到這個人,那么我們假設他們仍然在這里作為同一次訪問的一部分,否則,我們假設這是對我們房屋的新訪問,因此我們將重置跟蹤他們最近訪問的時間戳。程序的其余部分是主循環——一個無限循環,在該循環中,我們獲取視頻幀,在圖像中查找人臉并處理我們看到的每個人臉。這是該程序的主要核心。讓我們來看看:def main_loop():
           if USING_RPI_CAMERA_MODULE:
               video_capture =
                   cv2.VideoCapture(
                       get_jetson_gstreamer_source(),
                       cv2.CAP_GSTREAMER
                   )
           else:
               video_capture = cv2.VideoCapture(0)

        第一步是使用適合我們計算機硬件的任何一種方法來訪問相機。現在讓我們開始獲取視頻幀:while True:
           # Grab a single frame of video
           ret, frame = video_capture.read()
           # Resize frame of video to 1/4 size
           small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
           # Convert the image from BGR color
           rgb_small_frame = small_frame[:, :, ::-1]

        每次抓取一幀視頻圖像時,我們都會將其縮小到1/4尺寸,這將使人臉識別過程運行得更快,但代價是僅檢測圖像中較大的人臉,但是由于我們正在構建一個門鈴攝像頭,該攝像頭只能識別攝像頭附近的人,所以這不是問題。同時我們還必須處理另外一個問題,OpenCV從攝像機中提取圖像,每個像素存儲為藍綠色-紅色值,這不是標準的紅色-綠色-藍色值。在圖像上進行人臉識別之前,我們需要轉換圖像格式。接著我們檢測圖像中的所有人臉,并將每個人臉轉換為人臉特征編碼,這只需兩行代碼:face_locations = face_recognition.face_locations(rgb_small_frame)
        face_encodings = face_recognition.face_encodings(
                            rgb_small_frame,
                            face_locations
                         )

        接下來,我們會遍歷每一個檢測到的面孔,并確定該面孔是我們過去見過的人還是新的訪客:for face_location, face_encoding in zip(
                              face_locations,
                              face_encodings):
        metadata = lookup_known_face(face_encoding)
           if metadata is not None:
               time_at_door = datetime.now() -
                   metadata['first_seen_this_interaction']
               face_label = f"At door {int(time_at_door.total_seconds())}s"
           else:
               face_label = "New visitor!"
               # Grab the image of the face
               top, right, bottom, left = face_location
               face_image = small_frame[top:bottom, left:right]
               face_image = cv2.resize(face_image, (150, 150))
               # Add the new face to our known face data
               register_new_face(face_encoding, face_image)

        如果我們以前見過此人,我們將檢索我們存儲的有關他們先前訪問的元數據。如果沒有,我們將它們添加到我們的人臉數據庫中,并從視頻圖像中獲取他們的人臉圖片以添加到我們的數據庫中。現在我們找到了所有的人并弄清了他們的身份,我們可以再次遍歷檢測到的人臉,在每個人臉周圍繪制矩陣框并為每個人臉添加標簽:for (top, right, bottom, left), face_label in
                         zip(face_locations, face_labels):
           # Scale back up face location
           # since the frame we detected in was 1/4 size
           top *= 4
           right *= 4
           bottom *= 4
           left *= 4
           # Draw a box around the face
           cv2.rectangle(
               frame, (left, top), (right, bottom), (0, 0, 255), 2
           )
           # Draw a label with a description below the face
           cv2.rectangle(
               frame, (left, bottom - 35), (right, bottom),
               (0, 0, 255), cv2.FILLED
           )
           cv2.putText(
               frame, face_label,
               (left + 6, bottom - 6),
               cv2.FONT_HERSHEY_DUPLEX, 0.8,
               (255, 255, 255), 1
           )

        同時在屏幕上方繪制一份最近訪問者的運行列表,其中包含他們訪問過你房屋的次數:

        要繪制該圖像,我們需要遍歷所有已知的人臉,并查看最近在鏡頭前的人臉。對于每個最近的訪客,我們將在屏幕上繪制他們的人臉圖像并顯示其訪問次數:number_of_recent_visitors = 0
        for metadata in known_face_metadata:
           # 如果我們在最后一分鐘見過此人,
           if datetime.now() - metadata["last_seen"]
                                < timedelta(seconds=10):
        # 繪制已知的面部圖像
               x_position = number_of_recent_visitors * 150
        frame[30:180, x_position:x_position + 150] =
                     metadata["face_image"]
        number_of_recent_visitors += 1
               # Label the image with how many times they have visited
               visits = metadata['seen_count']
               visit_label = f"{visits} visits"
        if visits == 1:
                   visit_label = "First visit"
        cv2.putText(
                   frame, visit_label,
                   (x_position + 10, 170),
                   cv2.FONT_HERSHEY_DUPLEX, 0.6,
                   (255, 255, 255), 1
               )

        最后,我們可以在屏幕上顯示當前視頻幀,并在其頂部顯示所有注釋:cv2.imshow('Video', frame)

        為了確保程序不會崩潰,我們將每100幀將已知人臉列表保存到磁盤上:if len(face_locations) > 0 and number_of_frames_since_save > 100:
           save_known_faces()
           number_of_faces_since_save = 0
        else:
           number_of_faces_since_save += 1

        程序退出時,僅需一行或兩行清理代碼即可關閉相機。該程序的啟動代碼位于該程序的最底部:if __name__ == "__main__":
           load_known_faces()
           main_loop()

        我們要做的是加載已知的人臉(如果有的話),然后啟動主循環,該循環從相機讀取并在屏幕上顯示結果。整個程序只有大約200行,但是它可以檢測到訪客,對其進行識別并每當他們來到你的家門時進行跟蹤。擴展程序該程序是一個示例,說明了如何在便宜的Jetson Nano 2GB板上運行少量的Python 3代碼來構建功能強大的系統。如果你想把它變成一個真正的門鈴攝像頭系統,你可以添加其它額外功能:當系統檢測到門口有新人時,它會用Twilio向你發送短信,而不是僅僅在你的顯示器上顯示,或者你可以嘗試用真實的數據庫替換在內存中的人臉數據庫。你也可以嘗試將這個程序轉換成完全不同的程序。閱讀一幀視頻,在圖像中尋找內容,然后采取行動的模式是各種計算機視覺系統的基礎。嘗試更改代碼,看看你能想出什么!比如當你回家走到自己家門口時,讓它播放你自己定制的主題音樂怎么樣?你可以查看其他一些人臉識別示例,以了解如何進行類似的操作。面部識別示例:了解有關Nvidia Jetson平臺的更多信息如果你想了解有關使用Nvidia Jetson硬件平臺進行構建的更多信息,Nvidia會提供新的免費Jetson培訓課程。查看他們的網站以獲取更多信息。他們也有很棒的社區資源,例如JetsonHacks網站。

        image.png

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 3p露脸在线播放| 新安县| 久久国模| 99在线观看视频| 拳交av| 人妻无码精品| 国产乱人伦无码视频| 色撸撸视频| 色偷偷综合网,欧美日韩| jizzjizz在线观看| 国产av一区二区三区| 亚洲xxxxxx| 亚洲制服丝袜在线| 无码久久久久久| 蜜臂久久99精品久久久久宅男| 阿拉尔市| 夜夜嗨AV一区二区三区网页| 国产AV影院| 一区二区av| 人妻制服丝袜中文字幕| 亚洲播播| 久久神马| 国产v在线| 99在线观看视频| 熟女中文字幕丝袜日韩| 九九三级影视| 亚洲色图自拍| 无码人妻精品一区二区三区温州| 国产VA在线观看| 91综合网| 999成人网| 91露脸熟女对白不带套| 欧美日韩精品一区二区三区钱| 亚洲欧洲av| 亚洲成人在线网站| 中文字幕一区二区无码成人| 欧美老熟妇色XXXXX性 | 璧山县| 长白| 精品自拍偷拍| 老女人丨91丨九色|