畢業(yè)論文:基于樹(shù)莓派的人臉識(shí)別門禁系統(tǒng)本科畢業(yè)設(shè)計(jì)文章

玩轉(zhuǎn)樹(shù)莓派2017-07-17 18:59

畢業(yè)論文

基于微型計(jì)算機(jī)的人臉識(shí)別門禁系統(tǒng)設(shè)計(jì)

1. 課題意義及目標(biāo)

隨科技的不斷發(fā)展蔗衡,安全性的要求也不斷提高,IC卡等傳統(tǒng)身份識(shí)別工具已不能滿足社會(huì)需求。所以從通用性蜀肘、安全性、成熟性和造價(jià)性等多方面綜合考慮,研究新的識(shí)別工具是一個(gè)必然的趨勢(shì)煞烫。基于人臉識(shí)別的門禁系統(tǒng)的設(shè)計(jì)累颂,能夠提高傳統(tǒng)安保行業(yè)的安全性至会、方便性、直觀性等泉唁,最為有效的杜絕了門禁管理中的人為因素践盼,充分體現(xiàn)了門禁管理的人工智能性,避免不必要的安全隱患和人員糾紛届案。因此本次畢業(yè)設(shè)計(jì)選擇了人臉識(shí)別門禁系統(tǒng)的研究與實(shí)現(xiàn),以保證門禁數(shù)據(jù)的真實(shí)性,真正做到安全暖哨、方便和直觀的門禁管理,從而進(jìn)一步提高公司凰狞、倉(cāng)庫(kù)篇裁、家庭等地的安保水平和管理穩(wěn)定性。

本次設(shè)計(jì)將以微型計(jì)算機(jī)為核心赡若,需選擇合適的電源模塊达布、檢測(cè)模塊、逾冬、數(shù)據(jù)存儲(chǔ)模塊黍聂、鍵盤模塊、顯示模塊和聲光報(bào)警模塊身腻,完成人臉識(shí)別系統(tǒng)的檢測(cè)并報(bào)警處理的設(shè)計(jì)产还。要求能夠?qū)⒊鋈腴T禁系統(tǒng)的人員面部進(jìn)行識(shí)別,能夠在人臉數(shù)據(jù)匹配預(yù)存數(shù)據(jù)庫(kù)資料時(shí)啟動(dòng)門禁系統(tǒng)中開(kāi)門系統(tǒng)嘀趟,當(dāng)人臉數(shù)據(jù)不匹配預(yù)存數(shù)據(jù)庫(kù)資料時(shí)啟動(dòng)門禁系統(tǒng)中閉門系統(tǒng)脐区,實(shí)現(xiàn)防范防盜的作用,創(chuàng)造安全良好的生活工作環(huán)境她按。

2.主要任務(wù)

(1)查閱資料牛隅,了解人臉識(shí)別門禁系統(tǒng)的原理和基本構(gòu)成,提出系統(tǒng)總體設(shè)計(jì)方案酌泰。

(2)通過(guò)學(xué)習(xí)完成的各個(gè)控制硬件電路設(shè)計(jì)(如檢測(cè)模塊媒佣,A/D轉(zhuǎn)換模塊,聲光報(bào)警模塊陵刹,系統(tǒng)電源模塊等)默伍。

(3)完成人臉識(shí)別門禁系統(tǒng)的軟件設(shè)計(jì)。

(4)完成人臉識(shí)別門禁系統(tǒng)的調(diào)試衰琐、仿真和實(shí)物制作也糊。

(5)完成設(shè)計(jì)說(shuō)明書。

基于微型計(jì)算機(jī)(樹(shù)莓派)的人臉識(shí)別門禁系統(tǒng)

摘 要

隨科技的不斷發(fā)展碘耳,社會(huì)不斷的進(jìn)步显设,人們的自身安全意識(shí)和要求也再不斷提高,IC卡等傳統(tǒng)身份識(shí)別工具已不能滿足社會(huì)需求辛辨。所以從通用性捕捂、安全性瑟枫、成熟性和造價(jià)性等多方面綜合考慮,研究新的識(shí)別工具是一個(gè)必然的趨勢(shì)指攒。為能夠提高傳統(tǒng)安保行業(yè)的安全性慷妙、方便性、直觀性和有效的杜絕了門禁管理中的人為因素允悦,通過(guò)人工智能方式膝擂,避免不必要的安全隱患和人員糾紛。

提出一種基于微型計(jì)算機(jī)(樹(shù)莓派)的人臉識(shí)別門禁系統(tǒng)隙弛,該系統(tǒng)通過(guò)使用人臉識(shí)別云服務(wù)可以實(shí)時(shí)對(duì)人員進(jìn)行分析辨認(rèn)架馋,以保證門禁數(shù)據(jù)的真實(shí)性,真正做到安全全闷、方便和直觀的門禁管理叉寂,從而進(jìn)一步提高公司、倉(cāng)庫(kù)总珠、家庭等地的安保水平和管理穩(wěn)定性屏鳍。文中詳細(xì)描述了該系統(tǒng)的搭建和實(shí)現(xiàn)過(guò)程,為相關(guān)產(chǎn)品提供了一套很好的解決方案局服。對(duì)所設(shè)計(jì)的系統(tǒng)進(jìn)行了模擬測(cè)試钓瞭,其測(cè)試結(jié)果達(dá)到了設(shè)計(jì)目標(biāo)。

關(guān)鍵詞: 微型計(jì)算機(jī)(樹(shù)莓派)淫奔,人臉識(shí)別山涡,云服務(wù),Python

目錄

第 1 章 緒 論

1.1 研究背景

隨著社會(huì)的發(fā)展搏讶,安全教育不斷的深化佳鳖,人們的安全防范意識(shí)也逐漸贈(zèng)強(qiáng)霍殴,這里面不光包括個(gè)人安全媒惕,還涉及到了財(cái)產(chǎn)和知識(shí)產(chǎn)權(quán)的保護(hù),安檢的高效来庭,貿(mào)易的順利流通等方面的需求增加妒蔚,這種生物

由此可設(shè)計(jì)出人臉識(shí)別門禁系統(tǒng)的總體結(jié)構(gòu)框圖,如圖2-1所示:

圖2.1 人臉識(shí)別門禁系統(tǒng)的總結(jié)構(gòu)框圖

本次設(shè)計(jì)中測(cè)試及最終使用月弛,一直采用Python2.7編程語(yǔ)言對(duì)微型計(jì)算機(jī)(樹(shù)莓派)系統(tǒng)進(jìn)行開(kāi)發(fā)和設(shè)計(jì)肴盏,其中人臉識(shí)別調(diào)用了face++的API, 官網(wǎng)提供了基于Python的SDK帽衙,該語(yǔ)言的可讀性高很適合本系統(tǒng)的開(kāi)發(fā)菜皂。本系統(tǒng)總體結(jié)構(gòu)圖如上。本地終端為微型計(jì)算機(jī)(樹(shù)莓派)厉萝,云服務(wù)采用了FACE++人工智能開(kāi)發(fā)平臺(tái)恍飘。

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

本論文中所設(shè)計(jì)的系統(tǒng)是對(duì)人臉圖像進(jìn)行處理識(shí)別并與門禁系統(tǒng)配合起到安全防盜的基本功能榨崩。工作原理是首先將三張待檢測(cè)人員的照片存儲(chǔ)到樹(shù)莓派文件系統(tǒng),執(zhí)行此段程序時(shí)章母,調(diào)用face++的detectAPI將三張照片中的人臉信息存儲(chǔ)在開(kāi)發(fā)者賬號(hào)母蛛,然后執(zhí)行search的API,對(duì)現(xiàn)在進(jìn)行的人臉識(shí)別程序中拍攝的照片進(jìn)行處理乳怎,檢測(cè)照片中的人臉信息并與之前上傳的人臉信息對(duì)比彩郊,并返回相似度最高的人臉信息。我們?cè)诔绦蛑兄惶崛onfidence的值蚪缀,即人臉相似度秫逝。當(dāng)觸摸開(kāi)關(guān)被按下,程序會(huì)發(fā)出警報(bào)LED閃爍询枚,接著進(jìn)行一張人臉的采集筷登。并將此照片與已經(jīng)上傳的三張照片做對(duì)比。判斷出相似的人臉哩盲。當(dāng)相似度大于70%前方,則開(kāi)門(電機(jī)正轉(zhuǎn)開(kāi)門 、停止并發(fā)出警報(bào)聲廉油、電機(jī)反轉(zhuǎn)關(guān)門)惠险。

系統(tǒng)由微型計(jì)算機(jī)(樹(shù)莓派),驅(qū)動(dòng)模塊抒线,檢測(cè)模塊班巩,顯示模塊,報(bào)警模塊嘶炭,電源模塊等組成抱慌。系統(tǒng)帶有按鍵,用戶可以通過(guò)按鍵觸發(fā)人臉識(shí)別功能眨猎;系統(tǒng)具有采集和檢測(cè)人臉功能抑进,可以當(dāng)進(jìn)入人員匹配成功時(shí),開(kāi)啟大門睡陪,同時(shí)報(bào)警裝置啟動(dòng)寺渗;當(dāng)進(jìn)入人員匹配失敗時(shí),大門不開(kāi)啟以保障安全兰迫。

在本設(shè)計(jì)中信殊,系統(tǒng)主要模塊各自的功能如下:

(1)主控模塊。在本設(shè)計(jì)中主要起到集中分配的作用汁果,不僅需要即時(shí)采集人臉圖像涡拘,調(diào)用API處理圖像,同時(shí)還要提供攝像頭檢測(cè)据德、驅(qū)動(dòng)芯片鳄乏、顯示屏等數(shù)字器件的工作信號(hào)府蔗。

(2)按鍵模塊。系統(tǒng)的輸入部分汞窗,實(shí)現(xiàn)人機(jī)交互姓赤。通過(guò)接收觸控按鍵的電平信息,使得微型計(jì)算機(jī)(樹(shù)莓派)得到需要的數(shù)據(jù)仲吏。

(3)驅(qū)動(dòng)模塊不铆。廠門電極作為大門開(kāi)閉的過(guò)程控制的控制元件,其驅(qū)動(dòng)主要由驅(qū)動(dòng)芯片實(shí)現(xiàn)裹唆。通過(guò)操縱大門電機(jī)正轉(zhuǎn)和反轉(zhuǎn)誓斥,實(shí)現(xiàn)對(duì)大門的開(kāi)閉控制。

(4)顯示模塊许帐。以連接一臺(tái)電腦顯示器即可

(5)系統(tǒng)電源模塊劳坑。系統(tǒng)電源模塊主要負(fù)責(zé)給系統(tǒng)提供符合要求的電流與電壓,由于微型計(jì)算機(jī)(樹(shù)莓派)使用低壓直流電壓成畦,就需要將兩節(jié)鋰電池18650電源7V轉(zhuǎn)換為符合要求的電壓距芬、電流。從而使整個(gè)系統(tǒng)有持續(xù)的供電保證循帐。[4]

本系統(tǒng)的設(shè)計(jì)具有半自動(dòng)門禁系統(tǒng)的特點(diǎn)框仔。待檢測(cè)人員需要用手按下觸摸開(kāi)關(guān),進(jìn)而觸發(fā)人臉識(shí)別拄养。系統(tǒng)將對(duì)其進(jìn)行攝像并將圖像發(fā)送至云端服務(wù)進(jìn)行處理离斩,待處理完之后微型計(jì)算機(jī)(樹(shù)莓派)對(duì)返回的比對(duì)數(shù)據(jù)結(jié)果進(jìn)行判斷。如果對(duì)比成功瘪匿,則驅(qū)動(dòng)步進(jìn)電機(jī)開(kāi)始旋轉(zhuǎn)跛梗。系統(tǒng)的實(shí)時(shí)性是用戶體驗(yàn)的關(guān)鍵要素,系統(tǒng)正常工作時(shí)待識(shí)別的人員感覺(jué)不到卡頓狀況 棋弥,實(shí)時(shí)性良好核偿。

第3章人臉識(shí)別門禁系統(tǒng)硬件設(shè)計(jì)

3.1主控模塊

圖3.1 主控模板實(shí)物圖

本次設(shè)計(jì)的主控模塊是使用微型計(jì)算機(jī)──樹(shù)莓派3代B型主板。樹(shù)莓派3代B型主板嘁锯,該主控板模塊的優(yōu)勢(shì)是擁有良好的標(biāo)準(zhǔn)模塊擴(kuò)展性宪祥,主板上預(yù)留的接口可完美對(duì)接與之配套的樹(shù)莓派500萬(wàn)像素專用攝像頭聂薪、7英寸液晶觸摸屏家乘、Sense Hat傳感器模塊等。除了可以在愛(ài)好者論壇下載網(wǎng)民大神們做好的系統(tǒng)包之外藏澳,如今還可以直接購(gòu)買預(yù)裝了樹(shù)莓派代3代B型主板專用NOOBs系統(tǒng)的MicroSD卡仁锯。說(shuō)到這里就又促生了樹(shù)莓派代3代B型主板的進(jìn)一步優(yōu)勢(shì),那便是與微軟的結(jié)合翔悠,微軟為該產(chǎn)品推出了與之適配的Windows 10 IoT版操作系統(tǒng)业崖,用戶可以使用到更加熟悉的UI野芒,使得通過(guò)標(biāo)準(zhǔn)擴(kuò)展模塊和GPIO接口擴(kuò)展模塊操作變得簡(jiǎn)單,IP等協(xié)議的配置也變得更加簡(jiǎn)單双炕,同時(shí)驅(qū)動(dòng)又在不斷更新狞悲,不斷完善,所以不用再去考慮重新開(kāi)發(fā)Windows的驅(qū)動(dòng)程序妇斤,以上這些與樹(shù)莓派代3代B型主板的結(jié)合摇锋,對(duì)新入門的玩家以及互聯(lián)網(wǎng)開(kāi)發(fā)者來(lái)說(shuō)是意義非凡的。

主要包括以下幾點(diǎn):

【Raspberry Pi 3 Model B】

· BCM2837

· 64位的1.2GHz四核ARM Cortex-A53

· 1GB內(nèi)存

· 10/100自適應(yīng)網(wǎng)卡

· 802.11n WiFi無(wú)線網(wǎng)卡

· 低功耗藍(lán)牙4.1 (BLE)

· HDMI接口

· USB 2.0接口 x 4

· MicroSD 卡插槽

· 3.5 mm 音頻輸出接口

· 40PIN GPIO接口

· CSI攝像頭接口

· DSI顯示接口

· 升級(jí)后的電源管理系統(tǒng)站超,以便使用更多耗電的外設(shè)(須用2.5A以上電源供電) 樹(shù)莓派3代B型是一款基于ARM的微型計(jì)算機(jī)主板荸恕,以SD/MicroSD卡進(jìn)行存儲(chǔ),該主板提供USB接口和以太網(wǎng)接口死相,可以連接鍵盤融求、鼠標(biāo)和網(wǎng)線,該主板具備所有PC的基本功能算撮,例如:高清視頻播放生宛、電子表格書寫、玩游戲等諸多功能肮柜,還整合了視頻模擬信號(hào)的電視輸出接口和HDMI高清視頻輸出接口茅糜。 樹(shù)莓派將Python作為主要編程語(yǔ)言,支持Java素挽、BBC BASIC (通過(guò) RISC OS 映像或者Linux的"Brandy Basic"克隆)蔑赘、C 和Perl等編程語(yǔ)言。本設(shè)計(jì)使用的是最新樹(shù)莓派官方系統(tǒng)预明。是基于debian的一種linux32位操作系統(tǒng)缩赛。本次設(shè)計(jì)使用系統(tǒng)中安裝的python2.7運(yùn)行程序。

3.2檢測(cè)模塊

3.2攝像頭模塊實(shí)物圖

本次設(shè)計(jì)的檢測(cè)模塊是使用樹(shù)莓派專用500W像素?cái)z像頭撰糠。該攝像頭提供了三個(gè)應(yīng)用程序酥馍,分別為:raspistill、raspivid阅酪、raspistillyuv旨袒。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉圖像术辐,而 raspivid 用于捕捉視頻砚尽。

應(yīng)用程序使用了四個(gè) OpenMAX(mmal)組件:camera(攝像)、preview(預(yù)覽)辉词、encoder(編碼)必孤、null_sink。所有應(yīng)用程序均使用了攝像組件瑞躺,raspistill 使用了圖像編碼組件敷搪,raspivid 使用了視頻編碼組件兴想,raspistillyuv 沒(méi)有使用編碼組件,而是直接將 YUV 或 RGB 從攝像組件輸出到文件赡勘。所有應(yīng)用程序均基于命令行方式運(yùn)行嫂便,通過(guò) OpenMAX 的 mmal API 進(jìn)行編寫。我們?cè)谠O(shè)計(jì)中結(jié)合Opencv調(diào)用攝像頭進(jìn)行拍照操作闸与。

攝像頭電路板與樹(shù)莓派通過(guò)一條 15 芯的排線進(jìn)行連接顽悼。具體連接操作如下:先將樹(shù)莓派上連接座兩端卡扣拉起,再把排線插入座中几迄,并豎直蔚龙,然后按下兩端的卡扣。攝像頭電路板連接同上映胁。

3.3 驅(qū)動(dòng)模塊

當(dāng)輸入信號(hào)相對(duì)而言比較微弱時(shí)木羹,相應(yīng)功率較小無(wú)法正常工作。驅(qū)動(dòng)模塊實(shí)質(zhì)是通過(guò)放大功率解孙,從而滿足負(fù)載額定功率使得負(fù)載可以正常工作坑填,從而可以響應(yīng)微弱的輸入信號(hào)。微型計(jì)算機(jī)(樹(shù)莓派)上有IN1, IN2, IN3, IN4四個(gè)接口弛姜,根據(jù)資料脐瑰,設(shè)置為低電平就可以驅(qū)動(dòng),用杜邦線分別將IN1廷臼,IN2苍在,IN3,IN4和GPIO 21(Pin 40)荠商,GPIO 20(Pin 38), GPIO 16(Pin 36), GPIO 19(Pin 35)進(jìn)行連接寂恬。每次將四個(gè)GPIO端口按下表依次設(shè)置好電平后,可以sleep幾十毫秒來(lái)控制轉(zhuǎn)速

圖3.3 步進(jìn)電機(jī)驅(qū)動(dòng)原理

圖3.4 樹(shù)莓派GPIO編碼圖

3.3.1 步進(jìn)電機(jī)工作原理

在不超過(guò)額定負(fù)載時(shí)莱没,脈沖信號(hào)的頻率控制電機(jī)轉(zhuǎn)動(dòng)的速度初肉、脈沖數(shù)決定電機(jī)止步的位置,均不會(huì)因?yàn)樨?fù)載變化而受到任何的影響[8]饰躲。步進(jìn)電機(jī)每走一步牙咏,就要加一個(gè)激磁信號(hào),假如適當(dāng)?shù)男盘?hào)嘹裂,轉(zhuǎn)子以一定的步數(shù)轉(zhuǎn)動(dòng)妄壶;無(wú)激磁信號(hào)輸入時(shí),轉(zhuǎn)子保持一定的位置焦蘑。步進(jìn)電機(jī)工作的基本原理如下:

(1)換相順序的控制

電機(jī)通電后盯拱,主要通過(guò)脈沖分配來(lái)實(shí)現(xiàn)工作相序的變化。以步進(jìn)電機(jī)四相八拍工作方式為例例嘱,要求各相按照A-AB-B-BC-C-CD-D-DA的順序來(lái)工作狡逢,控制脈沖就要按照該順序來(lái)控制A、B拼卵、C奢浑、D相的通斷。

(2)步進(jìn)電機(jī)轉(zhuǎn)向的改變

按照既定工作方式正向轉(zhuǎn)動(dòng)的順序來(lái)給電機(jī)通電腋腮,電機(jī)就會(huì)正向轉(zhuǎn)動(dòng)雀彼;但是按照相反順序來(lái)通電的話,電機(jī)會(huì)向相反方向轉(zhuǎn)動(dòng)即寡。

(3)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)速度的改變

步進(jìn)電機(jī)每一次接收到一個(gè)控制脈沖徊哑,它就會(huì)相應(yīng)轉(zhuǎn)動(dòng)一步,轉(zhuǎn)動(dòng)固定角度聪富。因此步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)速度就由兩脈沖的間隔長(zhǎng)短來(lái)決定莺丑,即是兩脈沖發(fā)送間隔越長(zhǎng),相應(yīng)的步進(jìn)電機(jī)轉(zhuǎn)動(dòng)就越慢墩蔓。如果要實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)速度調(diào)節(jié)梢莽,就需要改變單位時(shí)間內(nèi)控制模塊發(fā)出的脈沖個(gè)數(shù)。

步進(jìn)電機(jī)驅(qū)動(dòng)方法有四相四拍運(yùn)行方式奸披,即AB-BC-CD-DA-AB昏名;四相八拍運(yùn)行方式,即A-AB-B-BC-C-CD-D-DA-A阵面。

四相步進(jìn)電機(jī)轻局,供電電源為5伏,5伏電源的正極性端連接電機(jī)公共端样刷,而 5伏電源的接地端需要分別和電機(jī)剩余的四根控制線順次接觸嗽交,可以發(fā)現(xiàn)電源地線與電機(jī)控制線每接觸一下,步進(jìn)電機(jī)就會(huì)轉(zhuǎn)動(dòng)一定角度颂斜,電機(jī)轉(zhuǎn)動(dòng)完整一圈的時(shí)間夫壁,恰好需要如此來(lái)回轉(zhuǎn)動(dòng)的次數(shù)可以達(dá)到5次。由此可以計(jì)算出該步進(jìn)電機(jī)的步進(jìn)角度為

度沃疮。若四條控制線與電源地線接觸的順序恰好相反盒让,那么電機(jī)也就隨之向相反方向轉(zhuǎn)動(dòng)。

3.3.2 步進(jìn)電機(jī)驅(qū)動(dòng)電路

由于步進(jìn)電機(jī)的驅(qū)動(dòng)電流的數(shù)值相對(duì)較高司蔬,所以單片機(jī)與步進(jìn)電機(jī)不能直接連接邑茄,常常采用專門的接口及驅(qū)動(dòng)電路。驅(qū)動(dòng)器可以采用功率比較高的復(fù)合管俊啼,如ULN2003肺缕,L298N,或者購(gòu)買專用的步進(jìn)電機(jī)驅(qū)動(dòng)器。驅(qū)動(dòng)電路的工作狀態(tài)是由控制信號(hào)來(lái)決定的同木,控制信號(hào)需要由主控模塊浮梢,即單片機(jī)來(lái)產(chǎn)生。期望實(shí)現(xiàn)以下的步進(jìn)電機(jī)驅(qū)動(dòng)要求:

(1)期望驅(qū)動(dòng)電路提供的電流上升和下降速度可以比較快彤路,這樣可以使電流的波形盡可能的接近矩形波秕硝。

(2)期望驅(qū)動(dòng)電路功率和效率相對(duì)比較高,提高運(yùn)行經(jīng)濟(jì)性洲尊。

單片機(jī)的輸出電流太小远豺,無(wú)法直接連接步進(jìn)電機(jī),需要加驅(qū)動(dòng)電路坞嘀。對(duì)于電流小于0.5A的步進(jìn)電機(jī)躯护,可以采用ULN2003類的驅(qū)動(dòng)IC。驅(qū)動(dòng)芯片ULN2003內(nèi)部結(jié)構(gòu)如圖3.4所示丽涩。

圖3.4 ULN2003內(nèi)部結(jié)構(gòu)框圖

ULN2003是由復(fù)合達(dá)林頓晶體管排列組成棺滞,使耐受電壓比較高,允許通過(guò)電流較大内狸。共有7對(duì)NPN達(dá)林頓管检眯,分別為芯片7個(gè)控制單元,包括功率驅(qū)動(dòng)單元昆淡、保護(hù)單元等锰瘸。ULN2003采用DIP-16或者SOP-16雙列16腳塑料封裝,驅(qū)動(dòng)單元可以與步進(jìn)電動(dòng)機(jī)直接耦合昂灵,連接方便避凝,其數(shù)字邏輯電路為非門電路,取反控制眨补。

選取ULN2003作為電機(jī)驅(qū)動(dòng)芯片管削,價(jià)格經(jīng)濟(jì),且可以充分發(fā)揮功能撑螺,實(shí)現(xiàn)穩(wěn)定驅(qū)動(dòng)含思。可以直接通過(guò)電源來(lái)調(diào)節(jié)輸出電壓甘晤,可以直接用單片機(jī)的IO口提供信號(hào)含潘,而且電路簡(jiǎn)單。芯片采用單片機(jī)作為控制核心线婚,在程序相互調(diào)用的方面遏弱,更加的方便靈活。

圖3.5 ULN2003引腳圖

圖3.5所示為驅(qū)動(dòng)器引腳圖塞弊,圖左邊1~7引腳為輸入端漱逸,有單片機(jī)直接控制泪姨,接單片機(jī)輸出端,引腳8直接接地饰抒;右側(cè)10~16引腳為輸出端肮砾,接步進(jìn)電機(jī),引腳9接電源+5V循集,必要時(shí)也可以什么都不接懸空而置唇敞,該驅(qū)動(dòng)器可提供最高0.5A的電流蔗草。

ULN2003的主要特點(diǎn)是:

(1)驅(qū)動(dòng)ULN2003電流比較大咒彤。ULN2003可以較好的用于單片機(jī)控制的電路。

(2)ULN2003連接上拉電阻咒精,在驅(qū)動(dòng)電機(jī)時(shí)可以提高其抵抗干擾的能力镶柱。ULN2003的每?jī)蓚€(gè)達(dá)林頓管視為一個(gè)單元,都會(huì)串聯(lián)一定阻值的高值電阻可以直接和TTL 或承載電壓為5V的CMOS 裝置連接 模叙。

(3)ULN2003的輸出采用集電極開(kāi)路歇拆,電流輸出值比較大,可以達(dá)到500mA范咨。因此可以用來(lái)驅(qū)動(dòng)電機(jī)故觅。

另外,ULN2003的極限參數(shù)分別如表3.1渠啊、3.2所列输吏。

表3.1 ULN2003的極限參數(shù)

表3.2 ULN2003的極限參數(shù)

接線時(shí)需要把步進(jìn)電機(jī)電路圖的紅色線懸空,其它線接驅(qū)動(dòng)板替蛉。如果驅(qū)動(dòng)不起來(lái)贯溅,有可能接線不對(duì)或電壓低。如果用單片機(jī)來(lái)控制此步進(jìn)電機(jī)躲查,則只需分別依次給各線一定時(shí)間的脈沖電流它浅,電機(jī)便可連續(xù)轉(zhuǎn)動(dòng)起來(lái)。

ULN2003驅(qū)動(dòng)電機(jī)的電路圖如下圖3.6所示镣煮。由單片機(jī)P3.4—P3.7口經(jīng)上拉電阻作為驅(qū)動(dòng)芯片ULN2003的輸入姐霍。COM端供電12V,輸出端10至12引腳均接地典唇。四相五線式步進(jìn)電機(jī)的A镊折、B、C蚓聘、D四相分別與ULN2003的輸出端1C—4C連接腌乡,接收控制脈沖,實(shí)現(xiàn)控制夜牡。

圖3.6 ULN2003驅(qū)動(dòng)電機(jī)的電路圖

3.3.3 步進(jìn)電機(jī)的選型

步進(jìn)電機(jī)是一種專門用于位置與速度精確控制的特種電機(jī)与纽,雖然同為電機(jī)件侣签,步進(jìn)電機(jī)區(qū)別于其他控制電機(jī)的最大特點(diǎn)是,它主要采用無(wú)反饋環(huán)節(jié)的開(kāi)環(huán)控制急迂,將微觀的電脈沖信號(hào)轉(zhuǎn)變?yōu)楹暧^電機(jī)轉(zhuǎn)動(dòng)的角位移或線位移影所。它通過(guò)數(shù)字來(lái)實(shí)現(xiàn)電機(jī)控制,控制信號(hào)以脈沖形式發(fā)出僚碎,它所接受到的脈沖可以驅(qū)使電機(jī)轉(zhuǎn)動(dòng)猴娩,即被轉(zhuǎn)化為相應(yīng)的角位移,所以只要給步進(jìn)電機(jī)一個(gè)合適的脈沖信號(hào)勺阐,它就隨之動(dòng)作固定角度卷中,當(dāng)采用單片機(jī)來(lái)控制步進(jìn)電機(jī)相對(duì)簡(jiǎn)單易操作。繞在定子的線圈配置作為步進(jìn)電機(jī)相數(shù)分類的主要依據(jù)渊抽,主要可分為2相蟆豫、4相、5相等懒闷;根據(jù)外部引線步進(jìn)電機(jī)又被分為三線式十减、五線式、六線式等愤估,但各種類型的電機(jī)其控制方法并沒(méi)有發(fā)生太大的變化帮辟,均采用脈沖信號(hào)進(jìn)行驅(qū)動(dòng)。

門禁系統(tǒng)的運(yùn)動(dòng)不需要加速玩焰、減速過(guò)程由驹,所需轉(zhuǎn)速較低,所以步進(jìn)電機(jī)選用自啟動(dòng)運(yùn)行方式震捣。自啟動(dòng)運(yùn)行方式是指在驅(qū)動(dòng)電機(jī)旋轉(zhuǎn)和停止時(shí)不經(jīng)過(guò)加速荔棉、減速階段,而直接以驅(qū)動(dòng)脈沖速度啟動(dòng)和停止的運(yùn)行方式蒿赢。同時(shí)润樱,因?yàn)樵趩?dòng)、停止時(shí)存在一個(gè)突然的速度變化羡棵,所以這種方式需要較大的加壹若、減速力矩。由于具體負(fù)載重量也會(huì)影響其是否產(chǎn)生過(guò)大的工作噪音皂冰,所以四相五線式步進(jìn)電機(jī)的負(fù)載容量可以較好滿足要求店展。另外,出于對(duì)電流秃流、步距角赂蕴、靜轉(zhuǎn)矩三大要素的考慮,本設(shè)計(jì)選擇四相五線式步進(jìn)電機(jī)來(lái)模擬門禁系統(tǒng)的控制舶胀,可以直接插接方便使用概说。

3.4 報(bào)警模塊

作為人臉識(shí)別門禁系統(tǒng)的設(shè)備碧注,聲光報(bào)警電路不可或缺贪婉。在系統(tǒng)工作中览绿,每當(dāng)人臉數(shù)據(jù)匹配成功時(shí),便會(huì)觸發(fā)蜂鳴器和發(fā)光二極管實(shí)現(xiàn)聲光報(bào)警党涕,使監(jiān)控人員得到開(kāi)啟大門信號(hào)放典,反之則不報(bào)警逝变。半導(dǎo)體二極管和普通二極管都是是類似的PN結(jié)結(jié)構(gòu),具有單向?qū)щ娦苑芄梗梢詫㈦娔苻D(zhuǎn)化成光能壳影。 在將電流通到發(fā)光二極管之后,電子從N區(qū)移動(dòng)到P區(qū)声怔,并且從P區(qū)移動(dòng)到N區(qū)的空穴在PN結(jié)附近與孔中的電子復(fù)合态贤,N區(qū)域產(chǎn)生熒光發(fā)光提醒舱呻。

聲光報(bào)警設(shè)計(jì)部分包括蜂鳴器和LED報(bào)警指示燈醋火。聲音報(bào)警電路如圖3.11所示,由于微控制器驅(qū)動(dòng)能力的I / O端口較低箱吕,所以需要增加蜂鳴器PNP晶體管驅(qū)動(dòng)芥驳,可以讓那個(gè)蜂鳴器的聲音聽(tīng)起來(lái)更響,更好地發(fā)揮警報(bào)功能茬高。為了避免錯(cuò)誤的報(bào)警添加了三極管基電路兆旬,蜂鳴器只有在輸出低時(shí)才會(huì)發(fā)出聲音。

圖3.8 聲音報(bào)警電路原理圖

3.5 顯示模塊

設(shè)計(jì)中為從一定程度上減小操作人員的工作量怎栽,特用電腦顯示器作為顯示模塊丽猬,電腦顯示器就不做過(guò)多闡述了。

3.6電源模塊

本模塊的作用是用來(lái)控制電源是否進(jìn)入工作狀態(tài)熏瞄。電源模塊一般分為以下幾部分:濾波電路模塊脚祟、全波整流電路模塊、電源變壓器模塊等强饮。一般電源提供的是220V交流電由桌,經(jīng)過(guò)門禁系統(tǒng)的電源模塊中變壓器的變壓,變?yōu)橹苯涌梢怨╅T禁使用的電壓邮丰,然后進(jìn)行全波整流行您,得到有尖峰脈沖的直流電,然后在濾波電路將有交流成分的電壓濾除剪廉,最后得到可供系統(tǒng)使用的直流電娃循。但我們的設(shè)計(jì)不需要這么大電流,電源直接是用兩節(jié)充電鋰電池18650共7v進(jìn)行供電斗蒋,所以不需要用穩(wěn)壓芯片捌斧。工作原理圖如圖3.1捧书。

圖3.9 電源模塊原理圖

第4章人臉識(shí)別門禁系統(tǒng)軟件設(shè)計(jì)

4.1安裝系統(tǒng)

軟件部分:win32 DiskImager、SDFormatter骤星、樹(shù)莓派鏡像文件

硬件部分:SD卡经瓷、讀卡器

準(zhǔn)備工作

1.16G的SD卡一張(樹(shù)莓派3B專用micro SD卡)2.下載樹(shù)莓派系統(tǒng)鏡像文件3.Windows下安裝鏡像的工具:Win32DiskImager

安裝實(shí)戰(zhàn)

1.解壓下載的系統(tǒng)鏡像壓縮文件,得到img鏡像文件2.將SD卡使用卡托或者讀卡器后洞难,連上電腦3.解壓并運(yùn)行Win32DiskImager工具4.在軟件中選擇系統(tǒng)鏡像的img文件舆吮,“Device”下選擇SD卡的盤符,然后點(diǎn)擊“Write”然后就開(kāi)始安裝系統(tǒng)了队贱,根據(jù)你的SD卡的速度色冀,安裝過(guò)程有快有慢5.安裝結(jié)束后會(huì)彈出完成對(duì)話框,說(shuō)明安裝就完成了柱嫌。

圖4.1 格式化軟件工具

圖4.2系統(tǒng)燒錄軟件工具

首先把SD卡連接到電腦锋恬,打開(kāi)SDFormatter.注意觀察盤符不要誤將其他SD卡格式化。

接下來(lái)打開(kāi)win32 diskimager.打開(kāi)存放鏡像的路徑编丘,點(diǎn)擊“write” /“yes” 等待鏡像燒錄成功与学。

圖4.3 燒錄成功提醒界面

圖4.4 樹(shù)莓派官方系統(tǒng)Pixel

4.2 配置中文環(huán)境以及擴(kuò)展文件系統(tǒng)

樹(shù)莓派3B默認(rèn)是采用英文字庫(kù)的,而且系統(tǒng)里沒(méi)有預(yù)裝中文字庫(kù)嘉抓,所以在locale中將其改成中文索守,也不會(huì)顯示中文,只會(huì)顯示一堆方塊抑片。因此需要手動(dòng)來(lái)安裝中文字體卵佛。

ssh中輸入以下命令:

安裝過(guò)程中如果碰到(Y/n),都選擇y中文字庫(kù)安裝完成之后敞斋,還需要安裝一個(gè)中文輸入法截汪。輸入如下命令

一樣的安裝過(guò)程,安裝完畢后輸入

然后選擇change_locale植捎,在Default locale for the system environment:中選擇zh_CN.UTF-8,配置完成之后衙解,輸入命令

重啟完成好就可以在VNC連接上去后使用中文顯示和中文輸入法了,切換中文輸入法一樣也是ctrl+space鸥跟。

圖4.5 樹(shù)莓派安裝中文

終端輸入:sudo raspi-config 擴(kuò)展文件系統(tǒng)

圖4.6 樹(shù)莓派擴(kuò)展文件系統(tǒng)

“Expand Filesystem” 回車后將SD空間擴(kuò)展(重啟后生效)丢郊。配置中文環(huán)境如下所示。

圖4.7 樹(shù)莓派設(shè)置中文(一)

圖4.8 樹(shù)莓派設(shè)置中文(二)

圖4.9 樹(shù)莓派設(shè)置中文(三)

空格選中”zh_CN.UTF-8 “ 回車 “ok” 輸入:sudo reboot 重啟后生效

圖4.10 樹(shù)莓派設(shè)置中文(四)

圖4.11 樹(shù)莓派設(shè)置中文(五)

4.3 RPI.GPIO搭建及使用介紹

本系統(tǒng)使用的是樹(shù)莓派官方系統(tǒng)raspbian医咨。系統(tǒng)預(yù)裝了python和C編譯器等軟件枫匾。運(yùn)行本次系統(tǒng)前需要對(duì)環(huán)境進(jìn)行搭建。樹(shù)莓派內(nèi)核中已經(jīng)編譯自帶GPIO的驅(qū)動(dòng)拟淮,本次設(shè)計(jì)采用第三方編寫好的庫(kù)函數(shù)來(lái)完成具體的操作干茉。python GPIO 是一個(gè)小型的 python 庫(kù),可以幫助用戶完成 raspberry 相關(guān) IO 口操作很泊,但是 python GPIO 庫(kù)還沒(méi)有支持 SPI角虫、I2C 或者 1-wire 等總線接口沾谓。先安裝 python-dev,輸入以下指令戳鹅。

sudo apt-get install python-dev

安裝 RPi.GPIO均驶,依次輸入以下指令。

· 下載:$ wget

· 解壓縮:$ tar xvzf RPi.GPIO-0.5.3a.tar.gz

· 進(jìn)入解壓之后的目錄 :$ cd RPi.GPIO-0.5.3a

· 啟動(dòng)安裝 :$ sudo python setup.py install

導(dǎo)入 RPi.GPIO 模塊:

通過(guò)該操作枫虏,可以將模塊名稱映射為 GPIO妇穴,以便接下來(lái)您其它腳本進(jìn)行使用。

導(dǎo)入模塊并檢查它是否導(dǎo)入成功隶债,可以嘗試:

針腳編號(hào)

目前有兩種方式可以通過(guò) RPi.GPIO 對(duì) Raspberry Pi 上的 IO 針腳進(jìn)行編號(hào)腾它。

第一種方式是使用 BOARD 編號(hào)系統(tǒng)。該方式參考 Raspberry Pi 主板上 P1 接線柱的針腳編號(hào)死讹。使用該方式的優(yōu)點(diǎn)是無(wú)需考慮主板的修訂版本瞒滴,您硬件始終都是可用的狀態(tài)。您將無(wú)需從新連接線路和更改您的代碼赞警。

第二種方式是使用 BCM 編號(hào)妓忍。這是一種較低層的工作方式 – 該方式參考 Broadcom SOC 的通道編號(hào)。使用過(guò)程中仅颇,您始終要保證主板上的針腳與圖表上標(biāo)注的通道編號(hào)相對(duì)應(yīng)单默。您的腳本可能在 Raspberry Pi 主板進(jìn)行修訂版本更新時(shí)無(wú)法工作。

指定您所使用的方式(必須指定):

或者

Raspberry Pi 的 GPIO 上可能同時(shí)有多個(gè)腳本/循環(huán)忘瓦。因此,如果 RPi.GPIO 檢測(cè)到某個(gè)針腳被設(shè)置為其它用途而非默認(rèn)的狀態(tài)(默認(rèn)為輸入)引颈,您會(huì)在嘗試配置某腳本時(shí)得到警告消息耕皮。禁用該警告消息:

為每個(gè)用于輸入或輸出的針腳配置通道。配置為輸入的通道:

通道編號(hào)是基于您所使用的編號(hào)系統(tǒng)所指定的(BOARD 或 BC)蝙场。配置為輸出的通道:

通道編號(hào)是基于您所使用的編號(hào)系統(tǒng)所指定的(BOARD 或 BCM)凌停。可以指定輸出通道的初始值:

輸入讀取 GPIO 針腳的值:

通道編號(hào)是基于您所使用的編號(hào)系統(tǒng)所指定的(BOARD 或 BCM)售滤。)這將返回 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True罚拟。

設(shè)置 GPIO 針腳的輸出狀態(tài):

通道編號(hào)是基于您所使用的編號(hào)系統(tǒng)所指定的(BOARD 或 BCM)。)

狀態(tài)可以為 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True完箩。在任何程序結(jié)束后赐俗,請(qǐng)養(yǎng)成清理用過(guò)的資源的好習(xí)慣。使用 RPi.GPIO 也同樣需要這樣弊知∽璐恢復(fù)所有使用過(guò)的通道狀態(tài)為輸入,您可以避免由于短路意外損壞您的 Raspberry Pi 針腳秩彤。注意叔扼,該操作僅會(huì)清理您的腳本使用過(guò)的 GPIO 通道事哭。

腳本結(jié)束后進(jìn)行清理:

4.4 Opencv運(yùn)行環(huán)境的搭建

首先進(jìn)入Raspberry Pi系統(tǒng),將樹(shù)莓派連上網(wǎng)絡(luò)瓜富,然后Ctrl + Alt +t打開(kāi)命令終端(直接點(diǎn)擊終端圖標(biāo)可能會(huì)卡)鳍咱,如果終端窗口沒(méi)有出現(xiàn)的話,從頂部任務(wù)欄可以找到与柑,點(diǎn)開(kāi)就好流炕。首先是以下這幾條更新命令,每次單獨(dú)執(zhí)行:

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update

然后執(zhí)行安裝opencv的構(gòu)建相關(guān)命令:

sudo apt-get install build-essential git cmake pkg-config

然后是以下這幾條命令安裝圖片工具包仅胞,每次單獨(dú)執(zhí)行(網(wǎng)上有很多一起執(zhí)行的每辟,但是經(jīng)常出現(xiàn)問(wèn)題)

sudo apt-get install libjpeg8-dev

sudo apt-get install libtiff5-dev

sudo apt-get install libjasper-dev

sudo apt-get install libpng12-dev

然后是視頻I/O包:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

下面安裝GTK:

sudo apt-get install libgtk2.0-dev

然后安裝優(yōu)化函數(shù)的包:

sudo apt-get install libatlas-base-dev gfortran

然后執(zhí)行以下命令下載opencv3.0:

cd /home/pi

git clone https://github.com/opencv/opencv.git

cd opencv

git checkout 3.0.0

然后安裝opencv_contrib:

cd /home/pi

git clone https://github.com/opencv/opencv_contrib.git

cd opencv_contrib

git checkout 3.0.0

然后安裝開(kāi)發(fā)包:

sudo apt-get install python2.7-dev

然后安裝pip: SHAPE * MERGEFORMAT

wget https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

然后安裝virtualenv virtualenvwrapper:

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

下面這個(gè)步驟不僅僅是命令了,打開(kāi)~/.profile文件干旧,我是使用vim打開(kāi)的:

sudo nano ~/.profile(”~”符號(hào)樹(shù)莓派鍵盤打不出來(lái) 用筆記本SSH連上去)

打開(kāi)profile后渠欺,在這個(gè)文件最后,添加以下內(nèi)容后保存退出:

# virtualenv and virtualenvwrapper

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

然后執(zhí)行下面這個(gè)命令:

source ~/.profile

然后創(chuàng)建虛擬工作環(huán)境并進(jìn)入:

sudo mkvirtualenv LC

workon LC

一定要確保進(jìn)去剛剛創(chuàng)建的虛擬環(huán)境了椎眯,進(jìn)入虛擬環(huán)境的標(biāo)志是進(jìn)去后命令的最前面(綠字前面)都會(huì)增加“(LC)”挠将。

下面在虛擬環(huán)境中安裝numpy:

pip install numpy

sudo rm -rf ~/.cache/pip/

pip install numpy

一定確保在剛剛的虛擬環(huán)境下進(jìn)行以下操作,如果新開(kāi)了一個(gè)命令行窗口编整,那么就依次執(zhí)行 source ~/.profile 命令和 workon LC 命令進(jìn)入虛擬環(huán)境再執(zhí)行以下操作舔稀。

執(zhí)行以下命令來(lái)設(shè)置編譯:

cd ~/opencv

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE

-D CMAKE_INSTALL_PREFIX=/usr/local

-D INSTALL_C_EXAMPLES=ON

-D INSTALL_PYTHON_EXAMPLES=ON

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules

-D BUILD_EXAMPLES=ON ..

執(zhí)行以下命令開(kāi)始正式編譯opencv3.0:

make -j4

編譯完后進(jìn)行安裝:

sudo make install

安裝后進(jìn)行相關(guān)配置:

sudo ldconfig

配置完成

本次設(shè)計(jì)主要利用opencv進(jìn)行拍照,確實(shí)是有點(diǎn)大材小用掌测。但是通過(guò)opencv的使用内贮,加深了對(duì)圖形處理方面的簡(jiǎn)單認(rèn)識(shí)和理解。在設(shè)計(jì)之余學(xué)會(huì)了opencv進(jìn)行簡(jiǎn)易人臉識(shí)別的原理汞斧。

4.5 系統(tǒng)程序設(shè)計(jì)

主程序設(shè)計(jì)

流程圖

觸摸開(kāi)關(guān)

流程圖

攝像頭

流程圖

步進(jìn)電機(jī)

流程圖

第5章系統(tǒng)運(yùn)行以及源代碼分析

5.1 樹(shù)莓派系統(tǒng)使用說(shuō)明

樹(shù)莓派系統(tǒng):可以直接用顯示器進(jìn)入系統(tǒng)桌面也可以遠(yuǎn)程桌面進(jìn)入系統(tǒng)夜郁,或者putty軟件SSH。本設(shè)計(jì)以遠(yuǎn)程桌面登陸為例粘勒。登陸路由器查詢分配給樹(shù)莓派的ip地址竞端。打電腦的遠(yuǎn)程桌面軟件。輸入樹(shù)莓派的IP地址庙睡,本次設(shè)計(jì)中樹(shù)莓派的IP是192.168.0.115事富。用戶名為pi,密碼:raspberry遠(yuǎn)程桌面進(jìn)去系統(tǒng)后還可以再去連接本地wifi信號(hào)。

5.2 曠視FACE++ API使用說(shuō)明

本次設(shè)計(jì)對(duì)圖像的處理是通過(guò)云服務(wù)來(lái)實(shí)現(xiàn)的乘陪。主要是調(diào)用Face++的API來(lái)實(shí)現(xiàn)的照片中人臉的對(duì)比统台。首先將三張照片上傳樹(shù)莓派或者用樹(shù)莓派攝像頭采集三張照片。調(diào)用Detect API進(jìn)行人臉檢測(cè)和人臉?lè)治鲈萘酢WR(shí)別出的人臉會(huì)給出face_token饺谬,用于后續(xù)的人臉比對(duì)等操作。當(dāng)觸摸開(kāi)關(guān)出發(fā)實(shí)時(shí)拍照之后,調(diào)用Search API在Faceset中找出與目標(biāo)人臉最相似的一張或多張人臉募寨。支持傳入face_token或者直接傳入圖片進(jìn)行人臉?biāo)阉髯逭埂J褂脠D片進(jìn)行比對(duì)時(shí)會(huì)選取圖片中檢測(cè)到人臉尺寸最大的一個(gè)人臉。

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'

]

圖5.1 創(chuàng)建FACE++ API key

Detect API

調(diào)用者提供圖片文件或者圖片URL仪缸,進(jìn)行人臉檢測(cè)和人臉?lè)治觥WR(shí)別出的人臉會(huì)給出face_token列肢,用于后續(xù)的人臉比對(duì)等操作恰画。請(qǐng)注意,只對(duì)人臉包圍盒面積最大的5個(gè)人臉進(jìn)行分析瓷马,其他人臉可以使用Face Analyze API進(jìn)行分析拴还。如果您需要使用檢測(cè)出的人臉于后續(xù)操作,建議將對(duì)應(yīng)face_token添加到FaceSet中欧聘。如果一個(gè)face_token連續(xù)72小時(shí)沒(méi)有存放在任意FaceSet中片林,則該face_token將會(huì)失效。如果對(duì)同一張圖片進(jìn)行多次人臉檢測(cè)怀骤,同一個(gè)人臉得到的face_token是不同的费封。

Search API

在Faceset中找出與目標(biāo)人臉最相似的一張或多張人臉。支持傳入face_token或者直接傳入圖片進(jìn)行人臉?biāo)阉鹘住J褂脠D片進(jìn)行比對(duì)時(shí)會(huì)選取圖片中檢測(cè)到人臉尺寸最大的一個(gè)人臉弓摘。

成功請(qǐng)求返回值示例:

5.3 系統(tǒng)調(diào)試及運(yùn)行

整體流程:將三張待檢測(cè)人員的照片存儲(chǔ)到程序所在目錄,執(zhí)行程序時(shí)痕届,調(diào)用face++的detectAPI將三張照片中的人臉信息存儲(chǔ)在開(kāi)發(fā)者賬號(hào)韧献,然后執(zhí)行search的API對(duì)程序過(guò)程中拍攝的照片進(jìn)行處理。檢測(cè)照片中的人臉信息與之前上傳的人臉信息對(duì)比爷抓,如果相似度達(dá)到百分之80以上返回相似度最高的人臉信息势决。

圖5.2 程序目錄

5.3.1程序初始設(shè)置

首先將自己的照片上傳到本文件夾并修改圖片文件名,然后在代碼中將三張待對(duì)比照片賦值給face_one蓝撇、face_two、face_three三個(gè)變量陈莽。并設(shè)置進(jìn)行對(duì)比的照片名為customer.jpg渤昌。

face_one = 'face_one.jpg'

face_two = 'face_two.jpg'

face_three = 'face_three.jpg'

face_search = 'customer.jpg'

設(shè)置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程序中設(shè)置調(diào)用API的key和secret。

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

key = "xzFPqqR1q_fasM1D3s4yvUdcBoTovUMX"

secret = "4GXhLafqDOmnfQRxx-6ZlEVwQpOlZoW-"

api = facepp.API(key, secret)

5.3.2 各功能函數(shù)

#蜂鳴器索绪,前面已經(jīng)初始設(shè)置GPIO12為輸出模式湖员,此處bee()函數(shù)設(shè)置gpio12為干電平,延時(shí)0.5s后置為低瑞驱。意味著當(dāng)調(diào)用bee()函數(shù)時(shí)蜂鳴器鳴叫0.5s.

def bee():

GPIO.output(12, False)

time.sleep(0.5)

GPIO.output(12, True)

#步進(jìn)電機(jī),設(shè)置旋轉(zhuǎn)角度為180°娘摔,closewise=1時(shí),步進(jìn)電機(jī)順時(shí)針旋轉(zhuǎn)唤反,closewise=0時(shí)凳寺,步進(jìn)電機(jī)逆時(shí)針旋轉(zhuǎn)。步進(jìn)電機(jī)驅(qū)動(dòng)模塊由樹(shù)莓派的GPIO35彤侍、 GPIO36肠缨、 GPIO38 、GPIO40四個(gè)GPIO驅(qū)動(dòng)盏阶。

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)

#流水燈:初始設(shè)置已經(jīng)將GPIO11晒奕、GPIO15、GPIO16為輸出模式般哼。分別把三個(gè)LED發(fā)光二極管的長(zhǎng)引腳接到這三個(gè)GPIO上吴汪,短引腳接至負(fù)極。通過(guò)把對(duì)應(yīng)的引腳置為高電平延時(shí)0.3s后置為低蒸眠,循環(huán)點(diǎn)亮三個(gè)小燈漾橙。

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)

#提示做好準(zhǔn)備 ,一段時(shí)間后進(jìn)行拍照楞卡。在終端窗口輸出提示信息霜运。并調(diào)用light()來(lái)實(shí)現(xiàn)LED發(fā)光二極管的流水燈效果。并調(diào)用bee()讓蜂鳴器發(fā)出提示聲音蒋腮。

def prep():

print("歡迎使用人臉識(shí)別檢測(cè)系統(tǒng) 請(qǐng)面對(duì)攝像頭 5秒鐘后進(jìn)行人臉采集")

light()

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

light()

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

light()

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

light()

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

light()

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

bee()

#調(diào)用拍照函數(shù)時(shí)流水燈點(diǎn)亮淘捡,然后使用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("***********************照片采集完畢 請(qǐng)稍等*************************")

print '=' * 60

#函數(shù)調(diào)用API將本地存儲(chǔ)的照片進(jìn)行人臉檢測(cè)和人臉?lè)治鼋钩WR(shí)別出的人臉會(huì)給出face_token,用于后續(xù)的人臉比對(duì)等操作作彤。然后調(diào)用searchAPI在Faceset中找出與目標(biāo)人臉最相似的一張或多張人臉膘魄。進(jìn)行比對(duì)時(shí)會(huì)選取圖片中檢測(cè)到人臉尺寸最大的一個(gè)人臉。

觸發(fā)檢測(cè)的監(jiān)測(cè)函數(shù)det(),程序運(yùn)行時(shí)開(kāi)始檢測(cè)觸摸開(kāi)關(guān)是否被觸發(fā)竭讳。當(dāng)觸摸開(kāi)關(guān)被觸發(fā)時(shí)會(huì)發(fā)送高電平信號(hào)給樹(shù)莓派创葡。當(dāng)檢測(cè)GPIO13為真時(shí),在終端輸出確定信息绢慢,并調(diào)用主函數(shù)進(jìn)行對(duì)比操作灿渴。主程序運(yùn)行結(jié)束后繼續(xù)檢測(cè)是否被觸發(fā)。一直循環(huán)指導(dǎo)程序退出。

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荸百。當(dāng)m大于70時(shí)輸出通過(guò)檢測(cè)并調(diào)用步進(jìn)電機(jī)轉(zhuǎn)動(dòng)闻伶。

5.3.3異常處理

當(dāng)檢測(cè)時(shí)由于沒(méi)有拍攝到正常的人臉照片,程序則可能由于沒(méi)有正常的人臉庫(kù)而報(bào)錯(cuò)够话。此時(shí)須將下圖中ret=api……注釋掉蓝翰,并將上一行的注釋符號(hào)“#”取消。

圖5.7 處理報(bào)錯(cuò)信息(一)

保存并上傳后再次運(yùn)行女嘲。清除無(wú)用的人臉庫(kù)畜份。

然后再將代碼修改為初始代碼,再次進(jìn)行正確的人臉采集欣尼,程序才可以正常運(yùn)行爆雹。

圖5.7 創(chuàng)建一個(gè)faceset

這種方式解決報(bào)錯(cuò)是復(fù)雜的一個(gè)過(guò)程。由于目的只是刪除無(wú)用的人臉庫(kù)愕鼓,所以新建了一個(gè)debug.py的python文件钙态。當(dāng)檢測(cè)失敗之后執(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)建一個(gè)Faceset用來(lái)存儲(chǔ)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()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菇晃,一起剝皮案震驚了整個(gè)濱河市册倒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磺送,老刑警劉巖驻子,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異估灿,居然都是意外死亡崇呵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門馅袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)域慷,“玉大人,你說(shuō)我怎么就攤上這事汗销∶⒋猓” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵大溜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我估脆,道長(zhǎng)钦奋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮付材,結(jié)果婚禮上朦拖,老公的妹妹穿的比我還像新娘。我一直安慰自己厌衔,他們只是感情好璧帝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著富寿,像睡著了一般睬隶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上页徐,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天苏潜,我揣著相機(jī)與錄音,去河邊找鬼变勇。 笑死恤左,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搀绣。 我是一名探鬼主播飞袋,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼链患!你這毒婦竟也來(lái)了巧鸭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锣险,失蹤者是張志新(化名)和其女友劉穎蹄皱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芯肤,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷折,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崖咨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻拘。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖击蹲,靈堂內(nèi)的尸體忽然破棺而出署拟,到底是詐尸還是另有隱情,我是刑警寧澤歌豺,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布推穷,位于F島的核電站,受9級(jí)特大地震影響类咧,放射性物質(zhì)發(fā)生泄漏馒铃。R本人自食惡果不足惜蟹腾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望区宇。 院中可真熱鬧娃殖,春花似錦、人聲如沸议谷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卧晓。三九已至芬首,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禀崖,已是汗流浹背衩辟。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留波附,地道東北人艺晴。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掸屡,于是被迫代替她去往敵國(guó)和親封寞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容