用樹莓派做一個人臉識別開鎖應用

2020-12-07 CSDN

作者:eckygao,騰訊 CSIG 雲產品部1.案例概述1.1 背景實現一個人臉識別進行開鎖的功能,用在他的真人實景遊戲業務中。總的來說,需求描述簡單,但由於約束比較多,在架構與選型上需要花些心思。1.2 部署效果

由於該遊戲還在線上服務中,此處就不放出具體操作的視頻了。

1.3 玩家體驗玩家發現並進入空間後,在顯示屏看到自己在當前場景出鏡的實時畫面。玩家靠近觀察時,捕獲當前幀進行人臉識別,實時畫面中出現水印字幕「認證中」人臉認證失敗時,實時畫面水印字幕變更為「認證失敗」,字幕維持 2 秒後消失,恢復初始狀態。玩家繼續尋找遊戲線索,重新進行認證。人臉認證成功時,實時畫面水印字幕變更為「認證成功」,並彈開保險箱門。進入後續遊戲環節。2.產品要求2.1 需求說明需求提出時比較明確,核心邏輯不複雜。人臉識別:通過人臉識別進行鑑權。開鎖管理:通過鑑權則打開箱門,未通過則保持鎖定。反饋提示:需要有實時視頻反饋,指引明確,便於優化玩家體驗。2.2 約束說明畢竟是生意,所以在商言商,對實用性和成本要求很高,關鍵是不要影響遊戲過程,同時保證玩家體驗。低成本:需要低建設成本,低維護成本。易維護:對維護人員技術水平要求低,出現軟硬體故障時,任意店員可以快速恢復。高可靠:識別準確率高,容錯能力強,系統持續運行中故障率低。有限空間:整套系統在去除顯示屏、電磁鎖、保險箱後,其它結構實施空間不能超過 20cm*15cm*15cm 體積。採光不足:實景空間小,有頂光無側光,曝光時間較長。通用供電:只提供 5V、12V 兩種直流電接口。並行處理:鑑權流程與反饋流程並行,鑑權過程中,反饋系統不能出現中斷、阻塞等情況,使玩家有明顯的中斷、卡死體驗。弱網絡環境:由於房間隔斷多,網絡共用,所以網速有限,有突發延遲情況。2.3 功能設計可能的架構方案有多種(不同方案間的比較,在文末進行),下面展開說明一下最終上線的方案。2.3.1 設定流程流程與效果,請參考 1.3 玩家體驗 部分2.3.2 可配置內容騰訊雲密鑰對修改配置文件,用於適配騰訊雲帳號切換功能(測試帳號/正式帳號)。人員庫 ID修改配置文件,用於指定不同人員庫(測試庫/正式庫)。水印提示更換對應圖片,實現更換水印。使用圖片管理,而不是文字配置的原因,是由於圖片配置模式無需字庫支持,無需配置顯示大小,易於圖案嵌入。由於所見即所得,對維護人員要求低。關機選項可配置任務完成後,是否自動關機。用於遊戲環境復位準備,減少復位工作量。2.3.3 運營與維護系統運營管理場景啟動時,統一上電。認證通過後,自動關機,完成復位。故障處理軟硬體故障:無法開機、可開機無顯示、可開機顯示系統異常,可開機未知異常等等,更換樹莓派或其它硬體。網絡故障:正常運行,無法認證,可查網絡+查雲日誌,解決網絡問題;雲產品異常:運行 4 個月,未發生過,可以忽略,如發生則聯繫雲售後;2.3.4 成本分析硬體成本:500 ~ 600 元。備件成本:按 1:1 備件,500 ~ 600 元。運行成本:雲端 0 元,使用免費額度;電費網費,忽略不計。3.技術實現3.1 系統架構

3.1.1 硬體組成:

樹莓派:終端主控

攝像頭:視頻輸入傳感器:超聲波測距顯示屏:視頻輸出繼電器:控制電磁鎖電磁鎖:控制保險箱門3.1.2 關鍵特性圖片識別:使用圖片識別,而非視頻流,減少對網絡帶寬要求。識別要求低:欠曝光照片也有高識別率。觸發識別:玩家在場景內活動時間長,觸發模式避免了高頻認證、誤開鎖情況,同時降低認證成本。測距選型:超聲波傳感器技術成熟,成本低(3 元);雷射傳感器成本高(30 元)多進程:視頻處理與監測鑑權由兩個進程實現,避免了阻塞等情況,同時使用進程間通信,實現可靠交互。3.2 系統搭建3.2.1 騰訊雲配置註冊帳號按文檔指引獲取 API 密鑰配置人臉識別訪問官網控制臺,通過「新建人員庫->創建人員->上傳照片」,建立認證基礎。其中所使用的「人員庫 ID」是關鍵信息,用於後續 API 調用識別時,指定認證動作匹配的人員庫。註:由於此案例只識別一個人員,無需對人員 ID 進行匹配,故不用指定人員 ID。3.2.2 樹莓派配置安裝系統訪問 www.raspberrypi.org 獲取鏡像,並進行安裝。注意必須安裝桌面版,否則需要單獨管理 HDMI 輸出。配置網絡進入命令行,執行 「raspi-config」,選擇"Network Options",配置 WiFi 接入點。為了固定 IP,編輯 /etc/dhcpcd.conf 文件,添加配置信息。# 具體內容請參考你的本地網絡規劃interface wlan0static ip_address=192.168.0.xx/24static routers=192.168.0.1static domain_name_servers=192.168.0.1 192.168.0.2安裝騰訊雲 SDK參考指引文檔,安裝調用騰訊雲 API 的依賴庫。sudo apt-get install python-pip -ypip install tencentcloud-sdk-python安裝圖像處理庫系統默認安裝 python2.7,但沒有 opencv 庫,需要安裝。(下載包體積較大,默認源為國外站,比較慢。樹莓派改國內源方法,請自行百度,並挑選離自己近的源站)sudo apt-get install libopencv-dev -ysudo apt-get install python-opencv -y部署代碼訪問github獲取源碼,將 src 文件夾內容,複製到 /home/pi/faceid 下。更改 /home/pi/faceid/config.json 中的配置信息,必須改為你的雲 API 密鑰(sid/skey)、人員庫 ID(facegroupid),其它配置按需調整。配置自啟動需要配置圖形界面自啟動,保證視頻輸出由 HDMI 接口輸出至顯示屏,編輯/home/pi/.config/autostart/faceid.desktop 寫入如下內容Type=ApplicationExec=python /home/pi/faceid/main.py3.2.3 硬體接線

樹莓派 GPIO 圖示

攝像頭CSI 接口

超聲波傳感器TrigPin:BCM-24 / GPIO24EchoPin:BCM-23 / GPIO23VCC :接 5VGND :接 GND繼電器4 引腳側 接 樹莓派 GPIO 引腳VCC :接 5VGND/RGND :接 GNDCH1 : BCM-12 / GPIO123 埠側 接 電磁鎖初始狀態為電磁鎖接常閉端。繼電器原理請參考 3.3.4 硬體相關 部分。3.2.4 測試運行完成上述工作後,接電啟動系統,本地反饋查看顯示屏,雲端識別結果可查看系統日誌。3.3 代碼邏輯與涉及技術3.3.1 流程偽代碼# 監測鑑權進程-主進程獲取應用配置(API ID/Key 等)初始化GPIO引腳(準備控制 傳感器、繼電器)啟動視頻管理進程(輔進程)循環開始:if not 測距達到觸發標準:continue與輔進程通信(捕獲當前幀,並存入指定路徑,並添加「認證中」水印)調用雲API,使用該幀圖片人臉識別if 識別成功:與輔進程通信(變更水印為「認證成功」)等待5秒關機 或 繼續運行(由config.json中 su2halt 欄位指定)else:與輔進程通信(變更水印為「認證失敗」)等待2秒與輔進程通信(清除水印)# 視頻管理進程-輔進程初始化攝像頭循環開始:取幀取進程間共享隊列按消息進行不同操作(幀圖像保存/加不同水印/不處理)輸出幀3.3.2 視頻與識別實時視頻如上文偽代碼所示,通過逐幀處理,並連續輸出,顯示實時視頻。觸發識別測距傳感器確認物體靠近,且 0.3 秒內距離變化小於 2cm,確認為待認證狀態。再延時 0.3 秒,進行圖像幀捕獲。再次延時的原因是物體停止時,會有扭轉、微調等動作,若直接取幀,會由於採光不足(上文提到的約束)出現模糊情況,所以再次延時,確保捕獲穩定圖像。人臉識別請參考文檔介紹。3.3.3 圖像水印水印原理opencv 中,提供了多種圖像處理函數,如:圖文處理(圖加字)、圖圖處理(圖間加/減/乘/除/位運算)等等。通過不同的處理方式,可以實現底圖加字、底圖加圖、掩膜處理等等多種效果。本案例中使用的是基於位運算的掩膜處理方式。水印圖片為了便於維護和更新,本案例中使用圖片做為水印來源,避免字庫約束,也增大了靈活性,易於在水印中增加圖形,並以解析度直接定義水印大小,所見即所得。默認水印圖片為白底黑字。水印處理邏輯為突出水印的浮動效果,將水印圖片中的黑色區域透明化後,疊加到原始圖片中。由於字體透明效果,水印字體顏色隨基礎視頻變化,效果比較明顯。源碼說明# img1為當前視頻幀(底圖),img2為已讀取水印圖def addpic(img1,img2):# 關注區域ROI-取底圖中將被水印圖編輯的圖像rows, cols = img2.shape[:2]roi = img1[:rows, :cols]# 圖片灰化-避免水印圖非純黑純白情況img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)# 生成掩膜-過濾淺色,位運算取非ret, mask = cv2.threshold(img2gray, 220, 255, 3) #cv2.THRESH_BINARYmask_inv = cv2.bitwise_not(mask)# 生成水印區圖像-底圖裁出字體部分,生成水印區最終圖像,替換原圖水印區img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)dst = cv2.add(img1_bg, img2)img1[:rows, :cols] = dstreturn img1水印效果示意圖(示意圖擴大了水印區,用於突出效果,實際應用方案中水印區較小)

3.3.4 硬體相關超聲波測距超聲波傳感器(4 引腳:VCC、Trig、Echo、GND),Trig 端輸出一個大於 10μs 的高電平,激活發出超聲波,並在收到反射波後,Echo 端會輸出一個持續高電平,持續時間就是「發波至收波」的時間。即:測距結果(米)=Echo 端高電平時長*340 米/2繼電器使用的 5V 繼電器模塊有雙側接線,一側為供電與信號(4 引腳,兼容 3.3V 信號),一側為通路開閉管理(3 埠)。繼電器在「通路管理側」實現了一個「單刀雙開關」的模式,通過「供電與信號」側「CH1 引腳」的高低電平,控制單刀的方向。在安裝過程中,電磁鎖供電默認接繼電器常閉端,對繼電器給出信號後,繼電器切換到常開端,則電磁鎖斷電開鎖.GPIOGPIO(General-purpose input/output 通用輸入輸出),以引腳方式提供硬體間的聯繫能力。樹莓派 3B+,有 40 個 GPIO 引腳(請參考 3.2.3 硬體接線 中的參考圖示),樹莓派官方作業系統 Raspbian 下,可以使用系統默認安裝的 python 中 RPi.GPIO 庫,進行操作。4.其它4.1 方案選型對比設計的核心在於人臉鑑權模塊,這裡直接影響成本和穩定性,最後選擇了上文方案(平衡成本、維護性及可靠性)。曾經的其它幾種備選人臉識別方案:4.1.1 本地識別 A 方案:使用 ESP-EYE 晶片,均由晶片完成,依賴 ESP-IDF、ESP—WHO,使用 C 進行開發。低硬體成本(模塊成本 189*2),高開發維護成本(C 開發)。問題:難於更新配置與故障分析處理。適用於大量部署場景。4.1.2 本地識別 B 方案:使用樹莓派直接進行人臉識別,方案成熟,開原始碼豐富。中硬體成本,低開發成本,高維護成本。問題:樹莓派負載高,即使用間隔幀算法,也僅維持在 20fps 以下,卡頓明顯。如進一步調優,受限於個人經驗問題,恐難以保持長期穩定運行。4.1.3 本地識別 C 方案:使用 BM1880 邊緣計算開發板 或其它圖像處理板,社區口碑不錯,有框架支持。問題:高硬體成本(模塊成本 1000*2),高開發維護成本(C 開發)。如果使用算力棒,需要 X86_64 做基礎平臺,成本降低有限,複雜度不變。適用於擴展能力場景。4.1.4 雲端識別 A 方案:使用騰訊雲的視頻智能分析產品,簡化終端架構,使用樹莓派 zero 推流上雲(後續放出實現方案),即可獲取識別結果,且支持高頻多次檢索等特性。部署成本低(終端視頻相關模塊 150 元),運營成本低(當前 0.28 元/分鐘,按該場景下單次運行 20 分鐘計算,單次遊戲成本 5.6 元)問題:對網絡穩定性依賴大,斷流等情況影響體驗。在本案例的網絡約束下,影響使用效果,更適於網絡條件較好、高頻檢索的應用場景。————————————————本文為CSDN博主「騰訊技術工程」的原創文章。原文連結:https://blog.csdn.net/Tencent_TEG/article/details/104404312

相關焦點

  • 在樹莓派上實現人臉識別
    翻譯 | 陶玉龍 校對 | 李欣 整理 | 凡江介紹預計在不久後的將來,人臉識別和身份認證技術將在我們的日常生活中扮演一個非常重要的角色。這項技術為我們開闢了一個全新的世界,它幾乎適用於我們生活的方方面面。面部識別/身份認證的使用案例包括安全系統、認證系統、個性化智能家居和家庭護理助理等。
  • 4步實現樹莓派人臉識別、拍照與推送
    由於無法放連結,可關注以下獲取原文:大部分童鞋的樹莓派是不是一直在吃灰呢?一直閒置著,倒不如用它做一個簡易監控,如果檢測到人臉後,就拍照上傳到指定地方,或發消息提醒。本內容來源於B站「基於樹莓派的魔鏡」,感興趣的童鞋可以觀看演示視頻和教程。
  • 用Jetson Nano構建一個價值60美元的人臉識別系統
    或樹莓派攝像頭模塊v2.x(約30美元)如果你希望將小型相機安裝在機殼中,那麼樹莓派相機模塊v2.x是一個不錯的選擇(注意:v1.x相機模塊將無法使用)。你可以在Amazon或各種經銷商處獲得它們。因此,趁此機會吃個午餐,因為這可能需要一個小時的時間!當最終完成時,你的Jetson Nano 2GB就可以通過完整的CUDA GPU加速進行人臉識別。繼續下一個有趣的部分!
  • 巧用樹莓派 手把手教你DIY一個智能家居伺服器!
    樹莓派雖然只有信用卡大小,但是內心卻非常的強大,電腦能做的事情,基本上它都能做,可謂雀雖小五臟俱全。樹莓派兼容的系統有很多,官方原配的Raspberry系統,CentOS 7,Ubuntu,Win10等等。
  • 用LAKKA和樹莓派做復古遊戲機
    樹莓派可以做復古遊戲機和街機,想必大家都已經聽說過了。
  • 用樹莓派製作一個摩託車儀錶板
    」將 程式設計師極客實驗室 設為星標~這樣就不會錯過每一篇精彩的推送啦~這是一個關於摩託車物聯(IOT)的項目。因為自己是一名機車發燒友,所以決定利用自己的專業特長,用樹莓派來製作一個摩託車智能儀錶板。它不僅能夠更好的分析騎行中的各種數據,也能提高我的騎行技能。
  • 手把手教你人臉識別自動開機
    現在,我們有一個全新的操作,坐到椅子上就能讓電腦開機!  (避免你跟我一樣,擁有一口蹩腳的英語,讓echo聽不懂的尷尬)  本教程所需要的工具及應用:  1. 一個樹莓派3  2. 一個可在樹莓派3上運行的攝像頭(我用的是羅技C270,樹莓派官方攝像頭也可以)  3.
  • 入手樹莓派:應該用它做點什麼?
    把咖啡機連上網,你就朝物聯網生活邁出了一大步Matt Richardson把樹莓派連到了咖啡機上,建立了一個用於控制終端的個人網絡。這套裝置主要是利用網絡連接樹莓派,用其控制一個連在咖啡機上的中繼器,在打算喝咖啡的時候可以通過網絡預先啟動咖啡機。
  • 用樹莓派做電視盒子,安裝Android TV系統
    有位朋友問我,如何在樹莓派上安裝盒子系統,這期我就教大家如何安裝Android系統,自動動手做一個機頂盒。
  • 連呼吸機都能搭起來,還有什麼樹莓派做不了?
    上個月,英特爾在成都的生產線就收到了一個緊急訂單,需在四天內生產 2.5 萬顆 BDW 系列處理器,就是為了供給呼吸機的製造。放在平時,這個交付周期至少得兩周。在那之前,連英特爾的工程師也沒意識到原來自己的 CPU 會用在呼吸機裡。樹莓派創始人也沒想到自己的產品也會參與到呼吸機製造中。
  • 40款智能門鎖15%被打開,指紋人臉識別開鎖安全嗎?
    不久前,幾段視頻在網絡和微信朋友圈流傳,在視頻中,有人用一個煙盒大小的盒子在幾臺智能門鎖前來回晃動,幾秒鐘後,門鎖就自動打開了。在門鎖開啟方式上,密碼和生物識別是目前我國智能門鎖行業應用最多的,所謂生物特徵識別技術主要是指紋和人臉識別技術。
  • 樹莓派使用入門:如何啟動一個新的樹莓派
    樹莓派使用入門:如何啟動一個新的樹莓派 在本系列文章的第三篇中,我們將教你開始使用樹莓派,學習如何安裝一個 Linux 作業系統。,學習如何安裝一個 Linux 作業系統。
  • 連呼吸機都能搭起來,還有什麼是樹莓派做不了的嗎?
    上個月,英特爾在成都的生產線就收到了一個緊急訂單,需在四天內生產 2.5 萬顆 BDW 系列處理器,就是為了供給呼吸機的製造。放在平時,這個交付周期至少得兩周。在那之前,連英特爾的工程師也沒意識到原來自己的 CPU 會用在呼吸機裡。樹莓派創始人也沒想到自己的產品也會參與到呼吸機製造中。
  • 擁有一款強大的樹莓派,用它來做各種有趣的事情!(樹莓派篇)
    (美文美句)大家好,今天給小夥伴主要分享一下樹莓派知識,英文:Raspberry Pi(中文"樹莓派")有沒有想過什麼是樹莓派?在這篇文章中,我們將看看這臺超級酷的小計算機是什麼,以及你能用它做些什麼。簡單地說,Raspberry PI是一臺只有信用卡大小的微型計算機。
  • 樹莓派到底是什麼?能幹什麼?有必要買嗎?
    今天我帶著這三個疑惑給大家解答;一、樹莓派到底是什麼?1、普通的單片機開發功能比如我們是從51單片機和Arduino過渡過來的,可以用樹莓派做簡單的開發,一樣都不差,效果比他們還好樹莓派開發DTH112、高級的圖片分析(OpenCv)現在流行的大數據分析,攝像頭動作捕捉分析,我們的樹莓派在這方面賊六,甚至是想學習樹莓派的每個人的小測驗,這個過了,樹莓派你學的已經差不多了。
  • 用樹莓派做一個ASCII碼照相機,黑客範兒那種
    之前給大家介紹過👉室內資產人員智能管理方案應用Demo@柴火創客空間👈,今天柴火菌再給大家介紹我們技術擔當馬老師的最新力作——一個基於樹莓派、Arduino的專拍亂碼照片的ASCII碼照相機。ASCII 規範於 1967 年第一次發布,最後一次更新是在 1986 年,它用一個字節就可以存儲,它等同於國際標準 ISO/IEC 646。這個相機集補光燈、定時自拍相機和相片ASCII碼快速處理和獲取為一體,解決團體合照中光線不足、無人幫忙拍照、紀念留念周期長等痛點,將實時圖像轉成ASCII字符,並讓訪客實時獲取照片。
  • 樹莓派來做電視盒子
    ❝電視盒子是一個小型的計算終端設備,只要簡單的通過HDMI或色差線等技術將其與傳統電視連接,就能在傳統電視上實現網頁瀏覽、網絡視頻播放、應用程式安裝,甚至能將你手機、平板中的照片和視頻投射到家中的大屏幕電視當中。它可以將網際網路內容通過其在電視機上進行播放,此前在網際網路領域被稱之為網絡高清播放機,後被廣電總局定義為網際網路電視機頂盒。它與可接入網際網路的智能電視一起,統稱為「網際網路電視」。
  • arduino和樹莓派
    Arduino實際上只是一個微控制器,並不是一臺迷你電腦。微控制器只是電腦中的一個部分,與樹莓派相比只能算是一個子集,提供的功能有限。儘管Arduino可以通過一些小型的類C應用程式進行編程,但它無法運行一個全面完整的作業系統。所以想用Arduino來取代你家裡的媒體中心是不可能的。另一方面,樹莓派就是一臺電腦,我想你應該知道我的意思。
  • [圖+視頻]用Raspberry Pi(樹莓派)打造的R2-D2星戰機器人
    計算機科學博士生項凌翔(音譯),最近又挖掘出了樹莓派
  • 德施曼3D人臉識別智能鎖R7,引領刷臉開鎖新時代
    導讀:使用頻率超高的防盜門鎖,如何讓開鎖變得更快捷更安全呢?會變魔術的智能防盜門鎖——德施曼3D人臉識別智能鎖R7,讓開鎖體驗變得更加快捷,也讓小偷被警察現場抓獲不知咋回事。家裡的防盜門,可以說使用的頻率,是非常的超高。