真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

今天就跟大家聊聊有關(guān)樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)大方免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

樹莓派人臉識別門禁系統(tǒng)的總體設計

硬件包括:樹莓派3B、電源模塊、轉(zhuǎn)5V降壓模塊、觸摸感應傳感器模塊、聲光報警模塊和驅(qū)動模塊。

由此設計出的人臉識別門禁系統(tǒng)總體結(jié)構(gòu)框圖如下:

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

總體結(jié)構(gòu)框圖

程序運行時樹莓派會將本地照片中的面部圖像發(fā)送至云端服務進行分析,識別出的人臉會給出face_token,用于后續(xù)的人臉比對等操作。觸摸傳感器觸發(fā)主函數(shù)實時拍照并發(fā)送至云服務調(diào)用Search API在Faceset中找出與目標人臉最相似的一張或多張人臉。將比對結(jié)果發(fā)送到樹莓派本地終端,提取返回結(jié)果并將其顯示在樹莓派終端。

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

主流程圖

系統(tǒng)主要功能實現(xiàn)

當觸摸開關(guān)被按下LED閃爍,接著進行一張人臉的采集。并將此照片與已經(jīng)上傳的三張照片做對比。判斷出相似的人臉。當相似度大于70%,則開門(電機正轉(zhuǎn)開門 、停止并發(fā)出警報聲、電機反轉(zhuǎn)關(guān)門)。

主要模塊各自的功能如下:

主控模塊。在本設計中主要起到集中分配的作用,不僅需要即時采集人臉圖像,調(diào)用API處理圖像,同時還要提供攝像頭檢測、驅(qū)動芯片、顯示屏等數(shù)字器件的工作信號。

觸發(fā)模塊。系統(tǒng)的輸入部分,實現(xiàn)人機交互。通過接收觸控按鍵的電平信息,使得樹莓派得到需要的數(shù)據(jù)。

檢測模塊。對人臉進行采集攝像的模塊,提供最原始的圖片信息。

驅(qū)動模塊。大門開閉的過程控制的控制元件

顯示模塊。以連接一臺電腦液晶顯示器即可

系統(tǒng)電源模塊。系統(tǒng)電源模塊主要負責給系統(tǒng)提供符合要求的電流與電壓

報警模塊。系統(tǒng)的聲光報警模塊,利用LED燈和蜂鳴器來提示人臉即將檢測的信息。


主控板的選型

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

樹莓派3B

觸發(fā)模塊

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

觸摸開關(guān)模塊

檢測模塊

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

樹莓派攝像頭

樹莓派專用500W攝像頭提供了三個應用程序,分別為:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉圖像,而 raspivid 用于捕捉視頻。

樹莓派上電即開機進入系統(tǒng)。啟動人臉識別檢測程序。程序啟動后觸摸傳感器循環(huán)檢測是否被觸發(fā)。檢測周期時2S,當觸摸感應開關(guān)被觸發(fā)則啟動攝像頭實時拍照。照片存儲到本地之后上傳云服務處理。之后判斷返回的處理結(jié)果是否通過。

搭建opencv環(huán)境將在下一個文章詳細介紹,此處跳過。除此之外安裝pycurl.使用apt-get的方式安裝$ sudo apt-get install python-pycurl。

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

流程圖

到Face++網(wǎng)站https://www.faceplusplus.com.cn/注冊自己的APIkey.

Sdk的facepp.py文件中包含如下底層api接口提供我們使用。

_APIS = [

'/detect',

'/detection/landmark'

'/compare',

'/search',

'/faceset/create',

'/faceset/addface',

'/faceset/removeface',

'/faceset/update',

'/faceset/getdetail',

'/faceset/delete',

'/faceset/getfacesets',

'/face/analyze',

'/face/getdetail',

'/face/setuserid'

]

輸入自己在Face++網(wǎng)站注冊的APIkey。

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

FACE++的API

Detect API

調(diào)用者提供圖片文件或者圖片URL,進行人臉檢測和人臉分析。識別出的人臉會給出face_token,用于后續(xù)的人臉比對等操作。請注意,只對人臉包圍盒面積最大的5個人臉進行分析,其他人臉可以使用Face Analyze API進行分析。如果您需要使用檢測出的人臉于后續(xù)操作,建議將對應face_token添加到FaceSet中。如果一個face_token連續(xù)72小時沒有存放在任意FaceSet中,則該face_token將會失效。如果對同一張圖片進行多次人臉檢測,同一個人臉得到的face_token是不同的。

Search API

在Faceset中找出與目標人臉最相似的一張或多張人臉。支持傳入face_token或者直接傳入圖片進行人臉搜索。使用圖片進行比對時會選取圖片中檢測到人臉尺寸最大的一個人臉。

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

調(diào)用正確的返回值

系統(tǒng)調(diào)試及運行

樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析

等待對比的照片先存儲在本地 等待代碼中上傳


程序初始設置

首先拍攝的照片上傳到本文件夾并修改圖片文件名,然后在代碼中將三張待對比照片賦值給face_one、face_two、face_three三個變量。并設置進行對比的照片名為customer.jpg。

face_one = 'face_one.jpg'

face_two = 'face_two.jpg'

face_three = 'face_three.jpg'

face_search = 'customer.jpg'

置GPIO編碼方式為BOARD,GPIO13為輸入模式,GPIO11,12,15,16,40為輸出模式。

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

GPIO.setup(13,GPIO.IN)

GPIO.setup(11,GPIO.OUT)

GPIO.setup(12,GPIO.OUT)

GPIO.setup(15,GPIO.OUT)

GPIO.setup(16,GPIO.OUT)

GPIO.setup(40,GPIO.OUT)

在python程序中設置調(diào)用API的key和secret。

#http_url='https://api-cn.faceplusplus.com/facepp/v3/detect'

key = "XXXXXXXXXXXXXXXXXXXX"

secret = "XXXXXXXXXXXXXXXXXXXXXXXX"

api = facepp.API(key, secret)


各功能函數(shù)

蜂鳴器,前面已經(jīng)初始設置GPIO12為輸出模式,此處bee()函數(shù)設置GPIO12為高電平,延時0.5s后置為低。意味著當調(diào)用bee()函數(shù)時蜂鳴器鳴叫0.5s.

def bee():

GPIO.output(12, False)

time.sleep(0.5)

GPIO.output(12, True)


步進電機,設置旋轉(zhuǎn)角度為180°,closewise=1時,步進電機順時針旋轉(zhuǎn),closewise=0時,步進電機逆時針旋轉(zhuǎn)。步進電機驅(qū)動模塊由樹莓派的GPIO35、 GPIO36、 GPIO38 、GPIO40四個GPIO驅(qū)動。

def motor_open():

steps = 180;

clockwise = 1;

arr = [0,1,2,3];

if clockwise!=1:

arr = [3,2,1,0];

ports = [40,38,36,35] # GPIO 21(Pin 40) GPIO 20(Pin 38) GPIO 16(Pin 36) GPIO 19(Pin 35)

for p in ports:

GPIO.setup(p,GPIO.OUT)

for x in range(0,steps):

for j in arr:

time.sleep(0.002)

for i in range(0,4):

if i == j:

GPIO.output(ports[i],True)

else:

GPIO.output(ports[i],False)


(3)流水燈:初始設置已經(jīng)將GPIO11、GPIO15、GPIO16為輸出模式。分別把三個LED發(fā)光二極管的長引腳接到這三個GPIO上,短引腳接至負極。通過把對應的引腳置為高電平延時0.3s后置為低,循環(huán)點亮三個小燈。

def light():

GPIO.output(11, True)

time.sleep(0.3)

GPIO.output(11, False)

GPIO.output(15, True)

time.sleep(0.3)

GPIO.output(15, False)

GPIO.output(16, True)

time.sleep(0.3)

GPIO.output(16, False)


系統(tǒng)預熱好,提示做好準備 ,一段時間后進行拍照。在終端窗口輸出提示信息。并調(diào)用light()來實現(xiàn)LED發(fā)光二極管的流水燈效果。并調(diào)用bee()讓蜂鳴器發(fā)出提示聲音。

def prep():

print("歡迎使用人臉識別檢測系統(tǒng) 請面對攝像頭 5秒鐘后進行人臉采集")

light()

print("************************5*********************")

light()

print("************************4*********************")

light()

print("************************3*********************")

light()

print("************************2*********************")

light()

print("************************1*********************")

bee()


調(diào)用拍照函數(shù)時流水燈點亮,然后使用opencv利用攝像頭采集一張照片,將照片保存為customer.jpg。

def take_photo():

light()

capture = cv2.VideoCapture(0)

if not capture.isOpened(): print('Capture failed because of camera')

ret, img = capture.read()

cv2.imwrite('customer.jpg', img)

print("***********************照片采集完畢 請稍等*************************")

print '=' * 60

函數(shù)調(diào)用API將本地存儲的照片進行人臉檢測和人臉分析。識別出的人臉會給出face_token,用于后續(xù)的人臉比對等操作。然后調(diào)用searchAPI在Faceset中找出與目標人臉最相似的一張或多張人臉。進行比對時會選取圖片中檢測到人臉尺寸最大的一個人臉。


觸發(fā)檢測的監(jiān)測函數(shù)det(),程序運行時開始檢測觸摸開關(guān)是否被觸發(fā)。當觸摸開關(guān)被觸發(fā)時會發(fā)送高電平信號給樹莓派。當檢測GPIO13為真時,在終端輸出確定信息,并調(diào)用主函數(shù)進行對比操作。主程序運行結(jié)束后繼續(xù)檢測是否被觸發(fā)。一直循環(huán)指導程序退出。

def det():

while True:

if GPIO.input(13)==True:

print "confirm"

main()

else:

print "NO BODY"

time.sleep(2)

det()

提取API.search返回結(jié)果,并將返回的信息保存到s,并從中提取相似度的值。轉(zhuǎn)換s[0][‘configdence’]為整形變量賦值給m。當m大于70時輸出通過檢測并調(diào)用步進電機轉(zhuǎn)動。


異常處理

目的是刪除無用的人臉庫,所以新建了一個debug.py的python文件。當檢測失敗之后執(zhí)行一次debug.py即可。

import facepp

#http_url='https://api-cn.faceplusplus.com/facepp/v3/detect'

key = "xzFPqqR1q_fasM1D3s4yvUdcBoTovUMX"

secret = "4GXhLafqDOmnfQRxx-6ZlEVwQpOlZoW-"

api = facepp.API(key, secret)

# 創(chuàng)建一個Faceset用來存儲FaceToken

# create a Faceset to save FaceToken

def main():

api.faceset.delete(outer_id='detect', check_empty=0)

#ret = api.faceset.create(outer_id='detect')

#print_result("faceset create", ret)

main()

文中為了節(jié)省篇幅 省略了opencv搭建的步驟。其實拍照功能可以換成調(diào)用os使用命令行的方式拍照:

def take_photo():

os.system('raspistill -w 480 -h 360 -o customer.jpg -t 2000')

print("***********************首次照片采集完畢 請稍等*************************")

print '=' * 60

看完上述內(nèi)容,你們對樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


本文標題:樹莓派人臉識別門禁系統(tǒng)代碼以及代碼分析
分享URL:http://weahome.cn/article/jhgseg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部