久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

raspberry pi代碼如何實現人臉識別開鎖應用

148次閱讀
沒有評論

共計 4702 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 raspberry pi 代碼如何實現人臉識別開鎖應用,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、案例概述

1. 背景

幫朋友實現了一個人臉識別進行開鎖的功能,用在他的真人實景游戲業務中。幾個月來運行穩定,體驗良好,借著此次宅家的時間,整理一下這個應用的實現過程。

總的來說需求描述簡單,但由于約束比較多,在架構與選型上還是花了些心思。2. 部署效果由于該游戲還在線上服務中,此處就不放出具體操作的視頻了。部署效果如下圖所示:

玩家發現并進入空間后,在顯示屏看到自己在當前場景出鏡的實時畫面。

玩家靠近觀察時,捕獲當前幀進行人臉識別,實時畫面中出現水印字幕“認證中”

人臉認證失敗時,實時畫面水印字幕變更為“認證失敗”,字幕維持 2 秒后消失,恢復初始狀態。玩家繼續尋找游戲線索,重新進行認證。

人臉認證成功時,實時畫面水印字幕變更為“認證成功”,并彈開保險箱門。進入后續游戲環節。

二、產品要求 1. 需求說明

需求提出時比較明確,核心邏輯不復雜。

人臉識別:通過人臉識別進行鑒權。

開鎖管理:通過鑒權則打開箱門,未通過則保持鎖定。

反饋提示:需要有實時視頻反饋,指引明確,便于優化玩家體驗。

2. 約束說明

畢竟是生意,所以在商言商,對實用性和成本要求很高,關鍵是不要影響游戲過程,同時保證玩家體驗。

低成本:需要低建設成本,低維護成本。

易維護:對維護人員技術水平要求低,出現軟硬件故障時,任意店員可以快速恢復。

高可靠:識別準確率高,容錯能力強,系統持續運行中故障率低。

有限空間:整套系統在去除顯示屏、電磁鎖、保險箱后,其它結構實施空間不能超過 20cm*15cm*15cm 體積。

采光不足:實景空間小,有頂光無側光,曝光時間較長。

通用供電:只提供 5V、12V 兩種直流電接口。

并行處理:鑒權流程與反饋流程并行,鑒權過程中,反饋系統不能出現中斷、阻塞等情況,使玩家有明顯的中斷、卡死體驗。

弱網絡環境:由于房間隔斷多,網絡共用,所以網速有限,有突發延遲情況。

3. 功能設計

可能的架構方案有多種(不同方案間的比較,在文末進行),下面展開說明一下最終上線的方案。

(1)設定流程

流程與效果,請參考前文“玩家體驗”部分內容。

(2)可配置內容

a. 騰訊云密鑰對

修改配置文件,用于適配騰訊云賬號切換功能(測試賬號 / 正式賬號)。

b. 人員庫 ID

修改配置文件,用于指定不同人員庫(測試庫 / 正式庫)。

c. 水印提示

更換對應圖片,實現更換水印。使用圖片管理,而不是文字配置的原因,是由于圖片配置模式無需字庫支持,無需配置顯示大小,易于圖案嵌入。由于所見即所得,對維護人員要求低。

d. 關機選項

可配置任務完成后,是否自動關機。用于游戲環境復位準備,減少復位工作量。

(3)運營與維護

a. 系統運營管理

場景啟動時,統一上電。認證通過后,自動關機,完成復位。

b. 故障處理

軟硬件故障:無法開機、可開機無顯示、可開機顯示系統異常,可開機未知異常等等,更換樹莓派或其它硬件。網絡故障:正常運行,無法認證,可查網絡 + 查云日志,解決網絡問題;云產品異常:運行 4 個月,未發生過,可以忽略,如發生則聯系云售后;

(4)成本分析

硬件成本:500~600 元。

備件成本:按 1:1 備件,500~600 元。

運行成本:云端 0 元,使用免費額度;電費網費,忽略不計。

二、技術實現 1. 系統架構

(1)硬件組成

樹莓派:終端主控攝像頭:視頻輸入傳感器:超聲波測距顯示屏:視頻輸出繼電器:控制電磁鎖電磁鎖:控制保險箱門

(2)關鍵特性

圖片識別:使用圖片識別,而非視頻流,減少對網絡帶寬要求。識別要求低:欠曝光照片也有高識別率。觸發識別:玩家在場景內活動時間長,觸發模式避免了高頻認證、誤開鎖情況,同時降低認證成本。測距選型:超聲波傳感器技術成熟,成本低(3 元);激光傳感器成本高(30 元)多進程:視頻處理與監測鑒權由兩個進程實現,避免了阻塞等情況,同時使用進程間通信,實現可靠交互。

2. 系統搭建

(1)騰訊云配置

a. 注冊賬號

按文檔指引,獲取 API 密鑰

b. 配置人臉識別

訪問官網控制臺,通過“新建人員庫 - 創建人員 - 上傳照片”,建立認證基礎。其中所使用的“人員庫 ID”是關鍵信息,用于后續 API 調用識別時,指定認證動作匹配的人員庫。注:由于此案例只識別一個人員,無需對人員 ID 進行匹配,故不用指定人員 ID。

(2)樹莓派配置

a. 安裝系統訪問  http://www.raspberrypi.org  獲取鏡像,并進行安裝。注意必須安裝桌面版,否則需要單獨管理 HDMI 輸出。

b. 配置網絡進入命令行,執行 raspi-config,選擇 Network Options,配置 WiFi 接入點。為了固定 IP,編輯 /etc/dhcpcd.conf 文件,添加配置信息。

#  具體內容請參考你的本地網絡規劃
interface wlan0
static ip_address=192.168.0.xx/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 192.168.0.2

c. 安裝騰訊云 SDK

參考指引文檔,安裝調用騰訊云 API 的依賴庫。

sudo apt-get install python-pip -y
pip install tencentcloud-sdk-python

d. 安裝圖像處理庫系統默認安裝 python2.7,但沒有 opencv 庫,需要安裝。(下載包體積較大,默認源為國外站,比較慢。樹莓派改國內源方法,請自行百度,并挑選離自己近的源站)

sudo apt-get install libopencv-dev -y
sudo apt-get install python-opencv -y

e. 部署代碼

訪問 github 獲取源碼,將 src 文件夾內容,復制到 /home/pi/faceid 下。更改 /home/pi/faceid/config.json 中的配置信息,必須改為你的 云 API 密鑰 (sid/skey)、人員庫 ID(facegroupid),其它配置按需調整。

f. 配置自啟動需要配置圖形界面自啟動,保證視頻輸出由 HDMI 接口輸出至顯示屏,編輯 /home/pi/.config/autostart/faceid.desktop 寫入如下內容

Type=Application
Exec=python /home/pi/faceid/main.py

(3)硬件接線

樹莓派 GPIO 圖示:

CSI 接口

b. 超聲波傳感器

TrigPin:BCM-24 / GPIO24

EchoPin:BCM-23 / GPIO23

VCC:接 5V

GND:接 GND

c. 繼電器 4 引腳側 接 樹莓派 GPIO 引腳

VCC:接 5V

GND/RGND:接 GND

CH1 : BCM-12 / GPIO12

3 端口側 接 電磁鎖

初始狀態為電磁鎖接常閉端。

繼電器原理請參考 3.3.4 硬件相關 部分。

(3)測試運行

完成上述工作后,接電啟動系統,本地反饋查看顯示屏,云端識別結果可查看系統日志。

3. 代碼邏輯與涉及技術(1)流程偽代碼

#  監測鑒權進程 - 主進程
獲取應用配置(API ID/Key  等)初始化 GPIO 引腳(準備控制   傳感器、繼電器)啟動視頻管理進程(輔進程)循環開始: if not  測距達到觸發標準:
 continue
  與輔進程通信(捕獲當前幀,并存入指定路徑,并添加“認證中”水印)  調用云 API,使用該幀圖片人臉識別
 if  識別成功:
  與輔進程通信(變更水印為“認證成功”)  等待 5 秒
  關機   或   繼續運行(由 config.json 中  su2halt  字段指定) else:  與輔進程通信(變更水印為“認證失敗”)  等待 2 秒
  與輔進程通信(清除水印)#  視頻管理進程 - 輔進程
初始化攝像頭
循環開始:  取幀
  取進程間共享隊列
  按消息進行不同操作(幀圖像保存 / 加不同水印 / 不處理)  輸出幀 

(2)視頻與識別

a. 實時視頻如上文偽代碼所示,通過逐幀處理,并連續輸出,顯示實時視頻。

b. 觸發識別

測距傳感器確認物體靠近,且 0.3 秒內距離變化小于 2cm,確認為待認證狀態。再延時 0.3 秒,進行圖像幀捕獲。再次延時的原因是物體停止時,會有扭轉、微調等動作,若直接取幀,會由于采光不足(上文提到的約束)出現模糊情況,所以再次延時,確保捕獲穩定圖像。

c. 人臉識別

請參考文檔介紹。

(3)圖像水印

a. 水印原理

opencv 中,提供了多種圖像處理函數,如:圖文處理(圖加字)、圖圖處理(圖間加 / 減 / 乘 / 除 / 位運算)等等。通過不同的處理方式,可以實現 底圖加字、底圖加圖、掩膜處理等等多種效果。本案例中使用的是基于位運算的掩膜處理方式。

b. 水印圖片

為了便于維護和更新,本案例中使用圖片做為水印來源,避免字庫約束,也增大了靈活性,易于在水印中增加圖形,并以分辨率直接定義水印大小,所見即所得。默認水印圖片為白底黑字。

c. 水印處理邏輯

為突出水印的浮動效果,將水印圖片中的黑色區域透明化后,疊加到原始圖片中。由于字體透明效果,水印字體顏色隨基礎視頻變化,效果比較明顯。源碼說明

# 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_BINARY
 mask_inv = cv2.bitwise_not(mask)
 #  生成水印區圖像 - 底圖裁出字體部分,生成水印區最終圖像,替換原圖水印區
 img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
 dst = cv2.add(img1_bg, img2)
 img1[:rows, :cols] = dst
 return img1

(4)硬件相關

a. 超聲波測距

超聲波傳感器(4 引腳:VCC、Trig、Echo、GND),Trig 端輸出一個大于 10μs 的高電平,激活發出超聲波,并在收到反射波后,Echo 端會輸出一個持續高電平,持續時間就是“發波至收波”的時間。即:測距結果 (米)=Echo 端高電平時長 *340 米 /2

b. 繼電器

使用的 5V 繼電器模塊有雙側接線,一側為供電與信號(4 引腳,兼容 3.3V 信號),一側為通路開閉管理(3 端口)。繼電器在“通路管理側”實現了一個“單刀雙開關”的模式,通過“供電與信號”側“CH1 引腳”的高低電平,控制單刀的方向。在安裝過程中,電磁鎖供電默認接繼電器常閉端,對繼電器給出信號后,繼電器切換到常開端,則電磁鎖斷電開鎖.

c. GPIO

GPIO(General-purpose input/output 通用輸入輸出),以引腳方式提供硬件間的聯系能力。樹莓派 3B+,有 40 個 GPIO 引腳(請參考 3.2.3 硬件接線 中的參考圖示),樹莓派官方操作系統 Raspbian 下,可以使用系統默認安裝的 python 中 RPi.GPIO 庫,進行操作。

關于 raspberry pi 代碼如何實現人臉識別開鎖應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-17發表,共計4702字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 深州市| 鲜城| 盐源县| 麟游县| 安顺市| 改则县| 东城区| 顺义区| 宽甸| 奈曼旗| 吉水县| 华蓥市| 镇原县| 左云县| 阳城县| 晋城| 门源| 扬中市| 大宁县| 慈利县| 聊城市| 佛教| 京山县| 正安县| 丰城市| 彰化市| 余江县| 江城| 濮阳县| 张家口市| 阳朔县| 凭祥市| 阿城市| 三台县| 茌平县| 泸西县| 肇东市| 兴山县| 甘德县| 农安县| 乳山市|