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; }
 | ||
|         }
 | ||
|         
 | ||
|     }
 | ||
| } |