最簡單的人臉識別

2021-10-12 20:30:48 字數 4814 閱讀 4051

來了來了

**貼出:網路上的其他版本bug很模糊,這份筆記貼進軟體就能實現

介紹啊!

這一步是解決資料讀取問題,將資料匯入

%檔案1

function imgdata =

imgdata()

%用法: imgdata =

imgdata()

;%分別匯入

pic1 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face1.jpg'))

; pic1 =

imresize

(pic1,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic2 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face2.jpg'))

; pic2 =

imresize

(pic2,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic3 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face3.jpg'))

; pic3 =

imresize

(pic3,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic4 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face4.jpg'))

; pic4 =

imresize

(pic4,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic5 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face5.jpg'))

; pic5 =

imresize

(pic5,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic6 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\face6.jpg'))

; pic6 =

imresize

(pic6,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

pic7 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\kuanleung.jpg'))

; pic7 =

imresize

(pic7,

[150

,150])

;%讀取轉換為灰度值,尺寸大小設定為長150,寬150

[m,n]

=size

(pic1)

;%取大小

% 下面採用乙個細胞體結構的資料型別儲存多個矩陣

pic_all =

;%放入同乙個細胞體中

for i=1:

7%這個引數是pic_all的大小,為7

%把m*n的矩陣變換成1

*(m*n)的矩陣

imgdata

(i,:)=

reshape

(pic_all,1

,m*n)

;end

%講資料範圍縮小到0到1之間

imgdata =

double

(imgdata)

/255

;%輸出預處理的

%檔案2

function facefind =

facefind

(cell_all,img2find)

%細胞結構體的呼叫

img_all = cell_all

;[m1,n1]

=size

(img_all)

;v = cell_all

;d = cell_all

;%namud =

0.5;

%縮小的倍數

%對需要識別的影象進行灰度等的處理

%pic =

rgb2gray

(img2find)

;%灰度處理

pic = img2find

pic =

imresize

(pic,

[150

,150])

;%變換大小

[m2,n2]

=size

(pic)

; pic =

reshape

(pic,

1,m2*n2)

;%重新排列

pic =

double

(pic)

/255

;

pic_done = pic*v*d;

%處理完的資料

%% 歸一化 --》避免運算出現特別大的資料

ma =

max(

max(pic_done));

mi =

min(

min(pic_done));

pic_done = pic_done/

(ma - mi);%

%for i=

1:m1

% 歸一化 --》避免運算出現特別大的資料

ma1 =

max(

img_all

(i,:))

; mi1 =

min(

img_all

(i,:))

;img_all

(i,:)=

img_all

(i,:)/

(ma1 - mi1)

;%求範數--》把他們之間的幾何距離作為評判與哪乙個人臉最近的標準

error

(i)=

norm

(img_all

(i,:

)-pic_done)

;end

%找到其中最近的就認為是所要識別的人臉

facefind =

find

(error ==

min(error));

% facefind = error;

這個函式是演算法函式,主成分分析,提取人臉特徵的主要成分,在通過facefind函式進行誤差匹配。

%檔案3

function cell_all =

pca(img,k)

%reshape函式:改變句矩陣的大小,矩陣的總元素個數不能變

%img =[1

,2;2

,1;3

,3;3

,6;6

,3];

% k =2;

% img =

double

(img)

;[m,n]

=size

(img)

;%取大小

img_mean =

mean

(img)

;%求每列平均值

img_mean_all =

repmat

(img_mean,m,1)

;%複製m行平均值至整個矩陣

z = img - img_mean_all;

t = z'*z;

%協方差矩陣

[v,d]

=eigs

(t,k)

;%計算t中最大的前k個特徵值與特徵向量

img_new = img*v*d;

%低維度下的各個臉的資料

cell_all =

;

這個是主函式,呼叫所有的功能函式

%檔案4

%開始呼叫

pic8 =

rgb2gray

(imread

('d:\個人檔案\指令碼檔案\matlab\facemodels\faceres\kunleung_shiyan.jpg'))

; ic8 =

imresize

(pic8,

[150

,150])

;%讀取要識別的影象,進行重新尺寸設定為長150,寬150

imgdata =

imgdata()

k =3

%提取主成分的數量

cell_all =

pca(imgdata,k)

facefind =

facefind

(cell_all,pic8)

%進行誤差匹配,選擇誤差最小的

%imshow

(facefind,

)

影象庫:

本人頭像就不貼了

注意:識別物體,如水杯,效果不佳

matlab 簡單的人臉識別

如下 clc clear all close all 載入影象 endbw im2bw i,graythresh i 二值化 figure subplot 2,3,1 imshow img title 原影象 fontweight bold subplot 2,3,2 imshow i title ...

android opencv 簡單的人臉識別

很簡單的人臉識別功能,識別人臉後用矩形圈出來 實現人臉識別需要模型檔案,opencv再帶的模型檔案在opencv android sdk sdk etc內 我使用haarcascade frontalface alt.xml來做人臉識別 把haarcascade frontalface alt.xm...

OpenCV簡單的人臉識別

import cv2 import sys from pil import image defcatchusbvideo window name,camera idx cv2.namedwindow window name cap cv2.videocapture camera idx 告訴open...