安国有 王淑妍
【摘 要】基于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呈现识别与跟踪效果,可以说这只是一个人脸识别与跟踪的基本功能,但是由于通过自建窗体的控件实现了识别与跟踪,这样就为广大编程爱好者结合自身需求,在窗体上调用其他控件提供了方法。