SGGL_HBAZ/SGGL/WebAPI/Controllers/HSSE/ImageRecognitionController.cs

135 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
/**
* 使用 AKSK 生成鉴权签名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; }
}
}
}