【人臉識別】基於matlab GUI灰度化教室人數統計【含Matlab原始碼 602期】
一、簡介
1 課題背景
本課題為基於matlab的人數統計系統。近年來,很多行業對人流資訊有極大的需求,如汽車公交站,地鐵站臺,商場出入口等。通過人數統計系統可以方便、可靠、實時地對各種場所的人流進行統計,而不對公眾造成任何影響。結合其他影象分析技術,系統可以清楚快捷地掌握客流動態,提供資料支援,使決策者及時做出對策。利用影象處理來完成人數統計系統的主要優點就是影象訊號非常直觀,便於人為的理解。可以看出,影象的人數統計無論是在商業資訊採集還是公共安全監控方面具有重要意義,影象的人數統計識別演算法的研究無論在理論上還是在實際應用領域都有著誘人的發展前景。
2 課題分析
以往老師統計學生出勤情況基本上靠人工點名,但是這種方法往往會浪費大量的時間,效率低下,不是一個好的選擇。本課題,基於MATLAB的教室人數統計,帶有豐富的人機互動GUI介面。實現教室人數的計數統計,進而統計出勤率,上課認真聽講的比例。原先預設總人數,未出勤或者書本遮住臉部、趴著玩手機等必然無法採集到人臉,從而對應數量缺失,得出出勤率或聽講率。該課題採用膚色原理進行人臉定位和人臉分割。本課題中,為了介面GUI的美觀,刻意將分割出的人臉單獨顯示在GUI對應的axes裡。
3 社會需求分析
(1)對同學來說:脫離高中魔鬼式的學習,邁入高校的殿堂,許多在校大學生作息時間紊亂,課堂到課情況不理想。出現缺課、曠課情況,嚴重影響到學業成績。更有少數學生利用上課時間出去遊玩,發生意外。讓學生養成一個好的作息習慣,規範學生的考勤,是很多高校最想做到的事情之。因此,快速、有效的出勤統計對大學生的學習以及學習至關重要。
對老師來說:統計出勤情況是記錄學生課程學習過程、提供平時成績評定依據、減少學生髮生意外的風險的有效方法。而傳統考察出勤人數的方式大多耗時費力,在浪費寶貴課堂時間的同時,也為老師增添了負擔。
4 為了說明開發本專案—教室人員統計系統的必要性,我們對傳統的考察出勤人數方式進行了分析。
(a)花名冊順序點名
教師或者教師讓一名學生使用花名冊進行順序點名。
優點:每一名學生都要答到,教師可以有更多的機會認識每一位同學,比較真實的反應了學生的到課情況。
缺點:如果學生的人數比較多,會浪費學生和老師很多的寶貴時間,並且,存在其他同學幫忙答到的情況。
(b)花名冊隨機點名
教師第一次上課時,使用花名冊進行順序點名,未到的同學做好標記。下次上課的時候先點前幾次未到的同學,然後再隨機點幾名同學。
優點:隨機點名法節省了大量的時間,給那些點名未到的同學施加適當的壓力,班級曠課的同學基本.上都是“老面孔”,這種方法可以讓那些同學不敢再曠課。
缺點:第一次點名仍然要花費大量的時間,隨機點名法存在很多“運氣”成份,可能會有一些同學經常沒來.上課,但沒有被發現。
(c)固定座位
讓所有的學生靠前坐,並給班級的每位學生固定座位,上課後,統計缺席人員名單。
優點:老師在上課的時候,可以清楚地看到學生的出勤情況。學生座位靠近講臺,可以提高學生的上課注意力。
缺點:高校學生上課要經常更換教室,固定座位的做法,隨著教室的變動會帶來很多不便。
(d)分組統計
將班級的學生分為多個小組,每個組選出一一個小組長,由小組長確定小組人員的到課情況,下課後, 小組長將名單交給老師。
優點:節省了老師的時間,便於進行以小組為單位的討論和學習。
缺點:可能會存在小組長包庇組員的情況,教師無法確定學生的真實出勤率。
4 為了瞭解大學生對本專案—教室人員統計系統的接受度,我們使用問卷星對大一至大四的在讀本科生進行了問卷調查。以下為調查結果分析:
調查結果顯示被調查者在校期間考察出勤的方式中傳統點名佔72.13%,軟體簽到佔19.03,其他佔9.84%。由此可見傳統點名佔佔據考察方式的大多數,仍沒有可以完全取代它的方式出現。
對於本專案中通過老師拍照的方式統計出勤人員可能涉及肖像權的問題,僅有9.67%人會有些介意,49.34%完全不在意。而更多則是沒考慮過這個這問題,佔總人數的40.98%。 由此可見忽略極少部分,可以認為通過拍照方式統計人數可以被大多數人接受。
被問及此專案優缺點時,認為這種方式速度快的佔參與者的57.38%,方便佔30.17%,其它佔12.45%。而他們擔心的問題中擔心統計不準切導致“被”缺勤佔比最高達83.61%。
綜上調查,我們認為目前需要一種比傳統點名更高效的方式出現。此專案正是想要彌補這一空缺。而提高系統性能,減少差錯的出現是增強教室人員統計系統實用性的關鍵。
5 計算機視覺系統工具箱簡介
計算機視覺系統工具箱(Computer Vision System Toolbox,CVST)是Matlab2012b版本自帶工具箱。該工具箱不僅包括用於特徵提取、運動檢測、目標檢測、目標跟蹤、立體視覺、視訊處理、視訊分析的演算法,還包括視訊檔案輸入輸出,視訊顯示,繪圖以及合成。這些功能以Matlab函式、Matlab系統物件、Simulink塊的形式提供。對於快速原型和嵌入式系統設計,該工具箱支援定點演算法和C程式碼產生。
計算機視覺系統工具箱的人臉檢測演算法主要基於Viola-Jones的人臉檢測,通過內建的類和函式進行人臉甚至是鼻子、嘴以及眼睛的自動檢測。Viola-Jones人臉檢測是Paul viola 和 Michael J Jones共同提出的一種人臉檢測演算法,該演算法原理簡單,耗費資源小,在提出後被廣泛用於人臉檢測。Viola-Jones人臉檢測主要包含Haar-like特徵、積分圖、AdaBoost迭代演算法和級聯分類器等內容,實現人臉檢測的主要步驟是:①利用Haar-like矩形特徵表徵人臉,使用“積分圖”對影象中的矩形特徵進行快速計算。②利用AdaBoost演算法從數量巨大的Haar-like特徵中訓練出人臉檢測所需要的分類器。③將訓練得到的強分類器進行級聯,利用級聯的強分類器構成最終的分類器。
計算機視覺系統工具箱只需要用簡單的命令即可實現人臉檢測。呼叫工具箱中的vision.CascadeObjectDetector即可執行。不僅執行速度較快,且人臉檢測準確度很高。經過自行改進,可進行批處理。
6 方案設計
6.1框架設計
該專案要完成的功能是:根據所給的圖片,實現自動人臉檢測,人數統計,要求含有GUI介面,且演算法能夠準確的實現人數的統計,擁有較快的運算速度,具有較好的實時性。
6.2介面設計
首先,將頁面背景設定為灰白色,在中心及偏左頁面設定兩個座標系axes1以及axes2,用以顯示後來選中的圖片和人臉識別後已框出人臉的圖片。在座標系右邊從上到下依次拖拽設定pushbutton1、pushbutton2、edit1、text1、pushbutton2。其中,pushbutton1上編輯‘開啟教室圖片’字樣,用以完成開啟圖片功能;edit1上編輯‘統計結果’字樣;text4中顯示‘統計結果’的結果;pushbutton2上編輯‘統計人數’,通過點選此按鈕實現統計人數的功能;最後一個pushbutton3上編輯‘完成’字樣,完成關閉功能。座標軸上方還設定一個text2,編輯‘歡迎使用教室人數統計系統’作為標題。至此完成頁面的介面設計。
6.3功能設計
對於pushbutton1按鈕,即點選‘開啟教室圖片’,是使用uigetfile函式標準化開啟選擇檔案對話方塊,此時會彈出此電腦的檔案介面,選擇一張帶有人的圖片後,點選確認即可在axes1上顯示該選中圖片,且在此圖片上方設定標題‘教室照片’,完成選中圖片功能。其次點選‘統計人數’按鈕,在程式碼中取得開啟圖片的相關資料,將彩色影象轉化為灰度影象等等處理,設定路徑將此轉化處理後的影象顯示在axes2,此外還可找到圖片中的人臉,繪製邊框圈出來,統計出邊框的個數反映在text1中,且在此影象上方設定標題‘框出人臉區域’。至此完成此設計的全部功能。下圖為該專案的功能流程圖:
圖1 功能流程圖
二、原始碼
function varargout = face_collection(varargin)
% FACE_COLLECTION MATLAB code for face_collection.fig
% FACE_COLLECTION, by itself, creates a new FACE_COLLECTION or raises the existing
% singleton*.
%
% H = FACE_COLLECTION returns the handle to a new FACE_COLLECTION or the handle to
% the existing singleton*.
%
% FACE_COLLECTION('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in FACE_COLLECTION.M with the given input arguments.
%
% FACE_COLLECTION('Property','Value',...) creates a new FACE_COLLECTION or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before face_collection_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to face_collection_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help face_collection
% Last Modified by GUIDE v2.5 13-A-2021 12:23:11
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @face_collection_OpeningFcn, ...
'gui_OutputFcn', @face_collection_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before face_collection is made visible.
function face_collection_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to face_collection (see VARARGIN)
% Choose default command line output for face_collection
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes face_collection wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = face_collection_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global I
[x,y,c]=ginput(2);
if c==1
BB=imcrop(I,[min(x(1),x(2)),min(y(1),y(2)),abs(x(2)-x(1)),abs(y(2)-y(1))]);
BB=imresize(BB,[252 202]);
axes(handles.axes2); % 處理後的影象放在axes2中
imshow(BB)
end
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile( ...
{'*.jpg;*.png;*.jpeg', 'Image Files (*.bmp;*.jpg;*.png;*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0),
return;
end
三、執行結果
四、備註
版本:2014a
完整程式碼或代寫加1564658423