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