期末大作業


期末大作業

第23大組 sudo rm -rf

一、選題簡介

1.選題背景

疫情期間,無接觸測溫與人員進出登記帶來的問題。

2.選題內容

通過超聲波測距模塊測定外來人員的距離,在合適的距離范圍內觸發拍照進行人臉識別(face_recognition),
進而通過MLX90614BAA紅外測溫模塊測量溫度,判斷人員是否發熱,
通過0.96寸OLED屏幕顯示人員姓名溫度,從而選擇開門(舵機模擬),或者報警(短信+郵件+蜂鳴器)

二、設計

設計部分,分為三個部分 識別端、前端和后端

整體思路

1.識別端

(1).設計思路

識別端的主要任務是:從后端同步人臉特征向量,超聲波測距,拍照識別,溫度檢測,回傳簽到信息,OLED屏顯,蜂鳴器報警等

識別端電路

識別端工作流程圖

(2).容器選用

容器上選擇了第七次作業用到的集成好opencv的sixsq/opencv-python容器,在其基礎上安裝好 "picamera[array]" dlib face_recognition luma.oled requests smbus
然后部署我的代碼

2.后端

Github https://github.com/zaqny/smart-door

(1).設計思路

arch

  1. 管理員通過瀏覽器訪問前端頁面(nginx),先上傳人臉照片到人臉特征向量服務器(face_recognition+flask),服務器進行人臉的保存和轉換,返回特征向量給前端。
  2. 前端提交相關信息和人臉相特征向量給Ktor服務器(tomcat),Ktor服務器把數據保存到數據庫(mariadb)。
  3. 樹莓派調用后端API(tomcat)進行人臉數據同步。
  4. 用戶通過樹莓派進行人臉識別、測溫,如果溫度正常則開門,否則會引起蜂鳴、短信警報和郵件警報(flask)。
  5. 管理員通過前端頁面,可以查看簽到記錄、人臉錄入信息。

(2).容器選用

  • nginx 用於訪問前端靜態頁面,並提供反向代理
  • tomcat 運行Restful后端,為識別端和前端提供API接口(JWT進行身份驗證)
  • mariadb 數據存儲
  • aaftio/face_recognition 已預裝python/opencv/face_recognition,添加flask后,可為前端提供生成人臉特征向量的接口
  • Python 短信\郵件警報服務

nginxtomcatmariadb三個容器耦合度較大,故使用docker-compose打包運行。人臉特征向量生成與警報服務單獨運行,可以隨時停用、重啟,而不影響前三個容器的使用。

3.前端

前端主要包含四個頁面,登錄、登記注冊、登記注冊記錄、簽到記錄

三、運行效果

后端容器:

ps

logs

識別端容器:

請看視頻:

四、分工與貢獻比

  • 識別端:33%
    16.5% 朱慶章 外圍硬件的驅動和主程序的邏輯
    16.5% 潘海東 人臉識別和主程序的邏輯

  • 后端:34%
    18% 張慶焰 除特征向求算接口以外的其他所有接口
    16% 朱宏 求算特征向量接口、郵件報警和短信報警

  • 前端:33%
    18% 姚彬錕
    15% 陳夢雪

五、總結

  • 朱慶章:
    1.作為這個大組的組長,首先感謝隊友們的通力合作,讓我在答辯的時候胸有成竹。
    2.因為我主要負責識別端這邊的設備驅動和邏輯編寫,翻閱了很多datasheet,特別是測溫的模塊,網上沒用什么使用樹莓派驅動它的資料,都是51和Arduino為主。之前也沒怎么涉及過硬件驅動的編寫,所以上手前花了不少時間查閱資料。到后來上手寫起來發現還是比較容易的。
    3.隊友對於各自的業務都很熟悉且能力強,溝通上幾乎毫無障礙。定好題目后,輔以processon的流程圖,我們在邏輯上交流探討很順暢,隊友對我的需求都能准確了解,使我可以安心完成我這邊的程序,而不用花費過多時間來溝通。
    4.在這次的實驗中,從收獲方面來說,我對於Python的面向對象和多線程有了更好的理解。涉及到外設的驅動我全部封裝成類(這會兒再寫面向過程就很不合適)。由於這些外圍設備的存在,顯然,我們的程序需要寫成多線程的形式,然而Python的threading類並沒有結束線程的方法,這不能滿足我們程序的需求,優雅地結束線程而不犯錯是我這次比較大的收獲。

  • 張慶焰:通過這次實驗,算是完成了第一個完整的后端項目,嘗試了一個比較新的Web框架Ktor,並且學習了如何把應用部署到服務器上,學到了很多后端知識。比較讓我印象深刻的就有:前后端分離產生的跨域問題、nginx多路由的配置、熱部署、JWT認證、MySQL字符集問題、用gradle打包war等等。很多時候遇到bug光看服務器端的日志還不夠,要對請求進行抓包才能分析出來,於是學會了Fiddler的使用。和前端進行聯調的時候,也學習到了一些前端知識。總的來說收獲滿滿。

  • 潘海東:在本次大作業中,我負責的是識別代碼的編寫,與慶章同學兩個共同完成樹莓派端的功能。具體流程為:討論確認好需要完成的功能、制作功能能流程圖、個人代碼編寫、代碼整合與調試、最終功能實現。我主要負責與硬件功能無關的流程實現,然后慶章同學負責實現與硬件相關的代碼功能,之后再把兩部分代碼鏈接在一起。我整個代碼編寫過程是比較順利的,我把它歸功於前期討論得比較充分吧,並沒有遇到難以解決的問題,也可能是有過相關經驗吧,我曾經做過類似的項目,基於face_recognition實現點名簽到的app。由於硬件實現的難度比較大,慶章同學比我花更多的時間去完成喝測試代碼。由於是居家線上教學,我們小組內也都是通過線上交流,線上合作。相對於線下,還是有挺多需要克服的地方。如代碼的測試,硬件功能的調試等,只能分給單獨的某個同學去實現,負擔會比較大。但這也是為以后的工作累積寶貴的經驗,也學到了很多之前沒有接觸過的新知識。

  • 朱宏:在本次項目實驗任務中,我主要負責后端短信報警和郵件報警api的編寫與部署以及特征向量的獲取。 特征向量的獲取比較簡單屬於之前實驗中的部分並稍微加以修改。短信報警主要是利用twilio的雲通信短信SMSapi,加以框架flask后上線后端。郵件報警是以SMTP服務api,同樣包裝框架flask。因為之前對這兩部分api以及flask框架完全不了解,現學了一些知識。這中間有碰到Windows下flask框架上線后 ,放進docker里卻跑不起來 ,后面發現是twilio屬於國外服務器 中間的信息交互太慢 也導致我的短信可能會收不到但是后台有數據。總之,通過小組間的項目實戰還是更加了解了后端的運行以及flask框架的應用,學的時候雖然很懵,但是上線完后還是很有成就感的。

  • 姚彬錕:本次實驗我主要的任務是前端頁面代碼的編寫以及和后端的交互,我用的是web前端開發,在這門課之前雖然有涉及了解到一些html、css和js、php等知識,不過自己寫出一個完整web項目的界面還是沒有的,通過ajax獲取后端的數據來進行顯示。本次實驗遇到的困難還是很多的,就比如后台獲取和發送數據到后端,以前沒有涉及,不過萬事開頭難,在學習了相關知識后也是克服了這一問題。不過主要還是自己對這些知識沒有一個很完整的框架,對很多屬性了解的也不多,要開發一個美觀的界面並不是那么容易,不過好在也是設計了一個不會很丑的界面。雖然過程艱辛,但是獲得的也很多,特別是激發了我對開發這一方面的興趣,也體驗到了團隊之間,分工合作,然后一起討論一起交流,尋求幫助,完成一項任務的樂趣。不過遺憾的是只能在線上交流,沒辦法聚在一起線下完成一些東西,從而學到更多。

  • 陳夢雪:本次實驗我主要負責的是前端這一塊,說實話之前我很少接觸到web,僅在計算機圖形學這門課有接觸到,但實際上對前后端交互是完全不懂的。依靠百度慢慢做起來,但是我學的比較慢,可能也和經驗少有關,雖然用datatable這個插件做了下一頁和排序,但是效果不好就棄用了。總之這段時間我雖然做出來的成果不夠多,但是摸索卻摸索了很久,對ajax和datatable有了自己的理解。這其中我們的組長大人和彬錕同學還有我沒有選這門課的舍友也給了我非常大的幫助,特別是我們的組長大人實在是偉大,這大概就是強者的能力吧○| ̄|_


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM