用PythonPi實現門禁系統 模式識別

2021-07-25 21:50:05 字數 2661 閱讀 6451

模式識別聽起來很高大上,其實就是特徵識別。人類對事物的識別過程其實就是提取特徵、根據特徵對事物進行分類的過程,然後人類就可以將這類事物的特點與規律套用到這個事物上。

我們在門禁課程中曾提出過乙個雙人開門的練習:在某些安全性要求較高的門禁控制點,要求兩人以上才能開門。但如果用通常的狀態機來實現這個功能,我在思考題中也說,會有非常多的問題難以解決。這些問題包括:

要完美解決雙人開門的問題,就需要使用模式識別。當然我們用到的是最簡單的模式:序列。所謂的序列,就是乙個連續的事物組合。最常用的序列就是密碼了:一組連續的特定數字或字母。

pythonpi平台中的序列也被稱為乙個視窗,就是乙個觀察連續輸入的資料流的視窗,如果輸入資料流中的某一段資料符合視窗規定的特定條件即被被該視窗所識別為合法的輸入資料序列。如0101視窗即可從下面的輸入流中識別出相應的序列:011010001101010011。

乙個識別特定序列的視窗由一組窗格組成,而每個窗格包括了三個對輸入資料進行篩選的要素:

判別條件:等於、不等於、大於、大於等於、小於、小於等於,甚至是大於5小於9(?>5)and(?<9)這樣的篩選條件

預設的判別比較值:即上述識別表示式中(?>5)and(?<9)的5、9

視窗同時儲存了乙個輸入資料的佇列,每次有資料輸入,則將輸入資料推入到該佇列(佇列長度即為視窗大小),然後讓每個窗格一一對應的對佇列中的各個資料進行檢測,如果能夠通過所有窗格的檢測,即實現了對序列的識別。

序列是對控制邏輯單元中的特定輸入進行識別,即我們可以定義待識別的序列為:

1、/pi1/1的輸入為0(即按鈕按下)

2、/pi2/nodemcu_n1/i2c_72_2的值大於128(即搖桿向右打)

用口語的說法就是:啟動並向右搬動搖桿,則如何如何。下面的**就是如何設定上面的識別序列:

#匯入依賴包

from cn.ijingxi.corpuscle.python import input

from cn.ijingxi.corpuscle.python import sequence

from cn.ijingxi.corpuscle.python import condition

from cn.ijingxi.corpuscle.python import logic

#定義啟動開關

inputswitch=input.getgpio("/pi1/1",input.pull_up,input.flitter)

#定義每0.5秒讀取模數轉換器的乙個位元組來感知搖桿的x軸位置

inputdirection=input.geti2c("/pi2/nodemcu_n1/i2c_72_2",1,500)

#定義開關輸入值的檢測條件

c0=condition.getcompare(condition.equal,input.low)

#定義搖桿位置輸入值的檢測條件

c1=condition.getcompare(condition.greate,128)

#定義乙個序列,該序列從輸入流中匹配成功,則觸發start事件

s=sequence("start")

#序列的第乙個窗格是檢測啟動開關是否啟動

s.adddetection(inputswitch,c0)

#序列的第二個窗格是檢測搖桿x軸位置

s.adddetection(inputdirection,c1)

#定義控制邏輯

l=logic("smtest")

#將序列新增到控制邏輯中

l.addsequence(s)

這段**在啟動並向右搬動搖桿將觸發start事件

由於個體識別裝置的引入,就有了基於個體身份的許可權管理的問題。而雙人開門功能中,就有乙個很明確的要求:必須是兩個不同的有許可權的人在一定時間內先後刷卡才可以開門。這裡不要求識別具體的人,而是要求識別不同的人、相同的許可權組。所以就有了一種特殊的序列:快取序列。

快取序列和普通序列的不同在於:普通序列的條件檢測值是預置的、固定的,如上面**中的128,而快取序列的條件檢測值則是前乙個輸入值,即比較前後兩次的輸入是否相同。

目前,pythonpi平台提供的快取序列在場景中提供了四種預設的檢測事件:

這些事件是識別為有許可權通過者才會進行檢測

利用這些預設事件,則雙人開門功能的實現,可以通過如下的狀態機定義來實現:

d.addtrans("closed","open","waitother","第乙個有許可權的人刷卡",starttimer1)#open事件是有許可權才會發出的

d.addtrans("waitother","differpeople","otherdetect","有另外的人刷卡")

d.addtrans("otherdetect","samerole","open","第二個刷卡的人也有許可權,開門",opendoor,stoptimer1)

d.addtrans("otherdetect","differrole","closed","第二個刷卡的人沒有許可權",stoptimer1)#用超時可以省掉這條**

d.addtrans("waitother","timeover","closed","超時")

d.addtrans("otherdetect","timeover","closed","超時")

用PythonPi實現門禁系統 許可權管控

門禁系統的課程正在開發中 用pythonpi實現門禁系統 歡迎提出寶貴意見哦 對門禁系統來說,許可權就是是否許可某人通過某門。從控制的角度來說,就是讀入乙個卡號,決定是否開鎖或採取其它動作。智慧型控制系統首先是乙個資訊系統,資訊系統中的許可權是對資訊資源的管控,按資訊流動的方向有兩種許可權 而對於門...

虹膜門禁系統

門禁考勤系統 出入口自動控制系統,它具有對人員進出 授權 查詢 統計和防盜報警保安等,多種功能,還可作為人事管理 考勤管理,可於任何 機電裝置產品 及控制系統聯動,既方便內部人員或使用者的自由出入,又杜絕外來人員隨意進出,提高安全防範能力。它將結束鑰匙時代,成為現代社會進出管理的新潮流。硬體功能 門...

CCF 門禁系統

問題描述 濤濤最近要負責圖書館的管理工作,需要記錄下每天讀者的到訪情況。每位讀者有乙個編號,每條記錄用讀者的編號來表示。給出讀者的來訪記錄,請問每一條記錄中的讀者是第幾次出現。輸入格式 輸入的第一行包含乙個整數n,表示濤濤的記錄條數。第二行包含n個整數,依次表示濤濤的記錄中每位讀者的編號。輸出格式 ...