PictureBox(C#)+百度离线SDK实现人脸识别

2020-12-16 02:58安国有王淑妍

安国有 王淑妍

【摘  要】基于VS2012编程工具,论文通过C#语言调用Picture控件和百度人脸离线识别SDK,实现基本的人脸识别与跟踪。

【Abstract】Based on VS2012 programming tools, the paper calls Picture controls and Baidu offline face recognition SDK through C# language to realize basic face recognition and tracking.

【关键词】C#;Picture控件;百度人脸识别离线SDK;人脸识别与跟踪

【Keywords】C#; Picture controls; Baidu offline face recognition SDK; face recognition and tracking

【中图分类号】TP391.4                                【文献标志码】A                                   【文章编号】1673-1069(2020)07-0170-02

1 引言

随着各大公司(百度、腾讯等)AI开放平台的推出,及其各自功能的日臻完善,对于一般的程序编写者,结合工作需求,利用开放平台的SDK和API功能,量身开发应用程序已成为可能。作为初学者,利用已知的开发工具和语言调用开放的SDK或API的能力不足,为此将自己开发的心得加以总结,以供同行借鉴与交流,进而推进AI技术在各行业的应用与普及。

2 百度人脸识别离线SDK下载与激活

2.1 “人脸识别SDK”下载

通过百度AI开发平台下载所需SDK,例如,通过VS2012编程工具,利用C#语言,开发B/S运行模式的人脸识别应用软件,則需下载“Win C# 离线识别SDK”。

2.2 SDK申请与激活

无论试用,还是永久使用百度人脸识别离线SDK,都需要通过百度AI开放平台注册合法用户账号,然后通过账号登录平台,按照如下操作步骤逐一完成方可。

2.2.1 SDK申请

根据下载的SDK以及开发意向,填写相关申请信息,并提交信息,等待百度AI开发平台的后台审核。如果审核通过,再次登录平台时,即可看到两条审核通过信息,每条信息中含有序号,因此一定保存好“序号”,以便后续离线激活SDK使用。

2.2.2 离线激活SDK

解压已下载的“Baidu_Face_Offline_SDK_Windows_Csharp.zip”文件,找到bin文件,其下有两个文件夹:“X64”和“X86”,如开发程序64位应用程序,则运行“X64”文件夹下的“LicenseTool.exe”程序,反之则运行“X86”的“LicenseTool.exe”,然后填写对应的“序号”即可激活SDK,激活成功后,在“X64”或“X86”文件夹下会生成两个文件:icense.ini和license.key,这两个文件切记不能删除。

3 开发环境部署

如果基于VS2012编辑器,利用C#语言调用百度“人脸离线识别SDK”,开发C/S模式Windows应用程序,因此其开发环境要求如下:

①Windows7以上操作系统,安装VS2012工具软件;

②由于百度人脸识别离线SDK的运行需要.NET Framework 4.5.2,因此安装完VS2012工具软件,应该下载.NET Framework 4.5.2,并进行安装。

4 项目首显窗体设置

通过解压后的“testface.sln”文件打开项目,由于此应用程序希望通过自建窗体的pictureBox控件显示人脸识别与跟踪情况,因此需要按下述步骤操作:

①通过项目属性,设置“应用程序”选项中的“输出类型”为:Windows应用程序。

②在项目中创建form1窗体,在窗体中添加pictureBox1、button1、button2控件。

③修改Face.cs类文件,实现项目启动首先显示form1窗体。

在此文件命名空间引用处,添加using System.Windows.Forms;

删除Main方法原有语句,然后输入如下语句:

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new form1());

这时运行程序,即可看到首先显示的界面即为form1窗体。

5 定义、修改相关方法,实现人脸识别与跟踪

第一,在Face.cs类文件中定义如下方法,实现百度人脸识别离线SDK初始化:

public void InitSDK()

{

bool id=false;//表示以生活照识别

int n = sdk_init(false);

}

第二,在FaceTrack.cs文件中,定义数据转换函数,修改相关方法,实现pictureBox控件显示人脸识别与跟踪。

为了确保函数的定义和方法的修改,在命名空间引用处,添加下面语句:

Using System.IO;

Using System.Drawing;

①定义数据转换函数

private Bitmap BToBp(byte[] Bytes)

{

MemoryStream stream = null;

try

{

stream = new MemoryStream(Bytes);

return new Bitmap((Image) new Bitmap(stream));

}

catch (ArgumentNullException ex){throw ex;}

catch (ArgumentException ex){throw ex;}

finally{stream.Close();}

}

②修改usb_csharp_track_face方法,实现pictureBox控件显示人脸识别与跟踪

首先给方法定义两个形参,如下:

public void usb_csharp_track_face(int dev, System.Windows.Forms pictureBox p1);

其次分别删除using (var window=new Window(“face”))和window.ShowImage(image)语句;

最后在Marshal.FreeHGlobal(ptT)下面增加两条独立语句:

Bitmap b=BToBp(image.ToBytes());p1.Image=b;

第三,通过窗体按钮调用相关方法,实现SDK初始化和人脸识别与跟踪。

①在form1中创建对象实例,定义无形参的人脸识别与跟踪方法,具体如下:

首先,创建对象实例:Face Fa=new Face();FaceTrack Ft=new FaceTrack();

其次,定義无形参方法,以供线程调用:

Private void run()

{

Ft.usb_csharp_track_face(0,pictureBox1);

}

②通过button1按钮单击事件,调用相关方法,实现SDK初始化。

private void button1_Click(object sender,EventArgs e)

{

Fa.InitSDK();

}

③通过buttion2按钮的单击事件,创建新线程,调用run方法,实现人脸识别与跟踪。

private void button2_Click(object sender,EventArgs e)

{

Thread MyThread=new Thread(run);

MyThread.Start();

}

第四,运行方法。首先单击button1,进行SDK初始化,使之常驻内容,支撑其他方法的调用,待初始化完成,然后单击button2,执行人脸识别和跟踪,并通过form1 窗体上的pictureBox1控件识别与跟踪效果。

综上所述,即为通过C#语言调用百度人脸识别离线SDK,通过自建窗体上的pictureBox1呈现识别与跟踪效果,可以说这只是一个人脸识别与跟踪的基本功能,但是由于通过自建窗体的控件实现了识别与跟踪,这样就为广大编程爱好者结合自身需求,在窗体上调用其他控件提供了方法。