玩轉(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()