国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenCV和Python的課堂考勤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2019-07-16 03:14鄒錳
電腦知識(shí)與技術(shù) 2019年15期
關(guān)鍵詞:人臉識(shí)別

鄒錳

摘要:隨著計(jì)算機(jī)新技術(shù)的流行,人臉識(shí)別等新技術(shù)的應(yīng)用范圍越來(lái)越寬廣。在學(xué)校招生規(guī)模的擴(kuò)大的前提下,課堂上有效快速點(diǎn)名成了上課教師的新問(wèn)題。該文采用OpenCV和Python構(gòu)建人臉識(shí)別技術(shù)實(shí)現(xiàn)課堂快速考勤。

關(guān)鍵詞:OpenCV;Python;人臉識(shí)別;課堂考勤

中圖分類(lèi)號(hào):TP311 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2019)15-0066-02

1 問(wèn)題的提出

近年來(lái),我國(guó)學(xué)生人數(shù)呈現(xiàn)逐步上升的趨勢(shì)。特別是在經(jīng)濟(jì)發(fā)達(dá)地區(qū),由于外來(lái)務(wù)工人員人數(shù)非常多,很多地區(qū)的學(xué)校都招生爆滿,每個(gè)班人數(shù)都在50人以上。對(duì)于任課老師來(lái)說(shuō),點(diǎn)名考勤成了不小的挑戰(zhàn)。特別對(duì)于中職學(xué)校來(lái)說(shuō),實(shí)訓(xùn)課很多學(xué)生不一定按照指定的位置就座,因此點(diǎn)名時(shí)經(jīng)常出現(xiàn)“張冠李戴”的情況。另一方面,在實(shí)訓(xùn)課上,教師需要操作計(jì)算機(jī)進(jìn)行實(shí)操演示,這個(gè)過(guò)程中,有些學(xué)生不認(rèn)真聽(tīng)講,趴在桌面上睡覺(jué)。怎樣快速準(zhǔn)確統(tǒng)計(jì)出上課時(shí)不認(rèn)真的學(xué)生,值得我們研究。

2 系統(tǒng)的構(gòu)成

基于OpenCV和Python的課堂考勤系統(tǒng)其核心是利用基于OpenCV和Python實(shí)現(xiàn)人臉識(shí)別,通過(guò)對(duì)人臉的檢測(cè)、識(shí)別及統(tǒng)計(jì)實(shí)現(xiàn)課堂考勤。使用到的硬件設(shè)備主要是高清攝像頭加上一臺(tái)計(jì)算機(jī)作為服務(wù)器。軟件上我們采用OpenCV和Python來(lái)實(shí)現(xiàn)。系統(tǒng)的主要功能如下圖1:

3 相關(guān)技術(shù)知識(shí)

OpenCV:

OpenCV是一個(gè)免費(fèi)開(kāi)源的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可以運(yùn)行多個(gè)操作系統(tǒng)上。它的應(yīng)用領(lǐng)域非常廣泛,在人機(jī)互動(dòng)、圖像分割、物體識(shí)別、動(dòng)作識(shí)別、人臉識(shí)別、運(yùn)動(dòng)跟蹤、運(yùn)動(dòng)分析、機(jī)器人等多個(gè)最新技術(shù)領(lǐng)域都有應(yīng)用[1]。

Python:

Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。Python程序簡(jiǎn)單易懂功能強(qiáng)大,許多功能不必從零編寫(xiě),直接使用現(xiàn)成的即可。許多大型網(wǎng)站就是用Python開(kāi)發(fā)的,例如YouTube、豆瓣。Google、Yahoo ,美國(guó)航空航天局等都大量地使用Python[2]。

開(kāi)發(fā)環(huán)境的搭建:

Python也可在多種平臺(tái)開(kāi)發(fā)運(yùn)行,本文以WINDOWS系統(tǒng)作為開(kāi)發(fā)平臺(tái)。本文以Anaconda套件作為開(kāi)發(fā)環(huán)境,它包括幾百種常用的科學(xué)與數(shù)據(jù)分析套件。并內(nèi)置Spyder及Jupyter Notebook編輯器。

首先到anaconda 官方網(wǎng)站下載對(duì)應(yīng)win平臺(tái)下的安裝包:

https://www.anaconda.com/download/ 安裝完anaconda,就相當(dāng)于安裝了Python、IPython、集成開(kāi)發(fā)環(huán)境Spyder、一些包等等。

然后安裝opencv,確定好Python版本,電腦64位或者32位。下載對(duì)應(yīng)版本的文件。下載網(wǎng)址:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 。

安裝后特別注意pip安裝opencv_python-3.2.0-cp36-cp36m-win_amd64.whl以后,文件目錄下沒(méi)有 opencv/sources/data/haarcascades目錄,找不到分類(lèi)器的.xml。這時(shí)需要查看下你的opencv和Python版本。(本文為Python3.6+opencv 3.4),然后下載opencv win x64/x86對(duì)應(yīng)版本,安裝解壓到硬盤(pán)上你指定的位置。解壓你就會(huì)發(fā)現(xiàn)分類(lèi)器的位置。這樣我們就搭配好了OpenCV和Python的開(kāi)發(fā)環(huán)境。

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

4.1 人臉的識(shí)別

課堂考勤系統(tǒng)開(kāi)啟后,第一步要使用攝像頭對(duì)學(xué)生上課的圖像進(jìn)行采集,這里根據(jù)系統(tǒng)不同功能又分為靜態(tài)圖片和視頻的圖片抓取。圖像采集后可以通過(guò)一些算法對(duì)圖像進(jìn)行優(yōu)化,如降噪、平滑、直方圖均衡化處理等以增強(qiáng)人臉特征。然后對(duì)采集的圖像進(jìn)行人臉檢測(cè)和識(shí)別。人臉識(shí)別的算法非常復(fù)雜,國(guó)內(nèi)比較專(zhuān)業(yè)的有科大訊飛、阿里云和百度等提供的人臉識(shí)別算法。本文利用 OpenCV 提供的函數(shù)和分類(lèi)器進(jìn)行人臉檢測(cè)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單易實(shí)現(xiàn)。在OpenCV中主要使用了兩種特征(即兩種方法)進(jìn)行人臉檢測(cè),Haar特征和LBP特征。使用已經(jīng)訓(xùn)練好的XML格式的分類(lèi)器進(jìn)行人臉檢測(cè)[3]。人臉檢測(cè)完畢后再標(biāo)識(shí)出面部位置為后面的臉部圖形抓取做好準(zhǔn)備。最后對(duì)圖像中面部區(qū)域抓取并保存。如圖2。

在OpenCV中,使用類(lèi)“CascadeClassifier”進(jìn)行人臉檢測(cè), ?PYTHON中創(chuàng)建CascadeClassifier對(duì)象

在Python腳本中創(chuàng)建名為face_cascade_name的識(shí)別對(duì)象:face_cascade_name = "e:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml

OpenCV中人臉檢測(cè)使用的是 detectMultiScale函數(shù)。它可以檢測(cè)出圖片中所有的人臉,并將人臉用vector保存每個(gè)人臉的坐標(biāo)、大?。ㄓ镁匦伪硎荆?,函數(shù)由分類(lèi)器對(duì)象調(diào)用:

FACES=face_cascade_name.detectMultiScale(IMAGE,scaleFactor=1.1,minNeighbors=5,minSize=(5,5),flags=cv2.CASCADE_SCALE_IMAGE)

detectMultiScale方法可識(shí)別圖片中的多個(gè)面部,返回值是一個(gè)列表,列表元素是由面部區(qū)域左上角的X,Y坐標(biāo),W,H坐標(biāo),面部寬度,面部高度組成的元組。通過(guò)下列代碼可獲取每一張面部區(qū)域的數(shù)據(jù):(圖3)

for (x,y,w,h) in ?faces;

對(duì)識(shí)別的人臉用矩形框住顯示,靜態(tài)圖片采集識(shí)別主要是作為初始化數(shù)據(jù)時(shí)使用,或者用于靜態(tài)點(diǎn)名。全班剛上課時(shí),擺好拍攝姿勢(shì),教師用系統(tǒng)采集靜態(tài)圖片給系統(tǒng)進(jìn)行人臉識(shí)別從而后臺(tái)統(tǒng)計(jì)人臉數(shù)目實(shí)現(xiàn)點(diǎn)名效果。靜態(tài)點(diǎn)名的好處是系統(tǒng)能夠最佳識(shí)別全班的人臉。但是動(dòng)態(tài)視頻的圖像抓取同樣非常重要,系統(tǒng)啟動(dòng)后自動(dòng)按照系統(tǒng)設(shè)置的頻率抓取課堂圖像并在后臺(tái)自動(dòng)進(jìn)行人臉識(shí)別和統(tǒng)計(jì)識(shí)別出的數(shù)據(jù),按照一定的算法統(tǒng)計(jì)出沒(méi)有認(rèn)真上課(趴下睡覺(jué))的人數(shù),并通過(guò)人臉比對(duì)推算出不認(rèn)真上課(趴下睡覺(jué))的同學(xué)名字和不在上課狀態(tài)的大約時(shí)間。

4.2 人臉的比對(duì)

課堂考勤中學(xué)生經(jīng)常出現(xiàn)的問(wèn)題一般有不按固定位置就坐;遲到;早退;上課睡覺(jué);找人頂替上課等一系列的問(wèn)題。為解決這些問(wèn)題需要系統(tǒng)后臺(tái)對(duì)識(shí)別出來(lái)的人臉比對(duì)。人臉的比對(duì)就是要將人臉識(shí)別出信息與數(shù)據(jù)庫(kù)中的已經(jīng)標(biāo)識(shí)出具體信息的人臉數(shù)據(jù)進(jìn)行比對(duì),從而真正識(shí)別出這張(這些)人臉是屬于誰(shuí)。對(duì)人臉的比對(duì)基本原理是通過(guò)對(duì)比兩張圖片的差異度來(lái)判斷兩張圖片是否為同一人的面部。對(duì)比圖片差異度的算法有很多種,本文應(yīng)用“顏色直方圖”算法來(lái)實(shí)現(xiàn)對(duì)人臉圖像的識(shí)別。下面代碼為在Python中比較兩張圖片的差異:

from PIL import Image

from functools import reduce

import ?math, operator

pic01 = Image.open("img01.jpg") ?#打開(kāi)img01文件

pic02 = Image.open("img02.jpg") ?#打開(kāi)img02文件

h1 = pic01.histogram() ?#取img01文件的直方圖信息

h2 = pic02.histogram() ?#取img02圖片的直方圖信息

diff = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1)) #計(jì)算兩個(gè)圖形差異度

使用顏色直方圖算法需要導(dǎo)入pillow、 functools 、match及operator包,最終的計(jì)算結(jié)果 放入diff變量中,保存的是一個(gè)浮點(diǎn)數(shù),其值代表兩張圖片的差異度,數(shù)值越大,表示圖片差異度越大,若兩張圖片完全相同,則diff值為0.0

系統(tǒng)開(kāi)啟后,任課教師可以“手動(dòng)”讓學(xué)生擺好姿勢(shì)以照片形式采集靜態(tài)圖片,同時(shí)系統(tǒng)一直以實(shí)時(shí)視頻為基礎(chǔ)按固定的頻率抓取圖像。在后臺(tái)與數(shù)據(jù)庫(kù)中人臉進(jìn)行比對(duì),經(jīng)過(guò)與不同的實(shí)時(shí)圖像比對(duì),經(jīng)過(guò)算法分析,給出考勤中遲到,缺席等具體學(xué)生名單。當(dāng)然為了減輕服務(wù)器的負(fù)擔(dān),這個(gè)實(shí)時(shí)抓取比對(duì)的頻率可以設(shè)置為一節(jié)課3-4次。并且系統(tǒng)實(shí)時(shí)人臉比對(duì)功能默認(rèn)情況下是上課后3分鐘至5分鐘后實(shí)時(shí)對(duì)比3-4次,下課前3分鐘再實(shí)時(shí)對(duì)比一次。這種主要針對(duì)一般按正常座位上課的班級(jí)。對(duì)特殊情況,教師可以在上課中間開(kāi)啟實(shí)時(shí)對(duì)比功能設(shè)置對(duì)比時(shí)間和抓取頻率,查詢(xún)出沒(méi)按位置就座或頂替上課的學(xué)生名單。

5 存在的問(wèn)題

本系統(tǒng)雖然通過(guò)OpenCV和Python構(gòu)建人臉識(shí)別技術(shù)能夠?qū)崿F(xiàn)課堂快速考勤。但也有不少問(wèn)題值得后面去改進(jìn)。首先是高清攝像頭的問(wèn)題,一般的學(xué)校教室沒(méi)有配置這個(gè)設(shè)備,只有一些作為高考考場(chǎng)的教室有這些設(shè)備。教師上課需要自帶高清攝像頭顯然不現(xiàn)實(shí)。然后是拍攝角度問(wèn)題以及光照外部環(huán)境極大的影響到人臉的檢測(cè),特別是人臉比對(duì)采用顏色直方圖方法,環(huán)境影響非常大。學(xué)生上課不認(rèn)真除了睡覺(jué)還有一些情況如開(kāi)小差,閉眼睡覺(jué)等,這些可以參考開(kāi)車(chē)疲勞檢測(cè)的算法進(jìn)行開(kāi)發(fā)。同樣,怎樣有效地減少外部環(huán)境影響,有效快速地進(jìn)行人臉檢測(cè)和比對(duì),都值得我們后面去研究。

參考文獻(xiàn):

[1] 武勃.黃暢.基于連續(xù) Adaboost 算法的多視角人臉檢測(cè)[J].計(jì)算機(jī)研究與發(fā)展,2005,42(9):1612-1621.

【通聯(lián)編輯:唐一東】

猜你喜歡
人臉識(shí)別
人臉識(shí)別 等
揭開(kāi)人臉識(shí)別的神秘面紗
基于類(lèi)獨(dú)立核稀疏表示的魯棒人臉識(shí)別
基于K-L變換和平均近鄰法的人臉識(shí)別
佛坪县| 万山特区| 博客| 将乐县| 乐清市| 龙井市| 尚志市| 南皮县| 蒙自县| 义乌市| 吴忠市| 鹿邑县| 玛纳斯县| 枣阳市| 甘孜| 曲阜市| 鲜城| 高安市| 寻甸| 延边| 张北县| 邯郸市| 海淀区| 三河市| 巴林左旗| 曲周县| 泽库县| 华宁县| 翁源县| 德州市| 永定县| 盘山县| 邯郸县| 莎车县| 沁阳市| 永寿县| 翁牛特旗| 石阡县| 长白| 海兴县| 长葛市|