用caffe做个人脸识别

上篇我们把lenet改成caffe,试了试可以!

好,我们再改改,做人脸识别!先看运行效果:

上图用caffe训练了2000次人脸!

训练后,识别了一下,softmax处理后的结果是10左右

然后遮住摄像头,识别了一下,softmax处理后的结果是7左右,还行!

写程序,可能有bug,但首先要能跑!

caffe我们已经讲过了,lenet改的!这里我们把640*480的usb cam图像缩放到227*227的代码放出来:

我们打开电脑自带的摄像头软件,放置在left=0,top=0的地方,然后程序中创建一个timer,实时截屏rect=(0,0,640,480)区域,然后我们调用ZoomNormal函数处理成227*227图像:

private void timer1_Tick_1(object sender, EventArgs e)

{

Bitmap bmp = new Bitmap(640, 480, PixelFormat.Format32bppArgb);

// 创建一个画布

Graphics g = Graphics.FromImage(bmp);

Point hello = new Point(0, 80);

g.CopyFromScreen(hello, Point.Empty, new Size(640, 480));

// 释放画布资源

g.Dispose();

// pictureBox4.Image = bmp;//640*480转227*227

//从bitmap中获取图像

Rectangle rc = new Rectangle(0, 0, bmp.Width, bmp.Height);

System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(rc,

System.Drawing.Imaging.ImageLockMode.ReadWrite,

bmp.PixelFormat);

IntPtr imageptr = bmpdata.Scan0;

int ww = bmp.Width;

int hh = bmp.Height;

int bytes=0;

if (bmp.PixelFormat == PixelFormat.Format24bppRgb)

{

bytes = ww * hh * 3;//此处针对的是24位位图

}

//if (bmp.PixelFormat == PixelFormat.Format8bppIndexed)PixelFormat.Format32bppRgb

if (bmp.PixelFormat == PixelFormat.Format32bppArgb)

{

bytes = ww * hh*4;

}

byte\[\] glob_rgbValues = new bytebytes;

glob_buffer8 = new byteww \* hh;

System.Runtime.InteropServices.Marshal.Copy(imageptr, glob_rgbValues, 0, bytes);

bmp.UnlockBits(bmpdata);

for (int j = 0; j < hh; j++)

{

for (int i = 0; i < ww; i = i + 1)

{

int nn = j * ww + i;

// glob_buffer8nn = glob_rgbValuesnn \* 4;//此处是32位灰度图像(黑白);以下注释掉的是32位argb图像(彩色)

glob_buffer8nn = (byte)(glob_rgbValuesnn \* 4*0.114+glob_rgbValuesnn \* 4+1*0.587+glob_rgbValuesnn \* 4+2*0.299);

//不用glob_rgbValuesnn \* 4+3alpha分量

}

}

//zoom

newimg = new byte227 \* 227; int neww = 0; int newh = 0;

ZoomNormal(glob_buffer8,ref newimg, 640, 480, ref neww, ref newh, 0.354, 0.473);

showbuffer2pictmod4(newimg,227,227,pictureBox4);

}

void ZoomNormal(byte\[\] image0, ref byte\[\] image1, int w, int h,

ref int outwidth, ref int outheight, double ZoomX, double ZoomY)

{

outwidth = (int)(w * ZoomX + 0.5);

outheight = (int)(h * ZoomY + 0.5);

int newbuffersize = outwidth * outheight;

image1 = new bytenewbuffersize;

int x = 0;

int y = 0;

int tempY;

int tempJ;

for (int j = 0; j < outheight; j++)

{

y = (int)(j / ZoomY + 0.5);

if (y >= h) y--;

tempY = y * w;

tempJ = j * outwidth;

for (int i = 0; i < outwidth; i++)

{

x = (int)(i / ZoomX + 0.5);

if (x >= w)

x--;

image1tempJ + i = image0tempY + x;

}

}

}

最后,我们把newimg图像喂给caffe做输入,可以训练,也可以用来测试!

相关推荐
爱敲代码的小黄19 小时前
神经网络入门指南:从 CNN、RNN 到 Attention
人工智能·面试·程序员
一只爱撸猫的程序猿20 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
我登哥MVP21 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
LucianaiB21 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
冬奇Lab1 天前
一天一个开源项目(第256篇):Anatomy —— 让 Claude 为技术概念「发明一台机器」,画成可交互的等距插画
人工智能·开源
孟郎郎1 天前
打造一切(Craft Anything)——克隆构造世间万物
人工智能·ai·github·软件构建·开源软件
Martina_03211 天前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
master3361 天前
AI领域常用名词的系统梳理
人工智能·ai
Spidermanbaout1 天前
Prompt-Engineering实战-2026年11月2日
人工智能·机器学习·ai·chatgpt·ai编程