我正在开发一个检测车牌的应用程序并向我提供有关它们的信息。这是通过调用名为“openALPR”的Rest API来完成的。 结果我得到一个如下所示的JSON字符串:
{
"uuid": "",
"data_type": "alpr_results",
"epoch_time": 1512554543436,
"processing_time": {
"plates": 145.41024780273438,
"total": 147.6409999995667
},
"img_height": 233,
"img_width": 700,
"results": [
{
"plate": "MTF5101",
"confidence": 94.978622436523438,
"region_confidence": 0,
"vehicle_region": {
"y": 1,
"x": 234,
"height": 232,
"width": 232
},
"region": "fr",
"plate_index": 0,
"processing_time_ms": 193.28457641601563,
"candidates": [
{
"matches_template": 0,
"plate": "MTF5101",
"confidence": 94.978622436523438
}
],
"coordinates": [
{
"y": 102,
"x": 289
},
{
"y": 101,
"x": 412
},
{
"y": 126,
"x": 412
},
{
"y": 128,
"x": 289
}
],
"matches_template": 0,
"requested_topn": 50
},
{
"plate": "MHV7718",
"confidence": 94.9754638671875,
"region_confidence": 0,
"vehicle_region": {
"y": 0,
"x": 395,
"height": 233,
"width": 233
},
"region": "fr",
"plate_index": 1,
"processing_time_ms": 193.28457641601563,
"candidates": [
{
"matches_template": 0,
"plate": "MHV7718",
"confidence": 94.9754638671875
},
{
"matches_template": 0,
"plate": "MH7718",
"confidence": 81.550361633300781
},
{
"matches_template": 0,
"plate": "MHY7718",
"confidence": 81.411224365234375
}
],
"coordinates": [
{
"y": 142,
"x": 475
},
{
"y": 148,
"x": 676
},
{
"y": 184,
"x": 674
},
{
"y": 178,
"x": 475
}
],
"matches_template": 0,
"requested_topn": 50
},
{
"plate": "MTG7780",
"confidence": 94.97296142578125,
"region_confidence": 0,
"vehicle_region": {
"y": 1,
"x": 91,
"height": 232,
"width": 232
},
"region": "fr",
"plate_index": 2,
"processing_time_ms": 193.28457641601563,
"candidates": [
{
"matches_template": 0,
"plate": "MTG7780",
"confidence": 94.97296142578125
},
{
"matches_template": 0,
"plate": "MT7780",
"confidence": 81.548896789550781
},
{
"matches_template": 0,
"plate": "MT67780",
"confidence": 81.409553527832031
}
],
"coordinates": [
{
"y": 84,
"x": 18
},
{
"y": 96,
"x": 202
},
{
"y": 140,
"x": 201
},
{
"y": 128,
"x": 16
}
],
"matches_template": 0,
"requested_topn": 50
}
],
"credits_monthly_used": 48,
"version": 2,
"credits_monthly_total": 2000,
"error": false,
"regions_of_interest": [],
"credit_cost": 1
}
现在我需要获取每个牌照的坐标。在这个例子中有3个牌照。每个“坐标”键包括四个点(x,y)。
如何在C#中获取这些坐标?
感谢您查看我的问题!
最诚挚的问候, Fabian Maurhart!
答案 0 :(得分:1)
首先为您的REST API输出制作C#Model类,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JSONConversion.Models
{
public class LicensePlateInformation
{
public string uuid { get; set; }
public string data_type { get; set; }
public long epoch_time { get; set; }
public Processing_Time processing_time { get; set; }
public int img_height { get; set; }
public int img_width { get; set; }
public List<Result> results { get; set; }
public int credits_monthly_used { get; set; }
public int version { get; set; }
public int credits_monthly_total { get; set; }
public bool error { get; set; }
public object[] regions_of_interest { get; set; }
public int credit_cost { get; set; }
}
public class Processing_Time
{
public float plates { get; set; }
public float total { get; set; }
}
public class Result
{
public string plate { get; set; }
public float confidence { get; set; }
public int region_confidence { get; set; }
public Vehicle_Region vehicle_region { get; set; }
public string region { get; set; }
public int plate_index { get; set; }
public float processing_time_ms { get; set; }
public Candidate[] candidates { get; set; }
public List<Coordinate> coordinates { get; set; }
public int matches_template { get; set; }
public int requested_topn { get; set; }
}
public class Vehicle_Region
{
public int y { get; set; }
public int x { get; set; }
public int height { get; set; }
public int width { get; set; }
}
public class Candidate
{
public int matches_template { get; set; }
public string plate { get; set; }
public float confidence { get; set; }
}
public class Coordinate
{
public int y { get; set; }
public int x { get; set; }
}
}
之后通过发出如下GET请求从您的API获取JSON数据:
using System.Net.Http;
using Newtonsoft.Json;
public async Task<LicensePlateInformation> GetLicensePlateInfoFromAPI()
{
try
{
string stringifiedJSONFromAPI = string.Empty;
LicensePlateInformation plateInfo = new LicensePlateInformation();
using(HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage msg = await client.GetAsync($"<Insert rest api endpoint here>");
if(msg.IsSuccessStatusCode)
{
stringifiedJSONFromAPI = await msg.Content.ReadAsStringAsync();
JsonConvert.PopulateObject(stringifiedJSONFromAPI, plateInfo);
}
return plateInfo;
}
}
catch(Exception ex)
{
throw;
}
}
最后,在获得C#模型类之后,只需应用LINQ来获取所有详细信息:
using System.Linq;
using System.Collections.Generic;
LicensePlateInformation plateInfo = await GetLicensePlateInfoFromAPI();
List<Coordinate> coOrdinatesList = new List<Coordinate>();
foreach (var outerItem in plateInfo.results.Select(x => x.coordinates))
{
foreach (var innerItem in outerItem)
{
coOrdinatesList.Add(innerItem);
}
}