折腾了两天才算是有点成果了。整理一下吧。
用C# WinForm开发,使用AForge调用摄像头,加上Dlib(DotNet)实现一下人脸识别
更新:现已经将代码,以及本文中所用到的DlibDotNetNative.dll、DlibDotNetNativeDnn.dll、DlibDotNet.Extensions.dll,以及人脸数据上传到github上,如有需要请自行下载。地址:https://github.com/RainkLH/Face_Detection_AForge-DlibDotNet
目录
3.1 找不到【DlibDotNetNative.dll】和【DlibDotNetNativeDnn.dll】
1 AForge.Net调用摄像头
1.1 安装AForge.Net的依赖包
操作摄像头需要用到【AForge.Video.DirectShow】。
从NuGet里查找进行安装,安装时会同时安装它的依赖项:【AForge.Video】和【AForge】
1.2 设计WinForm界面
界面如下:

图中蓝色字体标注了我对每个控件的定义的ID,方便对应下文的代码
左边的【VideoSourcePlayer】控件(AForge中的控件)是摄像头的画面显示,右边的【PictureBox】是后面做人脸识别的显示框。
下方的【PictureBox】是拍照预览框。
期望是程序运行时,检测摄像头设备,添加到【coBox_camList】中,用户选择要用的相机设备,该设备所支持的分辨率自动添加到【coBox_Reslution】列表中,并自动选中默认分辨率,点击【打开】按钮即可显示摄像头画面并实时进行人脸检测。
1.3 添加代码
上面界面对应的代码(Form1.cs)如下:
//-----------form1.cs
using System;
using System.Drawing;
using System.Windows.Forms;
using AForge.Video; //引用命名空间
using AForge.Video.DirectShow; //引用命名空间
namespace AForgeCamera
{
public partial class AForgeCamera : Form
{
private FilterInfoCollection CaptureDevices; //设备列表
private VideoCaptureDevice captureDevice; //摄像头设备
private VideoCapabilities[] videoCapabilities; //摄像头能力列表
private VideoCapabilities videoCapabilitie; //单一摄像头能力(分辨率等)
public AForgeCamera()
{
InitializeComponent();
//控件状态等初始化
btn_cam.Enabled = false;
btn_cam.Text = "打开";
btn_takePic.Enabled = false;
pBox_view.SizeMode = PictureBoxSizeMode.StretchImage;
pBox_faceDst.SizeMode = PictureBoxSizeMode.StretchImage;
//获取摄像头并添加到coBox_CamList
CaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo filterInfo in CaptureDevices)
{
coBox_CamList.Items.Add(filterInfo.Name);
}
faceDetection = new FaceDetection();
}
private void AForgeCamera_FormClosing(object sender, FormClosingEventArgs e)
{
//主窗口关闭,必要的清理
captureDevice.Stop();
CaptureDevices.Clear();
AVPlayer_Cam1.VideoSource = null;
AVPlayer_Cam1.Stop();
}
private void coBox_CamList_SelectedIndexChanged(object sender, EventArgs e)
{
//选择摄像头后
coBox_Resolution.Items.Clear(); //先清理上次选择的摄像头支持的分辨率
//获取摄像头设备
FilterInfo filterInfo = CaptureDevices[coBox_CamList.SelectedIndex];
captureDevice = new VideoCaptureDevice(filterInfo.MonikerString);
//获取所选择的摄像头分辨率列表并添加
videoCapabilities = captureDevice.VideoCapabilities;
foreach (VideoCapabilities capabilitie in videoCapabilities)
{
coBox_Resolution.Items.Add(capabilitie.FrameSize.Width.ToString() +
"×" + capabilitie.FrameSize.Height.ToString());
}
//选中默认分辨率 触发coBox_Resolution_SelectedIndexChanged()
if (coBox_Resolution.Items.Count > 0)
{
coBox_Resolution.SelectedIndex = 0;
}
}
private void coBox_Resolution_SelectedIndexChanged(object sender, EventArgs e)
{
//获取选择的分辨率,选择时没有关闭摄像头时进行关闭
videoCapabilitie = videoCapabilities[coBox_Resolution.SelectedIndex];
btn_cam.Enabled = true;

本文介绍如何使用C# WinForm结合AForge和DlibDotNet实现摄像头实时人脸识别,涵盖摄像头调用、图像处理及人脸识别方法。
最低0.47元/天 解锁文章
509

被折叠的 条评论
为什么被折叠?



