安國有 王淑妍
【摘 ?要】基于VS2012編程工具,論文通過C#語言調用Picture控件和百度人臉離線識別SDK,實現(xiàn)基本的人臉識別與跟蹤。
【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功能,量身開發(fā)應用程序已成為可能。作為初學者,利用已知的開發(fā)工具和語言調用開放的SDK或API的能力不足,為此將自己開發(fā)的心得加以總結,以供同行借鑒與交流,進而推進AI技術在各行業(yè)的應用與普及。
2 百度人臉識別離線SDK下載與激活
2.1 “人臉識別SDK”下載
通過百度AI開發(fā)平臺下載所需SDK,例如,通過VS2012編程工具,利用C#語言,開發(fā)B/S運行模式的人臉識別應用軟件,則需下載“Win C# 離線識別SDK”。
2.2 SDK申請與激活
無論試用,還是永久使用百度人臉識別離線SDK,都需要通過百度AI開放平臺注冊合法用戶賬號,然后通過賬號登錄平臺,按照如下操作步驟逐一完成方可。
2.2.1 SDK申請
根據(jù)下載的SDK以及開發(fā)意向,填寫相關申請信息,并提交信息,等待百度AI開發(fā)平臺的后臺審核。如果審核通過,再次登錄平臺時,即可看到兩條審核通過信息,每條信息中含有序號,因此一定保存好“序號”,以便后續(xù)離線激活SDK使用。
2.2.2 離線激活SDK
解壓已下載的“Baidu_Face_Offline_SDK_Windows_Csharp.zip”文件,找到bin文件,其下有兩個文件夾:“X64”和“X86”,如開發(fā)程序64位應用程序,則運行“X64”文件夾下的“LicenseTool.exe”程序,反之則運行“X86”的“LicenseTool.exe”,然后填寫對應的“序號”即可激活SDK,激活成功后,在“X64”或“X86”文件夾下會生成兩個文件:icense.ini和license.key,這兩個文件切記不能刪除。
3 開發(fā)環(huán)境部署
如果基于VS2012編輯器,利用C#語言調用百度“人臉離線識別SDK”,開發(fā)C/S模式Windows應用程序,因此其開發(fā)環(huán)境要求如下:
①Windows7以上操作系統(tǒng),安裝VS2012工具軟件;
②由于百度人臉識別離線SDK的運行需要.NET Framework 4.5.2,因此安裝完VS2012工具軟件,應該下載.NET Framework 4.5.2,并進行安裝。
4 項目首顯窗體設置
通過解壓后的“testface.sln”文件打開項目,由于此應用程序希望通過自建窗體的pictureBox控件顯示人臉識別與跟蹤情況,因此需要按下述步驟操作:
①通過項目屬性,設置“應用程序”選項中的“輸出類型”為:Windows應用程序。
②在項目中創(chuàng)建form1窗體,在窗體中添加pictureBox1、button1、button2控件。
③修改Face.cs類文件,實現(xiàn)項目啟動首先顯示form1窗體。
在此文件命名空間引用處,添加using System.Windows.Forms;
刪除Main方法原有語句,然后輸入如下語句:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new form1());
這時運行程序,即可看到首先顯示的界面即為form1窗體。
5 定義、修改相關方法,實現(xiàn)人臉識別與跟蹤
第一,在Face.cs類文件中定義如下方法,實現(xiàn)百度人臉識別離線SDK初始化:
public void InitSDK()
{
bool id=false;//表示以生活照識別
int n = sdk_init(false);
}
第二,在FaceTrack.cs文件中,定義數(shù)據(jù)轉換函數(shù),修改相關方法,實現(xiàn)pictureBox控件顯示人臉識別與跟蹤。
為了確保函數(shù)的定義和方法的修改,在命名空間引用處,添加下面語句:
Using System.IO;
Using System.Drawing;
①定義數(shù)據(jù)轉換函數(shù)
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方法,實現(xiàn)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;
第三,通過窗體按鈕調用相關方法,實現(xiàn)SDK初始化和人臉識別與跟蹤。
①在form1中創(chuàng)建對象實例,定義無形參的人臉識別與跟蹤方法,具體如下:
首先,創(chuàng)建對象實例:Face Fa=new Face();FaceTrack Ft=new FaceTrack();
其次,定義無形參方法,以供線程調用:
Private void run()
{
Ft.usb_csharp_track_face(0,pictureBox1);
}
②通過button1按鈕單擊事件,調用相關方法,實現(xiàn)SDK初始化。
private void button1_Click(object sender,EventArgs e)
{
Fa.InitSDK();
}
③通過buttion2按鈕的單擊事件,創(chuàng)建新線程,調用run方法,實現(xiàn)人臉識別與跟蹤。
private void button2_Click(object sender,EventArgs e)
{
Thread MyThread=new Thread(run);
MyThread.Start();
}
第四,運行方法。首先單擊button1,進行SDK初始化,使之常駐內容,支撐其他方法的調用,待初始化完成,然后單擊button2,執(zhí)行人臉識別和跟蹤,并通過form1 窗體上的pictureBox1控件識別與跟蹤效果。
綜上所述,即為通過C#語言調用百度人臉識別離線SDK,通過自建窗體上的pictureBox1呈現(xiàn)識別與跟蹤效果,可以說這只是一個人臉識別與跟蹤的基本功能,但是由于通過自建窗體的控件實現(xiàn)了識別與跟蹤,這樣就為廣大編程愛好者結合自身需求,在窗體上調用其他控件提供了方法。