135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.IO; | |||
|  | using RestSharp; //依赖版本106.15.0 https://www.nuget.org/packages/RestSharp/106.15.0 | |||
|  | using Newtonsoft.Json; //https://www.nuget.org/packages/Newtonsoft.Json | |||
|  | using System.Web.Http; | |||
|  | using System.Collections.Generic; | |||
|  | 
 | |||
|  | namespace WebAPI.Controllers.HSSE | |||
|  | { | |||
|  |     public class ImageRecognitionController : ApiController | |||
|  |     { | |||
|  |         const string API_KEY = "2pHOZ7ff76vYgYoIwQnTIB31"; | |||
|  |         const string SECRET_KEY = "8q4Oa8wLi6xorfYQgUlEBqM4OOHqFXL7"; | |||
|  | 
 | |||
|  | 
 | |||
|  |         [HttpPost] | |||
|  |         public Model.ResponeData getImageContent([FromBody] ImageRequest imageRequest) | |||
|  |         { | |||
|  |             var responeData = new Model.ResponeData(); | |||
|  |              | |||
|  |             try | |||
|  |             { | |||
|  |                 var client = new RestClient($"https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={GetAccessToken()}"); | |||
|  |                 client.Timeout = -1; | |||
|  |                 var request = new RestRequest(Method.POST); | |||
|  |                 request.AddHeader("Content-Type", "application/json"); | |||
|  |                 string image = imageRequest.Image; | |||
|  |                 var body = $@"{{""image"":""{image}"",""image_type"":""BASE64"",""max_face_num"":30}}"; | |||
|  |                 request.AddParameter("application/json", body, ParameterType.RequestBody); | |||
|  |                 IRestResponse response = client.Execute(request); | |||
|  |                 Console.WriteLine(response.Content); | |||
|  |                 string json = response.Content; | |||
|  |                 var responseData = JsonConvert.DeserializeObject<ResponseData>(json); | |||
|  |                 int errorCode = responseData.error_code; | |||
|  |                 if (errorCode != 0) | |||
|  |                 { | |||
|  |                     responeData.message = responseData.error_msg; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     int faceNum = responseData.result.face_num; | |||
|  |                     responeData.data = faceNum; | |||
|  |                 } | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 responeData.code = 0; | |||
|  |             } | |||
|  | 
 | |||
|  |             return responeData; | |||
|  |              | |||
|  |         } | |||
|  | 
 | |||
|  |         /** | |||
|  |         * 获取文件base64编码 | |||
|  |         * @param path 文件路径 | |||
|  |         * @return base64编码信息,不带文件头 | |||
|  |         */ | |||
|  |         public 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; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         /** | |||
|  |         * 使用 AK,SK 生成鉴权签名(Access Token) | |||
|  |         * @return 鉴权签名信息(Access Token) | |||
|  |         */ | |||
|  |         public string GetAccessToken() | |||
|  |         { | |||
|  |             var client = new RestClient($"https://aip.baidubce.com/oauth/2.0/token"); | |||
|  |             client.Timeout = -1; | |||
|  |             var request = new RestRequest(Method.POST); | |||
|  |             request.AddParameter("grant_type", "client_credentials"); | |||
|  |             request.AddParameter("client_id", API_KEY); | |||
|  |             request.AddParameter("client_secret", SECRET_KEY); | |||
|  |             IRestResponse response = client.Execute(request); | |||
|  |             Console.WriteLine(response.Content); | |||
|  |             var result = JsonConvert.DeserializeObject<dynamic>(response.Content); | |||
|  |             return result.access_token.ToString(); | |||
|  |         } | |||
|  |          | |||
|  |         public class ImageRequest | |||
|  |         { | |||
|  |             public string Image { get; set; } | |||
|  |         } | |||
|  |          | |||
|  |         public class Location | |||
|  |         { | |||
|  |             public double left { get; set; } | |||
|  |             public double top { get; set; } | |||
|  |             public double width { get; set; } | |||
|  |             public double height { get; set; } | |||
|  |             public double rotation { get; set; } | |||
|  |         } | |||
|  | 
 | |||
|  |         public class Angle | |||
|  |         { | |||
|  |             public double yaw { get; set; } | |||
|  |             public double pitch { get; set; } | |||
|  |             public double roll { get; set; } | |||
|  |         } | |||
|  | 
 | |||
|  |         public class Face | |||
|  |         { | |||
|  |             public string face_token { get; set; } | |||
|  |             public Location location { get; set; } | |||
|  |             public double face_probability { get; set; } | |||
|  |             public Angle angle { get; set; } | |||
|  |         } | |||
|  | 
 | |||
|  |         public class Result | |||
|  |         { | |||
|  |             public int face_num { get; set; } | |||
|  |             public List<Face> face_list { get; set; } | |||
|  |         } | |||
|  | 
 | |||
|  |         public class ResponseData | |||
|  |         { | |||
|  |             public int error_code { get; set; } | |||
|  |             public string error_msg { get; set; } | |||
|  |             public long log_id { get; set; } | |||
|  |             public long timestamp { get; set; } | |||
|  |             public int cached { get; set; } | |||
|  |             public Result result { get; set; } | |||
|  |         } | |||
|  |          | |||
|  |     } | |||
|  | } |