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