Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
parkpow
GitHub Repository: parkpow/deep-license-plate-recognition
Path: blob/master/csharp/Program.cs
641 views
namespace csharp;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{
    static async Task makeRequest(String url, String token, String filePath, String regions, String cameraId, bool uploadBase64)
    {
        using (var httpClient = new HttpClient())
        {
            var formData = new MultipartFormDataContent();
            string fileName = Path.GetFileName(filePath);
            byte[] fileBytes = File.ReadAllBytes(filePath);

            if(uploadBase64){
                string base64String = Convert.ToBase64String(fileBytes);
                formData.Add(new StringContent(base64String), "upload");
            }else{
                formData.Add(new ByteArrayContent(fileBytes), "upload", fileName );
            }

            if (regions!=null)
            {
                formData.Add(new StringContent(regions), "regions");

            }

            // formData.Add(new StringContent("{\"region\":\"strict\"}"), "config");
            // formData.Add(new StringContent("true"), "mmc");
            if(cameraId!=null){
                formData.Add(new StringContent(cameraId), "camera_id");
            }
            if(token!=null){
                httpClient.DefaultRequestHeaders.Add("Authorization", $"Token {token}");
            }

            var response = await httpClient.PostAsync(url, formData);

            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Upload success");
            }
            else
            {
                Console.WriteLine($"HTTP Error: {response.StatusCode}");
            }
            var responseBody = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseBody);
        }

    }
    static Dictionary<string, string> ParseArguments(string[] args)
    {
        var arguments = new Dictionary<string, string>();

        foreach (var arg in args)
        {
            // Split the argument by '=' to handle key/value pairs
            string[] parts = arg.Split('=');

            // Check if the argument is in the format "key=value"
            if (parts.Length == 2)
            {
                arguments[parts[0]] = parts[1];
            }
            // If not, assume it's just a named argument without a value
            else
            {
                arguments[arg] = null;
            }
        }

        return arguments;
    }

    static void PrintHelp()
    {
        Console.WriteLine("Help:");
        Console.WriteLine("------");
        Console.WriteLine("Usage: PlateRecognition [options]");
        Console.WriteLine();
        Console.WriteLine("Options:");
        Console.WriteLine("  --help             Display this help message");
        Console.WriteLine("  --base64           Encode Image as Base64");
        Console.WriteLine("  --token            Specify Token");
        Console.WriteLine("  --url              Specify SDK URL");
        Console.WriteLine("  --regions          Specify Regions");
        Console.WriteLine("  --camera           Specify camera ID");
        Console.WriteLine("  --file=<file>      Set file path to upload.");
    }

    static async Task Main(string[] args)
    {
        var arguments = ParseArguments(args);
        if (arguments.Count == 0 || arguments.ContainsKey("--help"))
        {
            PrintHelp();
            return;
        }

        if(!arguments.ContainsKey("--file")){
            Console.WriteLine("--file Is required");
            PrintHelp();
            return;
        }
        String filePath = arguments["--file"];

        string regions;
        string cameraId;
        string token;
        String sdkUrl = "https://api.platerecognizer.com/v1/plate-reader/";


        if(!arguments.TryGetValue("--token", out token)){
            if(!arguments.TryGetValue("--url", out sdkUrl)){
                Console.WriteLine("Please specify --token or onPremise --url");
                PrintHelp();
                return;
            }
        }

        if(!arguments.TryGetValue("--regions", out regions)){
            Console.WriteLine("No regions specified");
        }

        if(!arguments.TryGetValue("--camera", out cameraId)){
            Console.WriteLine("No cameraId specified");
        }

        bool uploadBase64 = arguments.ContainsKey("--base64");


        await Program.makeRequest(
            sdkUrl,
            token,
            filePath,
            regions,
            cameraId,
            uploadBase64
        );

    }

}