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