畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

編程語言 樹莓派 圖像處理 人工智能 玩轉樹莓派 2017-08-02

畢業論文

基於微型計算機的人臉識別門禁系統設計

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計
畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計
畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

1. 課題意義及目標

隨科技的不斷髮展,安全性的要求也不斷提高,IC卡等傳統身份識別工具已不能滿足社會需求。所以從通用性、安全性、成熟性和造價性等多方面綜合考慮,研究新的識別工具是一個必然的趨勢。基於人臉識別的門禁系統的設計,能夠提高傳統安保行業的安全性、方便性、直觀性等,最為有效的杜絕了門禁管理中的人為因素,充分體現了門禁管理的人工智能性,避免不必要的安全隱患和人員糾紛。因此本次畢業設計選擇了人臉識別門禁系統的研究與實現,以保證門禁數據的真實性,真正做到安全、方便和直觀的門禁管理,從而進一步提高公司、倉庫、家庭等地的安保水平和管理穩定性。

本次設計將以微型計算機為核心,需選擇合適的電源模塊、檢測模塊、、數據存儲模塊、鍵盤模塊、顯示模塊和聲光報警模塊,完成人臉識別系統的檢測並報警處理的設計。要求能夠將出入門禁系統的人員面部進行識別,能夠在人臉數據匹配預存數據庫資料時啟動門禁系統中開門系統,當人臉數據不匹配預存數據庫資料時啟動門禁系統中閉門系統,實現防範防盜的作用,創造安全良好的生活工作環境。

2.主要任務

(1)查閱資料,瞭解人臉識別門禁系統的原理和基本構成,提出系統總體設計方案。

(2)通過學習完成的各個控制硬件電路設計(如檢測模塊,A/D轉換模塊,聲光報警模塊,系統電源模塊等)。

(3)完成人臉識別門禁系統的軟件設計。

(4)完成人臉識別門禁系統的調試、仿真和實物製作。

(5)完成設計說明書。

基於微型計算機(樹莓派)的人臉識別門禁系統

摘 要

隨科技的不斷髮展,社會不斷的進步,人們的自身安全意識和要求也再不斷提高,IC卡等傳統身份識別工具已不能滿足社會需求。所以從通用性、安全性、成熟性和造價性等多方面綜合考慮,研究新的識別工具是一個必然的趨勢。為能夠提高傳統安保行業的安全性、方便性、直觀性和有效的杜絕了門禁管理中的人為因素,通過人工智能方式,避免不必要的安全隱患和人員糾紛。

提出一種基於微型計算機(樹莓派)的人臉識別門禁系統,該系統通過使用人臉識別雲服務可以實時對人員進行分析辨認,以保證門禁數據的真實性,真正做到安全、方便和直觀的門禁管理,從而進一步提高公司、倉庫、家庭等地的安保水平和管理穩定性。文中詳細描述了該系統的搭建和實現過程,為相關產品提供了一套很好的解決方案。對所設計的系統進行了模擬測試,其測試結果達到了設計目標。

關鍵詞: 微型計算機(樹莓派),人臉識別,雲服務,Python

Face recognition access control system based on microcomputer (raspberry pi )

Abstract

With the continuous development of science and technology, the continuous progress of society, people's awareness of their own safety and requirements have been continuously improved, and other traditional identification tools such as IC card can not meet the social needs. Therefore, considering the versatility, security, maturity and cost, it is an inevitable trend to study new identification tools. In order to improve the security, convenience, intuitive and effective of the traditional security industry, and eliminate the human factors in the access control, we can avoid unnecessary security risks and personnel disputes through artificial intelligence.

Based on micro computer (raspberry) face recognition access control system, the system through the use of cloud services can be real-time face recognition of personnel to analyze and identify, in order to ensure the authenticity of data access, truly safe, convenient and intuitive access management, and further improve the company, from the warehouse, and family security the level of management and stability. The construction and implementation process of the system are described in detail, which provides a good solution for related products. The designed system has been simulated and tested, and the test results have reached the design goal.

Keywords:micro computer(raspberry pie), face recognition, cloud services, Python

目錄

第 1 章 緒 論

1.1 研究背景

隨著社會的發展,安全教育不斷的深化,人們的安全防範意識也逐漸贈強,這裡面不光包括個人安全,還涉及到了財產和知識產權的保護,安檢的高效,貿易的順利流通等方面的需求增加,這種生物識別技術又得了新的重視和快速發展。人臉識別隨著近幾年的發展,成本也逐漸降低,已被廣大客戶所接受,其中人臉識別技術是應用最為廣泛的。在國外,人臉識別技術早已被大量使用在國家重要部門以及軍警等安防部門。在國內,對於人臉識別技術的研究始於上世紀90年代,目前主要應用在公安、金融、網絡安全、物業管理以及考勤等領域。

市場對門禁的安全性和可靠性的要求也越來越高,技術也在不斷革新,雲技術的興起使得這現技術,又向前邁進了一步,不光是安全性和可靠性的提高,主要是體現在該技術的成本、編程、應用領域等方面變得更低,更簡單,更廣泛了。堅信這項技術會越來越好,甚至到時候生物識別技術又會有新的識別方式取代。

1.2 人臉識別的研究目的和意義

生物識別技術領域裡極富挑戰性的課題之一,再加上該技術應用廣泛,對這項技術的研發需要的知識領域十分廣泛,需要數學函數,生物技術,生理學,構圖等諸多學科的內容。如今,雖然在這方面的研究已取得了一些可喜的成果,但是FRT在實用應用中仍面臨著很嚴峻的問題,因為人臉五官是非常相似的,而且人臉本身又是由很靈活的肌肉群組成,所以人臉可以做出很多表情,於是給準確識別帶來了相當大的麻煩。如何能正確識別大量的人並滿足實時性要求是迫切需要解決的問題。

基於視覺通道信息的面部感知系統,包括人臉檢測和跟蹤、面部特徵定位、面部識別、人臉歸類(年齡、種族、性別等的判別)、表情識別、脣讀等分系統,這些往往是要進行檢測的,但最難的還是在圖像提取上,提取哪些特徵量才能將這些信息反饋,提高安全性和可靠性呢?這裡首要考慮的就是人體本身,再次就是監測的環境也十分重要,其中光線的影響就很大,光的強弱有時候會將人臉特徵遮蔽和凸顯,造成人臉識別的誤差,如果可以進步解決這些問題,就會提高安全性和可靠性,保證人民的人身及公共財產安全。

1.3國內外研究現狀

1.3.1人臉識別圖像處理的國外研究現狀

上世紀80年代初,在美國馬爾博士多年來一直參與機器視覺的研發,在機器視覺領域佔有重要地位,馬爾博士從圖像處理的角度認為機器視覺大致分為三個層次,主要包括原理層次、軟件層次和硬件層次三個層次,他是第一個提出了系統的比較完整的視覺結構圖。馬爾的視覺結構認為,三維圖像畫面可以感知各種不動的或者變化的空間,這是機器視覺系統首要完成的工作,其中測量、確定固定位置與識別空間中的三維物體尤為重要。上世紀下葉,行動,應用的自由主義派別,第一次引用並應用了自主機器識別系統,把物種視覺的理念與看法結合在了一起,突出了視覺機器系統的覺察性、理念性以及可行性。自主機器識別系統認為,機器識別應自動改變攝像頭小孔內徑,角度,方位等參數並主動得到圖像內容。自主機器識別系統主要研究以下方面:

(1)工作能力。近幾年來的自主機器識別系統的研究對機器視覺過程中的工作能力不斷看重,其中有對性能以及認識策略等各種問題的研究,首先要理解清楚哪些是原先就擁有的觀點,哪些是後天理解認識所得到的成果,各種工作方針與策略就是在此原有知識理論上得到進一步認識。

(2)主動視覺空間變化,即SpaceVariant信號的處理,選擇以及注意機制(SelectiveAttention)的表示。攝像頭拍攝獲取到的圖像有較複雜且給處理器帶來較多的信息衝擊等特點,導致機器識別系統無法客觀主動地解決。自主機器識別在信號來臨的初期階段對信號在時間上和較大領域按一定方式縮小簡化,保存一些對處理器有價值方面,以便後續的處理。

主動視覺的前期研究進展緩慢。上世紀80年代初, krotkov和brown及ballard完成了以聯合檢測傳感器為基礎的實驗,打破了主動視覺的關鍵性。在研究中,krotkov和brrown及ballarad通過一系列的工作完成了對檢測儀表的自動控制,攝像頭通過對外界環境的攝取,隨時跟隨外部環境的變化實現對行駛小車的控制[ ]。從此以後,攝像機就被用做視覺檢驗的工作。

到目前為止,機器視覺仍然有非常明顯的優點,比如攝取的內容豐富,能夠遠程控制,可以及時地檢測和響應路況的變化;同時,機器視覺識別最大的缺點是檢測到的信息量太大,有時候會影響著系統的實時性。高性能硬件的開發,新的算法是視覺性能提高的關鍵性因素。我們知道日本研發的集成電路大規模的應用到機器視覺對視覺的發展有著很大的促進作用;UBM大學重新設計的EIMS.Vision系統,在機器視覺領域也有著不可替代的作用。由於上面的方法成本較高,現在很多科研人員又在重新思考新的解決辦法,目前有人想到採用高效的內部算法來實現。最先接觸主動機器視覺理論的科學家是一名來自University of Pennsylvania的R.Bajcsy教授,隨後在重新構建的三維空間中應用到了E.Krotkow系統。在Krotkow系統中,我們很容易實現的調整攝像機的高度,調節攝像機的像素,這樣有利於我們更大程度上研究機器視覺。在接下來幾年的探索中,科學家們通過改變其他攝像頭檢測,以及內部調節器的參數,構建新的解決算法也有一定的可行性。例如:國外的科研人員使用Hough變換的方法,從攝像頭拍攝到的信息中提取外界環境標誌物,採用SSD算法,並用數據測量採用自適應濾波處理,可減少誤差測量。雖然國內在機器視覺攝像頭領域的研究起步較晚,但已經取得了突飛猛進的發展。機器視覺系統中對於障礙物的檢測問題具有很大的現實作用,如果我們能夠在這一領域內有突破性的研究成果,將會更好的改善我們的生活狀況。

1.3.2人臉識別圖像處理的國內研究現狀

人臉識別系統現在在大多數領域中起到舉足輕重的作用,尤其是用在機關單位的安全和考勤、網絡安全、銀行、海關邊檢、物業管理、軍隊安全、智能身份證、智能門禁、司機駕照驗證、計算機登錄系統。我國在這方面也取得了較好的成就,國家863項目“面像檢測與識別核心技術”通過成果鑑定並初步應用,就標誌著我國在人臉識別這一當今熱點科研領域掌握了一定的核心技術。北京科瑞奇技術開發股份有限公司在2002年開發了一種人臉鑑別系統,對人臉圖像進行處理,消除了照相機的影響,再對圖像進行特徵提取和識別。這對於人臉鑑別特別有價值,因為人臉鑑別通常使用正面照,要鑑別的人臉圖像是不同時期拍攝的,使用的照相機不一樣。系統可以接受時間間隔較長的照片,並能達到較高的識別率,在計算機中庫藏2300人的正面照片,每人一張照片,使用相距1--7年、差別比較大的照片去查詢,首選率可以達到50%,前20張輸出照片中包含有與輸入照片為同一人的照片的概率可達70% 。 2005年1月18日,由清華大學電子系人臉識別課題組負責人蘇光大教授主持承擔的國家"十五"攻關項目《人臉識別系統》通過了由公安部主持的專家鑑定。鑑定委員會認為,該項技術處於國內領先水平和國際先進水平。

人臉識別技術已經被廣泛應用於公安偵破、考勤系統、攝像頭監視系統、網絡應用、身份識別、支付系統等領域,雲技術則簡化了人臉識別技術,促進了這項的發展,讓使用更加廣泛,成本也相對降低。

1.4 本設計主要研究內容

本文通過基於微型計算機(樹莓派)的人臉識別門禁系統展開探索研究,通過對人臉識別和門禁系統的的功能分析,完成人臉識別和門禁系統開閉的整體設計,從整體上來看,系統設計分為軟件和硬件兩部分,其中最主要的,也是本設計的難點當屬內部軟件算法,也就是採集圖像後的圖像處理。本設計的基本任務是對人員臉部進行識別,通過數據的比對,並控制門禁系統的開閉,也就是當數據匹配成功時,啟動門禁系統,當數據匹配不成功時,不啟動門禁系統。本文內容總共分為6章,第一章是“緒論”,是對本文的大體概括,第二章至第五章是本論文最主要的部分,也是該設計最具體的工作,第六章是“總結與展望”,是作者自己在整個過程的收穫與體會。具體結構如下:

第一章 緒論

大體講述本畢業設計,即人臉識別圖像處理的研究價值意義以及發展歷程,非常具體地講述了人臉識別圖像處理的國內外研究現狀。本文設計的人臉識別門禁系統,通過程序內部的圖像處理,數據匹配來實現對大門的控制,通過這一階段的探索研究,能夠有效地實現門禁系統的啟停,起到安全防範作用,研究目的在為今後的人臉識別門禁系統的設計提供一些想法和思路,同時通過這一設計,增加自己的專業技能,使自己能對本專業的理論知識有更深入地理解。

第二章 人臉識別門禁系統總體設計方案

本文從人臉識別門禁系統總體設計方案出發實際情況出發,結合自身水平條件的限制,詳細分析了攝像頭的使用條件以及內部原理,以及攝取到的圖像的基本信息。同時論文也簡單敘述了人臉識別門禁系統的門禁系統驅動模塊,以及攝像頭模塊的硬件連接情況,並且也繪製了人臉識別門禁軟件系統總體框架流程圖。

第三章 人臉識別門禁系統的硬件設計

為了比較準確的採集人臉圖像,對圖像進行處理,在進行數據匹配,來實現對人臉的識別,並控制門禁系統的驅動模塊,必須提供穩固的硬件保障。基於微型計算機(樹莓派)的人臉識別門禁系統的硬件系統部分進行設計。觸摸傳感器被觸發後啟動人臉識別的主程序。蜂鳴器和LED流水燈發出提示訊號,當檢測人臉為正確人臉並與通過與本地照片對比正確後,步進電機轉動即開門。硬件系統部分包括:圖像處理模塊、系統電源供電模塊、樹莓派專用攝像頭檢測模塊、步進電機運動控制驅動模塊、報警模塊、顯示模塊等。

第四章 人臉識別門禁系統的軟件系統設計

詳細介紹了軟件系統的安裝過程,軟件部分包括:win32 DiskImager、SDFormatter、樹莓派鏡像文件。之後還需要對軟件進行配置中文環境以及擴展文件系統,因為大部分軟件系統都是默認英文字庫,需要找到一個良好的中文詞庫,進行修改。具體說了RPI.GPIO搭建及使用,用第三方寫好的庫函數來完成具體的操作,主要運用的編程語言就是Python,以及Opencv運行環境的搭建,本次設計主要利用opencv進行拍照,掌握opencv的簡易人臉識別的原理及對Python編程語言的學習。

第五章 系統運行以及源代碼分析

詳細介紹了微型計算機(樹莓派)的軟件系統運行操作,需要先找到自己電腦的IP,打電腦的遠程桌面軟件,通過該軟件進入微型計算機(樹莓派)系統後,再連接本地wifi信號。具體說明了曠視FACE++ API的使用,人臉識別需要先採集人臉照片進行上傳,再對出入人員進行人臉採集,圖像的處理是通過調用Face++ API的雲服務功能來實現的,然後反饋人臉相似度的信息,最後當相似度大於百分之七十,則開門,反之則不啟動。(電機正轉開門 、停止併發出警報聲、電機反轉關門)具體的對源代碼進行了分析。對系統的調試及運行也進行了具體描述,主要指出了調試過程中出現的相應問題,並對其進行了解決處理,這個過程是我更加深入瞭解了該系統和源代碼的組成,對Python編程語言也有了更加深刻的理解。

第六章 總結和展望

對本文主要的研究內容和工作進行總結,結合當前現有成果,針對理論和實際應用中的缺陷,指出進一步可展開的工作。

第2章 人臉識別門禁系統總體設計方案

控制要求是指在目標系統早期實現的能力、特徵、外圍設備等方面的前提和初步設想。有必要考慮設計的實際情況和設計時要解決的關鍵問題,以建立可行性分析和規劃或建立模型。通過各方面的互相補充,落實最後的設計方案,以此保證最後的成品符合要求。一方面,設計方案是分析系統設計的基本要求,需要通過軟件進行驗證。另一方面,該系統的設計方案是軟件從設計到維護的一系列工作的主要依據。

2.1人臉識別門禁系統的總體設計方案

基於微型計算機(樹莓派)樹莓派的人臉識別門禁系統分為微型計算機(樹莓派)開發板模塊、電源模塊、轉5V降壓模塊、觸摸感應傳感器模塊、報警模塊和步進電機模塊。使用本套系統之前需要在本地存儲若干張人臉照片,來進行人臉識別,也可以是多人。程序運行時微型計算機(樹莓派)會將照片中的面部圖像發送至雲端服務進行分析,並把人臉的面部參數存儲到face++開發者網站,待其處理完畢後再從雲端傳回識別結果。觸摸傳感器觸發人臉識別主函數進行實時拍照並將此照片發送至雲服務處理並將比對結果發送到微型計算機(樹莓派)。流水燈和蜂鳴器提示、識別正確後步進電機轉動,並將結果顯示在微型計算機(樹莓派)終端。

由此可設計出人臉識別門禁系統的總體結構框圖,如圖2-1所示:

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖2.1 人臉識別門禁系統的總結構框圖

本次設計中測試及最終使用,一直採用Python2.7編程語言對微型計算機(樹莓派)系統進行開發和設計,其中人臉識別調用了face++的API, 官網提供了基於Python的SDK,該語言的可讀性高很適合本系統的開發。本系統總體結構圖如上。本地終端為微型計算機(樹莓派),雲服務採用了FACE++人工智能開發平臺。

2.2系統主要功能實現

本論文中所設計的系統是對人臉圖像進行處理識別並與門禁系統配合起到安全防盜的基本功能。工作原理是首先將三張待檢測人員的照片存儲到樹莓派文件系統,執行此段程序時,調用face++的detectAPI將三張照片中的人臉信息存儲在開發者賬號,然後執行search的API,對現在進行的人臉識別程序中拍攝的照片進行處理,檢測照片中的人臉信息並與之前上傳的人臉信息對比,並返回相似度最高的人臉信息。我們在程序中只提取confidence的值,即人臉相似度。當觸摸開關被按下,程序會發出警報LED閃爍,接著進行一張人臉的採集。並將此照片與已經上傳的三張照片做對比。判斷出相似的人臉。當相似度大於70%,則開門(電機正轉開門 、停止併發出警報聲、電機反轉關門)。

系統由微型計算機(樹莓派),驅動模塊,檢測模塊,顯示模塊,報警模塊,電源模塊等組成。系統帶有按鍵,用戶可以通過按鍵觸發人臉識別功能;系統具有采集和檢測人臉功能,可以當進入人員匹配成功時,開啟大門,同時報警裝置啟動;當進入人員匹配失敗時,大門不開啟以保障安全。

在本設計中,系統主要模塊各自的功能如下:

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

(2)按鍵模塊。系統的輸入部分,實現人機交互。通過接收觸控按鍵的電平信息,使得微型計算機(樹莓派)得到需要的數據。

(3)驅動模塊。廠門電極作為大門開閉的過程控制的控制元件,其驅動主要由驅動芯片實現。通過操縱大門電機正轉和反轉,實現對大門的開閉控制。

(4)顯示模塊。以連接一臺電腦顯示器即可

(5)系統電源模塊。系統電源模塊主要負責給系統提供符合要求的電流與電壓,由於微型計算機(樹莓派)使用低壓直流電壓,就需要將兩節鋰電池18650電源7V轉換為符合要求的電壓、電流。從而使整個系統有持續的供電保證。[4]

本系統的設計具有半自動門禁系統的特點。待檢測人員需要用手按下觸摸開關,進而觸發人臉識別。系統將對其進行攝像並將圖像發送至雲端服務進行處理,待處理完之後微型計算機(樹莓派)對返回的比對數據結果進行判斷。如果對比成功,則驅動步進電機開始旋轉。系統的實時性是用戶體驗的關鍵要素,系統正常工作時待識別的人員感覺不到卡頓狀況 ,實時性良好。

第3章 人臉識別門禁系統硬件設計

3.1主控模塊

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖3.1 主控模板實物圖

本次設計的主控模塊是使用微型計算機──樹莓派3代B型主板。樹莓派3代B型主板,該主控板模塊的優勢是擁有良好的標準模塊擴展性,主板上預留的接口可完美對接與之配套的樹莓派500萬像素專用攝像頭、7英寸液晶觸摸屏、Sense Hat傳感器模塊等。除了可以在愛好者論壇下載網民大神們做好的系統包之外,如今還可以直接購買預裝了樹莓派代3代B型主板專用NOOBs系統的MicroSD卡。說到這裡就又促生了樹莓派代3代B型主板的進一步優勢,那便是與微軟的結合,微軟為該產品推出了與之適配的Windows 10 IoT版操作系統,用戶可以使用到更加熟悉的UI,使得通過標準擴展模塊和GPIO接口擴展模塊操作變得簡單,IP等協議的配置也變得更加簡單,同時驅動又在不斷更新,不斷完善,所以不用再去考慮重新開發Windows的驅動程序,以上這些與樹莓派代3代B型主板的結合,對新入門的玩家以及互聯網開發者來說是意義非凡的。

主要包括以下幾點:

【Raspberry Pi 3 Model B】

· BCM2837

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

· 1GB內存

· 10/100自適應網卡

· 802.11n WiFi無線網卡

· 低功耗藍牙4.1 (BLE)

· HDMI接口

· USB 2.0接口 x 4

· MicroSD 卡插槽

· 3.5 mm 音頻輸出接口

· 40PIN GPIO接口

· CSI攝像頭接口

· DSI顯示接口

· 升級後的電源管理系統,以便使用更多耗電的外設(須用2.5A以上電源供電) 樹莓派3代B型是一款基於ARM的微型計算機主板,以SD/MicroSD卡進行存儲,該主板提供USB接口和以太網接口,可以連接鍵盤、鼠標和網線,該主板具備所有PC的基本功能,例如:高清視頻播放、電子表格書寫、玩遊戲等諸多功能,還整合了視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口。 樹莓派將Python作為主要編程語言,支持Java、BBC BASIC (通過 RISC OS 映像或者Linux的"Brandy Basic"克隆)、C 和Perl等編程語言。本設計使用的是最新樹莓派官方系統。是基於debian的一種linux32位操作系統。本次設計使用系統中安裝的python2.7運行程序。

3.2檢測模塊

3.2攝像頭模塊實物圖

本次設計的檢測模塊是使用樹莓派專用500W像素攝像頭。該攝像頭提供了三個應用程序,分別為:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,並且都是用於捕捉圖像,而 raspivid 用於捕捉視頻。

應用程序使用了四個 OpenMAX(mmal)組件:camera(攝像)、preview(預覽)、encoder(編碼)、null_sink。所有應用程序均使用了攝像組件,raspistill 使用了圖像編碼組件,raspivid 使用了視頻編碼組件,raspistillyuv 沒有使用編碼組件,而是直接將 YUV 或 RGB 從攝像組件輸出到文件。所有應用程序均基於命令行方式運行,通過 OpenMAX 的 mmal API 進行編寫。我們在設計中結合Opencv調用攝像頭進行拍照操作。

攝像頭電路板與樹莓派通過一條 15 芯的排線進行連接。具體連接操作如下:先將樹莓派上連接座兩端卡扣拉起,再把排線插入座中,並豎直,然後按下兩端的卡扣。攝像頭電路板連接同上。

3.3 驅動模塊

當輸入信號相對而言比較微弱時,相應功率較小無法正常工作。驅動模塊實質是通過放大功率,從而滿足負載額定功率使得負載可以正常工作,從而可以響應微弱的輸入信號。微型計算機(樹莓派)上有IN1, IN2, IN3, IN4四個接口,根據資料,設置為低電平就可以驅動,用杜邦線分別將IN1,IN2,IN3,IN4和GPIO 21(Pin 40),GPIO 20(Pin 38), GPIO 16(Pin 36), GPIO 19(Pin 35)進行連接。每次將四個GPIO端口按下表依次設置好電平後,可以sleep幾十毫秒來控制轉速

圖3.3 步進電機驅動原理

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖3.4 樹莓派GPIO編碼圖

3.3.1 步進電機工作原理

在不超過額定負載時,脈衝信號的頻率控制電機轉動的速度、脈衝數決定電機止步的位置,均不會因為負載變化而受到任何的影響[8]。步進電機每走一步,就要加一個激磁信號,假如適當的信號,轉子以一定的步數轉動;無激磁信號輸入時,轉子保持一定的位置。步進電機工作的基本原理如下:

(1)換相順序的控制

電機通電後,主要通過脈衝分配來實現工作相序的變化。以步進電機四相八拍工作方式為例,要求各相按照A-AB-B-BC-C-CD-D-DA的順序來工作,控制脈衝就要按照該順序來控制A、B、C、D相的通斷。

(2)步進電機轉向的改變

按照既定工作方式正向轉動的順序來給電機通電,電機就會正向轉動;但是按照相反順序來通電的話,電機會向相反方向轉動。

(3)步進電機轉動速度的改變

步進電機每一次接收到一個控制脈衝,它就會相應轉動一步,轉動固定角度。因此步進電機的轉動速度就由兩脈衝的間隔長短來決定,即是兩脈衝發送間隔越長,相應的步進電機轉動就越慢。如果要實現對步進電機轉動速度調節,就需要改變單位時間內控制模塊發出的脈衝個數。

步進電機驅動方法有四相四拍運行方式,即AB-BC-CD-DA-AB;四相八拍運行方式,即A-AB-B-BC-C-CD-D-DA-A。

四相步進電機,供電電源為5伏,5伏電源的正極性端連接電機公共端,而 5伏電源的接地端需要分別和電機剩餘的四根控制線順次接觸,可以發現電源地線與電機控制線每接觸一下,步進電機就會轉動一定角度,電機轉動完整一圈的時間,恰好需要如此來回轉動的次數可以達到5次。由此可以計算出該步進電機的步進角度為

度。若四條控制線與電源地線接觸的順序恰好相反,那麼電機也就隨之向相反方向轉動。

3.3.2 步進電機驅動電路

由於步進電機的驅動電流的數值相對較高,所以單片機與步進電機不能直接連接,常常採用專門的接口及驅動電路。驅動器可以採用功率比較高的複合管,如ULN2003,L298N,或者購買專用的步進電機驅動器。驅動電路的工作狀態是由控制信號來決定的,控制信號需要由主控模塊,即單片機來產生。期望實現以下的步進電機驅動要求:

(1)期望驅動電路提供的電流上升和下降速度可以比較快,這樣可以使電流的波形儘可能的接近矩形波。

(2)期望驅動電路功率和效率相對比較高,提高運行經濟性。

單片機的輸出電流太小,無法直接連接步進電機,需要加驅動電路。對於電流小於0.5A的步進電機,可以採用ULN2003類的驅動IC。驅動芯片ULN2003內部結構如圖3.4所示。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖3.4 ULN2003內部結構框圖

ULN2003是由複合達林頓晶體管排列組成,使耐受電壓比較高,允許通過電流較大。共有7對NPN達林頓管,分別為芯片7個控制單元,包括功率驅動單元、保護單元等。ULN2003採用DIP-16或者SOP-16雙列16腳塑料封裝,驅動單元可以與步進電動機直接耦合,連接方便,其數字邏輯電路為非門電路,取反控制。

選取ULN2003作為電機驅動芯片,價格經濟,且可以充分發揮功能,實現穩定驅動。可以直接通過電源來調節輸出電壓,可以直接用單片機的IO口提供信號,而且電路簡單。芯片採用單片機作為控制核心,在程序相互調用的方面,更加的方便靈活。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖3.5 ULN2003引腳圖

圖3.5所示為驅動器引腳圖,圖左邊1~7引腳為輸入端,有單片機直接控制,接單片機輸出端,引腳8直接接地;右側10~16引腳為輸出端,接步進電機,引腳9接電源+5V,必要時也可以什麼都不接懸空而置,該驅動器可提供最高0.5A的電流。

ULN2003的主要特點是:

(1)驅動ULN2003電流比較大。ULN2003可以較好的用於單片機控制的電路。

(2)ULN2003連接上拉電阻,在驅動電機時可以提高其抵抗干擾的能力。ULN2003的每兩個達林頓管視為一個單元,都會串聯一定阻值的高值電阻可以直接和TTL 或承載電壓為5V的CMOS 裝置連接 。

(3)ULN2003的輸出採用集電極開路,電流輸出值比較大,可以達到500mA。因此可以用來驅動電機。

另外,ULN2003的極限參數分別如表3.1、3.2所列。

表3.1 ULN2003的極限參數

表3.2 ULN2003的極限參數

接線時需要把步進電機電路圖的紅色線懸空,其它線接驅動板。如果驅動不起來,有可能接線不對或電壓低。如果用單片機來控制此步進電機,則只需分別依次給各線一定時間的脈衝電流,電機便可連續轉動起來。

ULN2003驅動電機的電路圖如下圖3.6所示。由單片機P3.4—P3.7口經上拉電阻作為驅動芯片ULN2003的輸入。COM端供電12V,輸出端10至12引腳均接地。四相五線式步進電機的A、B、C、D四相分別與ULN2003的輸出端1C—4C連接,接收控制脈衝,實現控制。

圖3.6 ULN2003驅動電機的電路圖

3.3.3 步進電機的選型

步進電機是一種專門用於位置與速度精確控制的特種電機,雖然同為電機件,步進電機區別於其他控制電機的最大特點是,它主要採用無反饋環節的開環控制,將微觀的電脈衝信號轉變為宏觀電機轉動的角位移或線位移。它通過數字來實現電機控制,控制信號以脈衝形式發出,它所接受到的脈衝可以驅使電機轉動,即被轉化為相應的角位移,所以只要給步進電機一個合適的脈衝信號,它就隨之動作固定角度,當採用單片機來控制步進電機相對簡單易操作。繞在定子的線圈配置作為步進電機相數分類的主要依據,主要可分為2相、4相、5相等;根據外部引線步進電機又被分為三線式、五線式、六線式等,但各種類型的電機其控制方法並沒有發生太大的變化,均採用脈衝信號進行驅動。

門禁系統的運動不需要加速、減速過程,所需轉速較低,所以步進電機選用自啟動運行方式。自啟動運行方式是指在驅動電機旋轉和停止時不經過加速、減速階段,而直接以驅動脈衝速度啟動和停止的運行方式。同時,因為在啟動、停止時存在一個突然的速度變化,所以這種方式需要較大的加、減速力矩。由於具體負載重量也會影響其是否產生過大的工作噪音,所以四相五線式步進電機的負載容量可以較好滿足要求。另外,出於對電流、步距角、靜轉矩三大要素的考慮,本設計選擇四相五線式步進電機來模擬門禁系統的控制,可以直接插接方便使用。

3.4 報警模塊

作為人臉識別門禁系統的設備,聲光報警電路不可或缺。在系統工作中,每當人臉數據匹配成功時,便會觸發蜂鳴器和發光二極管實現聲光報警,使監控人員得到開啟大門信號,反之則不報警。半導體二極管和普通二極管都是是類似的PN結結構,具有單向導電性,可以將電能轉化成光能。 在將電流通到發光二極管之後,電子從N區移動到P區,並且從P區移動到N區的空穴在PN結附近與孔中的電子複合,N區域產生熒光發光提醒。

聲光報警設計部分包括蜂鳴器和LED報警指示燈。聲音報警電路如圖3.11所示,由於微控制器驅動能力的I / O端口較低,所以需要增加蜂鳴器PNP晶體管驅動,可以讓那個蜂鳴器的聲音聽起來更響,更好地發揮警報功能。為了避免錯誤的報警添加了三極管基電路,蜂鳴器只有在輸出低時才會發出聲音。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖3.8 聲音報警電路原理圖

3.5 顯示模塊

設計中為從一定程度上減小操作人員的工作量,特用電腦顯示器作為顯示模塊,電腦顯示器就不做過多闡述了。

3.6電源模塊

本模塊的作用是用來控制電源是否進入工作狀態。電源模塊一般分為以下幾部分:濾波電路模塊、全波整流電路模塊、電源變壓器模塊等。一般電源提供的是220V交流電,經過門禁系統的電源模塊中變壓器的變壓,變為直接可以供門禁使用的電壓,然後進行全波整流,得到有尖峰脈衝的直流電,然後在濾波電路將有交流成分的電壓濾除,最後得到可供系統使用的直流電。但我們的設計不需要這麼大電流,電源直接是用兩節充電鋰電池18650共7v進行供電,所以不需要用穩壓芯片。工作原理圖如圖3.1。

圖3.9 電源模塊原理圖

第4章 人臉識別門禁系統軟件設計

4.1安裝系統

軟件部分:win32 DiskImager、SDFormatter、樹莓派鏡像文件

硬件部分:SD卡、讀卡器

準備工作

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

安裝實戰

1.解壓下載的系統鏡像壓縮文件,得到img鏡像文件 2.將SD卡使用卡託或者讀卡器後,連上電腦 3.解壓並運行Win32DiskImager工具 4.在軟件中選擇系統鏡像的img文件,“Device”下選擇SD卡的盤符,然後點擊“Write” 然後就開始安裝系統了,根據你的SD卡的速度,安裝過程有快有慢 5.安裝結束後會彈出完成對話框,說明安裝就完成了。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.1 格式化軟件工具

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.2系統燒錄軟件工具

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

接下來打開win32 diskimager.打開存放鏡像的路徑,點擊“write” /“yes” 等待鏡像燒錄成功。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.3 燒錄成功提醒界面

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.4 樹莓派官方系統Pixel

4.2 配置中文環境以及擴展文件系統

樹莓派3B默認是採用英文字庫的,而且系統裡沒有預裝中文字庫,所以在locale中將其改成中文,也不會顯示中文,只會顯示一堆方塊。因此需要手動來安裝中文字體。

ssh中輸入以下命令:

安裝過程中如果碰到(Y/n),都選擇y 中文字庫安裝完成之後,還需要安裝一箇中文輸入法。輸入如下命令

一樣的安裝過程,安裝完畢後輸入

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

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.5 樹莓派安裝中文

終端輸入:sudo raspi-config 擴展文件系統

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖4.6 樹莓派擴展文件系統

“Expand Filesystem” 回車後將SD空間擴展(重啟後生效)。配置中文環境如下所示。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

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

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

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

4.3 RPI.GPIO搭建及使用介紹

本系統使用的是樹莓派官方系統raspbian。系統預裝了python和C編譯器等軟件。運行本次系統前需要對環境進行搭建。樹莓派內核中已經編譯自帶GPIO的驅動,本次設計採用第三方編寫好的庫函數來完成具體的操作。python GPIO 是一個小型的 python 庫,可以幫助用戶完成 raspberry 相關 IO 口操作,但是 python GPIO 庫還沒有支持 SPI、I2C 或者 1-wire 等總線接口。先安裝 python-dev,輸入以下指令。

sudo apt-get install python-dev

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

· 下載:$ wget

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

· 進入解壓之後的目錄 :$ cd RPi.GPIO-0.5.3a

· 啟動安裝 :$ sudo python setup.py install

導入 RPi.GPIO 模塊:

通過該操作,可以將模塊名稱映射為 GPIO,以便接下來您其它腳本進行使用。

導入模塊並檢查它是否導入成功,可以嘗試:

針腳編號

目前有兩種方式可以通過 RPi.GPIO 對 Raspberry Pi 上的 IO 針腳進行編號。

第一種方式是使用 BOARD 編號系統。該方式參考 Raspberry Pi 主板上 P1 接線柱的針腳編號。使用該方式的優點是無需考慮主板的修訂版本,您硬件始終都是可用的狀態。您將無需從新連接線路和更改您的代碼。

第二種方式是使用 BCM 編號。這是一種較低層的工作方式 – 該方式參考 Broadcom SOC 的通道編號。使用過程中,您始終要保證主板上的針腳與圖表上標註的通道編號相對應。您的腳本可能在 Raspberry Pi 主板進行修訂版本更新時無法工作。

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

或者

Raspberry Pi 的 GPIO 上可能同時有多個腳本/循環。因此,如果 RPi.GPIO 檢測到某個針腳被設置為其它用途而非默認的狀態(默認為輸入),您會在嘗試配置某腳本時得到警告消息。禁用該警告消息:

為每個用於輸入或輸出的針腳配置通道。配置為輸入的通道:

通道編號是基於您所使用的編號系統所指定的(BOARD 或 BC)。配置為輸出的通道:

通道編號是基於您所使用的編號系統所指定的(BOARD 或 BCM)。可以指定輸出通道的初始值:

輸入讀取 GPIO 針腳的值:

通道編號是基於您所使用的編號系統所指定的(BOARD 或 BCM)。)這將返回 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

設置 GPIO 針腳的輸出狀態:

通道編號是基於您所使用的編號系統所指定的(BOARD 或 BCM)。)

狀態可以為 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。在任何程序結束後,請養成清理用過的資源的好習慣。使用 RPi.GPIO 也同樣需要這樣。恢復所有使用過的通道狀態為輸入,您可以避免由於短路意外損壞您的 Raspberry Pi 針腳。注意,該操作僅會清理您的腳本使用過的 GPIO 通道。

腳本結束後進行清理:

4.4 Opencv運行環境的搭建

首先進入Raspberry Pi系統,將樹莓派連上網絡,然後Ctrl + Alt +t打開命令終端(直接點擊終端圖標可能會卡),如果終端窗口沒有出現的話,從頂部任務欄可以找到,點開就好。首先是以下這幾條更新命令,每次單獨執行:

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update

然後執行安裝opencv的構建相關命令:

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

然後是以下這幾條命令安裝圖片工具包,每次單獨執行(網上有很多一起執行的,但是經常出現問題)

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

然後安裝優化函數的包:

sudo apt-get install libatlas-base-dev gfortran

然後執行以下命令下載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

然後安裝開發包:

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

下面這個步驟不僅僅是命令了,打開~/.profile文件,我是使用vim打開的:

sudo nano ~/.profile(”~”符號樹莓派鍵盤打不出來 用筆記本SSH連上去)

打開profile後,在這個文件最後,添加以下內容後保存退出:

# virtualenv and virtualenvwrapper

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

然後執行下面這個命令:

source ~/.profile

然後創建虛擬工作環境並進入:

sudo mkvirtualenv LC

workon LC

一定要確保進去剛剛創建的虛擬環境了,進入虛擬環境的標誌是進去後命令的最前面(綠字前面)都會增加“(LC)”。

下面在虛擬環境中安裝numpy:

pip install numpy

sudo rm -rf ~/.cache/pip/

pip install numpy

一定確保在剛剛的虛擬環境下進行以下操作,如果新開了一個命令行窗口,那麼就依次執行 source ~/.profile 命令和 workon LC 命令進入虛擬環境再執行以下操作。

執行以下命令來設置編譯:

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 ..

執行以下命令開始正式編譯opencv3.0:

make -j4

編譯完後進行安裝:

sudo make install

安裝後進行相關配置:

sudo ldconfig

配置完成

本次設計主要利用opencv進行拍照,確實是有點大材小用。但是通過opencv的使用,加深了對圖形處理方面的簡單認識和理解。在設計之餘學會了opencv進行簡易人臉識別的原理。

4.5 系統程序設計

主程序設計

流程圖

觸摸開關

流程圖

攝像頭

流程圖

步進電機

流程圖

第5章 系統運行以及源代碼分析

5.1 樹莓派系統使用說明

樹莓派系統:可以直接用顯示器進入系統桌面也可以遠程桌面進入系統,或者putty軟件SSH。本設計以遠程桌面登陸為例。登陸路由器查詢分配給樹莓派的ip地址。打電腦的遠程桌面軟件。輸入樹莓派的IP地址,本次設計中樹莓派的IP是192.168.0.115。用戶名為pi,密碼:raspberry遠程桌面進去系統後還可以再去連接本地wifi信號。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計
畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

5.2 曠視FACE++ API使用說明

本次設計對圖像的處理是通過雲服務來實現的。主要是調用Face++的API來實現的照片中人臉的對比。首先將三張照片上傳樹莓派或者用樹莓派攝像頭採集三張照片。調用Detect API進行人臉檢測和人臉分析。識別出的人臉會給出face_token,用於後續的人臉比對等操作。當觸摸開關出發實時拍照之後,調用Search API在Faceset中找出與目標人臉最相似的一張或多張人臉。支持傳入face_token或者直接傳入圖片進行人臉搜索。使用圖片進行比對時會選取圖片中檢測到人臉尺寸最大的一個人臉。

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 創建FACE++ API key

Detect API

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

Search API

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

成功請求返回值示例:

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

5.3 系統調試及運行

整體流程:將三張待檢測人員的照片存儲到程序所在目錄,執行程序時,調用face++的detectAPI將三張照片中的人臉信息存儲在開發者賬號,然後執行search的API對程序過程中拍攝的照片進行處理。檢測照片中的人臉信息與之前上傳的人臉信息對比,如果相似度達到百分之80以上返回相似度最高的人臉信息。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖5.2 程序目錄

5.3.1程序初始設置

首先將自己的照片上傳到本文件夾並修改圖片文件名,然後在代碼中將三張待對比照片賦值給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程序中設置調用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 各功能函數

#蜂鳴器,前面已經初始設置GPIO12為輸出模式,此處bee()函數設置gpio12為乾電平,延時0.5s後置為低。意味著當調用bee()函數時蜂鳴器鳴叫0.5s.

def bee():

GPIO.output(12, False)

time.sleep(0.5)

GPIO.output(12, True)

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

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)

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

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)

#提示做好準備 ,一段時間後進行拍照。在終端窗口輸出提示信息。並調用light()來實現LED發光二極管的流水燈效果。並調用bee()讓蜂鳴器發出提示聲音。

def prep():

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

light()

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

light()

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

light()

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

light()

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

light()

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

bee()

#調用拍照函數時流水燈點亮,然後使用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

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

觸發檢測的監測函數det(),程序運行時開始檢測觸摸開關是否被觸發。當觸摸開關被觸發時會發送高電平信號給樹莓派。當檢測GPIO13為真時,在終端輸出確定信息,並調用主函數進行對比操作。主程序運行結束後繼續檢測是否被觸發。一直循環指導程序退出。

def det():

while True:

if GPIO.input(13)==True:

print "confirm"

main()

else:

print "NO BODY"

time.sleep(2)

det()

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

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計5.3.3異常處理

當檢測時由於沒有拍攝到正常的人臉照片,程序則可能由於沒有正常的人臉庫而報錯。此時須將下圖中ret=api……註釋掉,並將上一行的註釋符號“#”取消。畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖5.7 處理報錯信息(一)

保存並上傳後再次運行。清除無用的人臉庫。

然後再將代碼修改為初始代碼,再次進行正確的人臉採集,程序才可以正常運行。

畢業論文:基於樹莓派的人臉識別門禁系統本科畢業設計

圖5.7 創建一個faceset

這種方式解決報錯是複雜的一個過程。由於目的只是刪除無用的人臉庫,所以新建了一個debug.py的python文件。當檢測失敗之後執行一次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)

# 創建一個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()

第6章 結 論

幾個月的畢業設計將要結束,回憶這段時間收穫頗多。經過自己努力,所做的設計基本達到了任務書的要求,可以實現對人臉識別的檢測與門禁系統的開閉。

。。。。。。

參考文獻

[1] 愛上Raspberry Pi:Matt Richardson / Shawn Wallace著;李凡希譯,科學出版社 (2013-10出版) [2] Raspberry Pi Python 編程入門 :Simon Monk 著;姜斐祚 譯,科學出版社(2014-02-01出版) [3] Raspberry Pi快速入門指南:Maik Schmidt著;王峰、王江偉、王汝波譯,科學出版社(2014-01出版) [4] 樹莓派應用速成 網絡應用祕方:(美)Rick Golden 著;符鵬飛 譯,科學出版社(2014-5-1出版) [5] 樹莓派應用速成 Raspbmc媒體中心.(美)Rick Golden 著;符鵬飛 譯,科學出版社.2014年

[1] 彭偉.嵌入式設備C語言程序設計實訓100例.電子工業出版社.2009年

[2] 吳運昌.模擬電子線路基礎.廣州:華南理工大學出版社,2004年

[3] 胡漢才.嵌入式設備原理及其接口技術學習輔導與實踐教程[M].清華大學出版社,2010 .

[4] 周潤景等. Proteus在MCS-51&ARM7系統中的應用百例[M].電子工業出版社2006

[5] 孫傳友.編著.感測技術基礎[M].電子工業出版社,2001.

[6] 韓志軍等.嵌入式設備應用系統設計[M].機械工業出版社,2004

[7] 王俊峰.孟令啟.現代傳感器應用技術[M].機械工業出版社,2007.

[8] 馬忠梅等.嵌入式設備的C語言應用程序設計[M].北京航空航天大學出版社,2006

[9] 劉樹中.孫書膺.王春平.嵌入式設備和液晶顯示驅動器串行接口的實現[J].微計信息,2007

[10] V. Yu. Teplov,A.V. Anisimov.Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] ,2002

[11] Yeager Brent.How to troubleshoot your electronic scale[J].. Powder and Bulk Engineering. 1995

[12] Adam Loverro,Fractional Calculus:History,Definitions and Applications for the Engineer[EB/OL].http://www.nd.edu/~msen/Teaching/UnderRes/FracCalc.pdf,2007.

[13] Behzad Razavi.Design of Analog CMOS Integrated Circuits[M]. . 2001

[14] Rhee W.Design of high-performance CMOS charge pumps inphase-locked loops. IEEE International Symposium on Cir-cuits and Systems. 1999 [3] Todd Charles Weigandt.Low-phase-noise,low-timing-jitter design techniques for delay cell based VCOs and frequency synthesizers[C]//PHDthesis. . 1998

[15] George Lee,Karina Ng,Edmond Kwang.Design of ring oscillator based voltage controlled oscillator. Project Final Report[R]. 2005 [5] T. C. Weigandt,B. Kim,and P. R. Gray.Analysis of Timing Jitter in CMOS Ring Oscillators. IEEE International Symposium on Circuits and Systems. 1994

致 謝

相關推薦

推薦中...