日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# Winform开发人脸识别小程序 (基于百度接口)

發(fā)布時間:2023/12/10 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# Winform开发人脸识别小程序 (基于百度接口) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、設計思路
    • 1、背景
    • 2、簡介
    • 3、用到的技術
    • 4、設計
      • 功能一:用戶注冊
        • 功能概述
        • 功能示意圖
        • 時序圖
      • 功能二:人臉識別
        • 功能概述
        • 功能示意圖
        • 時序圖
  • 二、實現(xiàn)
    • 1、環(huán)境準備
    • 2、百度接口配置
    • 3、技術準備
    • 4、代碼實現(xiàn)
      • 功能一:用戶注冊
      • 功能二:人臉識別
    • 5、補充

一、設計思路

1、背景

家里面的小朋友(我弟)去參加學校組織的一個小比賽,配合他做了這個人臉識別的小程序,把設計思路和代碼發(fā)在這里。

2、簡介

本程序通過調用百度的人臉識別相關的云服務算法,最終實現(xiàn)“人臉注冊”和“人臉識別歡迎語提示”這兩個功能。

3、用到的技術

本程序的最終實現(xiàn)形式為Windows桌面程序,本程序主要采用微軟的Winform模式進行開發(fā),編程語言為C#。
開發(fā)所使用的IDE為Visual Studio2019(.NET Core3.1),輔助工具為Postman、Json格式轉換工具、Base64編碼工具等。

4、設計

功能一:用戶注冊

功能概述

用戶圖像(照片or實時圖像) + 用戶填寫的信息 => 百度云端

功能示意圖


時序圖

功能二:人臉識別

功能概述

識別出現(xiàn)在鏡頭中的用戶。

功能示意圖

時序圖

二、實現(xiàn)

1、環(huán)境準備

硬件:帶有攝像頭的計算機。
軟件:Windows10 操作系統(tǒng)。
網(wǎng)絡:連接互聯(lián)網(wǎng)。

2、百度接口配置

(1) 打開百度智能云網(wǎng)址,注冊登錄,進入如下界面。

(2) 點擊立即使用。

(3) 點擊創(chuàng)建應用。

(4) 在應用名稱一欄輸入所建應用的名稱,在應用描述一欄輸入對所創(chuàng)建應用的大概描述,然后點擊立即創(chuàng)建。


(5) 點擊返回應用列表即可看到剛才創(chuàng)建應用的詳細信息,并且可以看到獲取到的API key和Secret key。

3、技術準備

(1) 一張圖片,在計算機最底層的本質就是一段二進制代碼,不清楚該原理的可以去這個網(wǎng)站轉一下試試:

(2) 這次要用到三個百度接口:
A、登錄接口(鑒權認證/獲取Access Token)

用Postman或者其他在線http請求工具調用一下試試:

注意,client_id和client_secret是你在百度應用中心申請的應用里面的API Key和Secret Key,這兩個東西相當于用戶名和密碼。

B、注冊接口(人臉庫管理/人臉注冊,別的不用看)

C、人臉識別接口(人臉搜索/人臉搜索,別的不用看)

4、代碼實現(xiàn)

功能一:用戶注冊

(1)創(chuàng)建TokenHelper,用于調用百度登錄接口(鑒權認證/獲取Access Token)

class TokenHelper{public static string getAccessToken(){string clientId = ConfigurationSettings.AppSettings["clientId"];string clientSecret = ConfigurationSettings.AppSettings["clientSecret"];string authHost = "https://aip.baidubce.com/oauth/2.0/token";HttpClient client = new HttpClient();List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));paraList.Add(new KeyValuePair<string, string>("client_id", clientId));paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;string result = response.Content.ReadAsStringAsync().Result;return result;}

注意一下,代碼里的相關參數(shù)都寫在app.config中,這些參數(shù)的值根據(jù)你所申請的百度賬號里的參數(shù)值進行具體配置。

(2)創(chuàng)建ImagHelper,用于圖片的格式轉換

public class ImagHelper{/// <summary>/// 圖片轉為base64編碼的文本/// </summary>/// <param name="bmp">待轉的Bitmap</param>/// <returns>轉換后的base64字符串</returns>public static String ImgToBase64String(Image bmp){String strbaser64 = String.Empty;var btarr = convertByte(bmp);strbaser64 = Convert.ToBase64String(btarr);return strbaser64;}/// <summary>/// Image轉byte[]/// </summary>/// <param name="img">Img格式數(shù)據(jù)</param>/// <returns>byte[]格式數(shù)據(jù)</returns>public static byte[] convertByte(Image image){ImageFormat format = image.RawFormat;using (MemoryStream ms = new MemoryStream()){if (format.Equals(ImageFormat.Jpeg)){image.Save(ms, ImageFormat.Jpeg);}else if (format.Equals(ImageFormat.Png)){image.Save(ms, ImageFormat.Png);}else if (format.Equals(ImageFormat.Bmp)){image.Save(ms, ImageFormat.Bmp);}else if (format.Equals(ImageFormat.Gif)){image.Save(ms, ImageFormat.Gif);}else if (format.Equals(ImageFormat.Icon)){image.Save(ms, ImageFormat.Icon);}else{image.Save(ms, ImageFormat.Jpeg);}byte[] buffer = new byte[ms.Length];//Image.Save()會改變MemoryStream的Position,需要重新Seek到Beginms.Seek(0, SeekOrigin.Begin);ms.Read(buffer, 0, buffer.Length);return buffer;}}}

(3)創(chuàng)建FaceHelper ,用于人臉注冊和人臉搜索(即人臉識別)

class FaceHelper : IDisposable{public string token { get; set; }/// <summary>/// 注冊人臉/// </summary>/// <param name="face"></param>/// <returns></returns>public FaceMsg Add(FaceInfo face){string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=" + token;Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.KeepAlive = true;String str = JsonConvert.SerializeObject(face);byte[] buffer = encoding.GetBytes(str);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string result = reader.ReadToEnd();FaceMsg msg = JsonConvert.DeserializeObject<FaceMsg>(result);return msg;}/// <summary>/// 搜索人臉/// </summary>/// <param name="face"></param>/// <returns></returns>public MatchMsg FaceSearch(Face face){string host = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=" + token;Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.KeepAlive = true;String str = JsonConvert.SerializeObject(face); ;byte[] buffer = encoding.GetBytes(str);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string result = reader.ReadToEnd();MatchMsg msg = JsonConvert.DeserializeObject<MatchMsg>(result);return msg;}public void Dispose(){}}

(4)創(chuàng)建From

具體細節(jié)略過,詳細代碼已上傳,見文章末尾鏈接,這里就特別注意一下VideoSourcePlayer這個控件,該控件用于動態(tài)調用攝像頭獲取實時圖像,該控件需要單獨導入這些包:

功能二:人臉識別

人臉識別的實現(xiàn)思路和上述人臉注冊差不多,同樣是用到FaceHelper、ImagHelper、TokenHelper這三個類。

在人臉識別的Form設計時,注意一個點:需要啟動一個子線程實時監(jiān)測攝像頭、輪詢百度人臉搜索接口,一旦攝像頭中出現(xiàn)已注冊的人臉信息,百度接口將立即返回識別結果。

5、補充

(1)源碼和發(fā)布后的可運行小程序稍后發(fā)在評論區(qū)。

(2)攝像頭權限配置:有的用戶電腦可能會無法直接調用攝像頭,需要設置攝像頭訪問權限,去網(wǎng)上攻略一下怎么在win10設置攝像頭訪問權限。

(3)部署的目標電腦不是必須安裝Visio Studio,只安裝.Net Core環(huán)境就行:windowsdesktop-runtime-3.1.15-win-x64.exe。

(4)注冊程序和人臉識別程序不能同時打開,因為攝像頭無法同時被多個進程占用。

總結

以上是生活随笔為你收集整理的C# Winform开发人脸识别小程序 (基于百度接口)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。