From 2fe6d35301dfb69dffc123e414d50c065579e7fd Mon Sep 17 00:00:00 2001
From: qiuyao <qiuyao@hnkhzn.com>
Date: 星期一, 31 三月 2025 17:35:05 +0800
Subject: [PATCH] 新增人脸识别

---
 项目代码/WIDESEAWCS_Server 正式/WIDESEAWCS_Common/BaiDuFaceHelper.cs |  342 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 342 insertions(+), 0 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server \346\255\243\345\274\217/WIDESEAWCS_Common/BaiDuFaceHelper.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server \346\255\243\345\274\217/WIDESEAWCS_Common/BaiDuFaceHelper.cs"
new file mode 100644
index 0000000..183ed5b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server \346\255\243\345\274\217/WIDESEAWCS_Common/BaiDuFaceHelper.cs"
@@ -0,0 +1,342 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common
+{
+    public class BaiDuFaceHelper
+    {
+        /// <summary>
+        /// 鑾峰彇AccessToken
+        /// </summary>
+        /// <returns></returns>
+        public static string GetAccessToken()
+        {
+            string url = string.Format("https://aip.baidubce.com/oauth/2.0/token?client_id={0}&client_secret={1}", "TqFQHXSNt6Z7cPQ4vDBfBNjq", "0cli6I6s8JFz3qM1Czi5ciRpDqrJuVvm");
+            string returnStr = BDWebRequest(url, "", "POST");
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("鐧惧害浜鸿劯璇嗗埆杩斿洖锛�" + returnStr);
+            BDToken token = JsonConvert.DeserializeObject<BDToken>(returnStr);
+            token.getdate = DateTime.Now.ToString();
+
+            return token.access_token;
+        }
+
+        public static string BDWebRequest(string url, string data, string method)
+        {
+            try
+            {
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+                request.Method = string.IsNullOrEmpty(method) ? "POST" : method.ToUpper();
+                request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22";
+                request.ServicePoint.Expect100Continue = false;
+                request.Timeout = 1000 * 60;
+                request.ContentType = "application/x-www-form-urlencoded";
+                if (!string.IsNullOrEmpty(method) && method.ToUpper() == "POST" && !string.IsNullOrEmpty(data))
+                {
+                    byte[] byteArray = Encoding.UTF8.GetBytes(data);
+                    request.ContentLength = byteArray.Length;
+                    using (Stream myRequestStream = request.GetRequestStream())
+                    {
+                        myRequestStream.Write(byteArray, 0, byteArray.Length);
+                    }
+                }
+                HttpWebResponse myHttpWebResponse = (HttpWebResponse)request.GetResponse();
+                using (Stream response = myHttpWebResponse.GetResponseStream())
+                {
+                    using (StreamReader reader = new StreamReader(response, Encoding.UTF8))
+                    {
+                        return reader.ReadToEnd();
+                    }
+                }
+            }
+            catch { return ""; }
+        }
+
+        
+        /// <summary>
+        /// 浜鸿劯妫�娴嬩笌灞炴�у垎鏋�
+        /// </summary>
+        /// <returns></returns>
+        public static string FaceDetect(string path)
+        {
+            string token = GetAccessToken();
+            string host = "https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=" + token;
+            var imgbase64 = GetFileContentAsBase64(path);
+            Encoding encoding = Encoding.Default;
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
+            request.Method = "POST";
+            request.KeepAlive = true;
+            String str = "{\"image\":\""+ imgbase64 + "\",\"image_type\":\"BASE64\"}";
+            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();
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("浜鸿劯妫�娴嬩笌灞炴�у垎鏋愶細" + result);
+            return result;
+        }
+
+        /// <summary>
+        /// 鍒涘缓鐢ㄦ埛浜鸿劯璇嗗埆缁�
+        /// </summary>
+        /// <returns></returns>
+        public static string GroupAdd(string group)
+        {
+            string token = GetAccessToken();
+            string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/add?access_token=" + token;
+            Encoding encoding = Encoding.Default;
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
+            request.Method = "post";
+            request.KeepAlive = true;
+            String str = "{\"group_id\":\""+ group + "\"}";
+            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();
+            NLog.LogManager.GetCurrentClassLogger().Trace("鍒涘缓鐢ㄦ埛缁勶細" + result);
+            return result;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂囦欢base64缂栫爜
+        /// </summary>
+        /// <param name="path">鏂囦欢璺緞</param>
+        /// <returns>base64缂栫爜淇℃伅锛屼笉甯︽枃浠跺ご</returns>
+        public static string GetFileContentAsBase64(string path)
+        {
+            using (FileStream filestream = new FileStream(path, FileMode.Open))
+            {
+                byte[] arr = new byte[filestream.Length];
+                filestream.Read(arr, 0, (int)filestream.Length);
+                string base64 = Convert.ToBase64String(arr);
+                return base64;
+            }
+        }
+
+        /// <summary>
+        /// 浜鸿劯娉ㄥ唽
+        /// </summary>
+        /// <returns></returns>
+        public static CreateUserResult AddUser(BDUserInfo info)
+        {
+            string token = GetAccessToken();
+            var imgbase64 = GetFileContentAsBase64(info.ImgPath);
+            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 = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}";
+            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();
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("浜鸿劯娉ㄥ唽锛�" + result);
+            CreateUserResult res= JsonConvert.DeserializeObject<CreateUserResult>(result);//闇�瑕佸皢log_id鍜宖ace_token淇濆瓨鍒扮敤鎴疯〃涓紝鍦ㄤ汉鑴稿垹闄や腑闇�瑕佺敤鍒�
+
+            return res;
+        }
+
+        /// <summary>
+        /// 浜鸿劯鍒犻櫎锛堝垹闄ょ敤鎴风殑鏌愪竴寮犱汉鑴革紝濡傛灉璇ョ敤鎴峰彧鏈変竴寮犱汉鑴稿浘鐗囷紝鍒欏悓鏃跺垹闄ょ敤鎴枫�傦級
+        /// </summary>
+        /// <returns></returns>
+        public static string DeleteUserImg(DeleteUserImg info)
+        {
+            string token = GetAccessToken();
+            string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/delete?access_token=" + token;
+            Encoding encoding = Encoding.Default;
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
+            request.Method = "POST";
+            request.KeepAlive = true;
+            String str = "{\"face_token\":\"" + info.face_token + "\",\"log_id\":\"" + info.log_id + "\",\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\"}";
+            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();
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("浜鸿劯鍒犻櫎锛�" + result);
+            return result;
+        }
+
+        /// <summary>
+        /// 鐢ㄦ埛鍒犻櫎
+        /// </summary>
+        /// <returns></returns>
+        public static string DeleteUser(DeleteUserImg info)
+        {
+            string token = GetAccessToken();
+            string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/delete?access_token=" + token;
+            Encoding encoding = Encoding.Default;
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
+            request.Method = "POST";
+            request.KeepAlive = true;
+            String str = "{\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\"}";
+            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();
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("鐢ㄦ埛鍒犻櫎锛�" + result);
+            return result;
+        }
+
+        /// <summary>
+        /// 浜鸿劯鎼滅储
+        /// </summary>
+        /// <returns></returns>
+        public static SearchResult FaceSearch(string path)
+        {
+            string token = GetAccessToken();
+            var imgbase64 = GetFileContentAsBase64(path);
+
+            string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete?access_token=" + token;
+            Encoding encoding = Encoding.Default;
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
+            request.Method = "POST";
+            request.KeepAlive = true;
+            String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id_list\":\"1\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}";
+            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();
+
+            NLog.LogManager.GetCurrentClassLogger().Trace("浜鸿劯鎼滅储锛�" + result);
+            SearchResult searchResult = JsonConvert.DeserializeObject<SearchResult>(result);
+
+            return searchResult;
+        }
+
+    }
+
+    
+    /// <summary>
+    /// token鑾峰彇淇℃伅
+    /// </summary>
+    public class BDToken
+    {
+        /// <summary>
+        /// 璁よ瘉token
+        /// </summary>
+        public string access_token { get; set; }
+        /// <summary>
+        /// Access Token鐨勬湁鏁堟湡(绉掍负鍗曚綅锛屾湁鏁堟湡30澶�)
+        /// </summary>
+        public int expires_in { get; set; }
+        /// <summary>
+        /// 鑾峰彇鏃堕棿
+        /// </summary>
+        public string getdate { get; set; }
+    }
+
+    /// <summary>
+    /// 浜鸿劯娉ㄥ唽淇℃伅
+    /// </summary>
+    public class BDUserInfo
+    {
+        /// <summary>
+        /// 鍥剧墖璺緞(鎬绘暟鎹ぇ灏忓簲灏忎簬10M锛屽垎杈ㄧ巼搴斿皬浜�1920*1080)
+        /// </summary>
+        public string ImgPath { get; set; }
+        /// <summary>
+        /// 鐢ㄦ埛缁刬d锛屾爣璇嗕竴缁勭敤鎴凤紙鐢辨暟瀛椼�佸瓧姣嶃�佷笅鍒掔嚎缁勬垚锛夛紝闀垮害闄愬埗48B
+        /// </summary>
+        public int group_id { get; set; }
+        /// <summary>
+        /// 鐢ㄦ埛id锛堢敱鏁板瓧銆佸瓧姣嶃�佷笅鍒掔嚎缁勬垚锛夛紝瀵瑰簲绯荤粺璐﹀彿
+        /// </summary>
+        public string user_id { get; set; }
+    }
+    /// <summary>
+    /// 浜鸿劯娉ㄥ唽鏃惰繑鍥炲璞�
+    /// </summary>
+    public class CreateUserResult
+    {
+        /// <summary>
+        /// 妫�绱㈡垚鍔熻繑鍥�0
+        /// </summary>
+        public int error_code { get; set; }
+        public string error_msg { get; set; }
+        /// <summary>
+        /// 璇锋眰鏍囪瘑鐮侊紝闅忔満鏁帮紝鍞竴
+        /// </summary>
+        public string log_id {  get; set; }
+        public CreateUser result { get; set; }
+    }
+    public class CreateUser
+    {
+        /// <summary>
+        /// 浜鸿劯鍥剧墖鐨勫敮涓�鏍囪瘑
+        /// </summary>
+        public string face_token {  get; set; }
+    }
+
+    /// <summary>
+    /// 浜鸿劯鎼滅储鏃惰繑鍥炵殑瀵硅薄
+    /// </summary>
+    public class SearchResult
+    {
+        /// <summary>
+        /// 妫�绱㈡垚鍔熻繑鍥�0
+        /// </summary>
+        public int error_code { get; set; }
+        public string error_msg { get; set;}
+        public UserResult result { get; set;}
+        
+    }
+    public class UserResult
+    {
+        public string face_token {  get; set; }
+        public List<User_List> user_list { get; set;}
+    }
+    public class User_List
+    {
+        public string user_id { get; set; }
+        /// <summary>
+        /// 鐢ㄦ埛鐨勫尮閰嶅緱鍒�,80鍒嗕互涓婂彲浠ュ垽鏂负鍚屼竴浜�
+        /// </summary>
+        public string score { get; set;}
+    }
+    /// <summary>
+    /// 浜鸿劯鍒犻櫎鐨勫叆鍙傚璞★紙鍙垹闄ゆ煇涓�寮犲浘鐗囷紝濡傛灉璇ョ敤鎴峰彧鏈変竴寮犲浘鐗囷紝閭h鐢ㄦ埛鏁翠綋鍒犻櫎
+    /// </summary>
+    public class DeleteUserImg
+    {
+        /// <summary>
+        /// 璇锋眰鏍囪瘑鐮侊紝闅忔満鏁帮紝鍞竴
+        /// </summary>
+        public int log_id { get; set;}
+        /// <summary>
+        /// 鐢ㄦ埛id锛堢敱鏁板瓧銆佸瓧姣嶃�佷笅鍒掔嚎缁勬垚锛夛紝闀垮害闄愬埗48B
+        /// </summary>
+        public string user_id { get; set;}
+        /// <summary>
+        /// 鐢ㄦ埛缁刬d锛堢敱鏁板瓧銆佸瓧姣嶃�佷笅鍒掔嚎缁勬垚锛� 闀垮害闄愬埗48B锛屽垹闄ゆ寚瀹歡roup_id涓殑user_id淇℃伅
+        /// </summary>
+        public string group_id { get; set;}
+        /// <summary>
+        /// 闇�瑕佸垹闄ょ殑浜鸿劯鍥剧墖token锛岋紙鐢辨暟瀛椼�佸瓧姣嶃�佷笅鍒掔嚎缁勬垚锛夐暱搴﹂檺鍒�64B
+        /// </summary>
+        public string face_token { get; set;}
+    }
+}

--
Gitblit v1.9.3