Reputation: 31
I am working on an application that detects license plates and give me information about them. This is done by calling an Rest API called "openALPR". As a result i get an JSON string looking like this:
{
"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
}
Now i need to get the coordinates for every license plate. In this example there are 3 license plates. Each "coordinate" key includes four points (x,y).
How do I get these coordinates in C#?
Thanks for looking at my question!
With best regards, Fabian Maurhart!
Upvotes: 1
Views: 1954
Reputation: 5853
For starters make C# Model classes for your REST API output like this:
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; }
}
}
After that get your JSON data from your API by making a GET request like this:
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;
}
}
Finally, after getting the C# model class, just apply LINQ to fetch all your details:
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);
}
}
Upvotes: 2