Esempio n. 1
0
 private void Save(Image image)
 {
     if (image == null)
     {
         return;
     }
     using (PredixContext context = new PredixContext())
     {
         Commentary.Print($"Saving Base64", true);
         context.ImageContents.AddRange(image.Entry.Contents);
         context.Images.Add(image);
         //context.Images.AddOrUpdate(x => x.ImageAssetUid, image);
         context.SaveChanges();
     }
 }
Esempio n. 2
0
        public void MediaOnDemand(ParkingEvent parkingEvent, string imageAssetUid, string timestamp, Customer customer)
        {
            var   media = GetMedia(imageAssetUid, timestamp);
            Image image = new Image {
                PropertyId = parkingEvent.Properties.Id
            };
            var      i         = 1;
            TimeSpan startTime = DateTime.Now.TimeOfDay;

            while (i < 6 && (image?.Entry == null || !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase))))
            {
                i++;
                if (!string.IsNullOrWhiteSpace(media?.PollUrl))
                {
                    Dictionary <string, string> additionalHeaders =
                        new Dictionary <string, string> {
                        { "predix-zone-id", Endpoint.PredixZoneIdForImage }
                    };
                    var response = _predixHttpClient.GetAllAsync(media.PollUrl, additionalHeaders);
                    if (!string.IsNullOrWhiteSpace(response.Result))
                    {
                        try
                        {
                            var jsonRespone = JsonConvert.DeserializeObject <JObject>(response.Result);
                            image = jsonRespone != null
                                ? (jsonRespone).ToObject <Image>()
                                : new Image();
                        }
                        catch (Exception e)
                        {
                            Commentary.Print(e.Message);
                            Commentary.Print(response.Result);
                        }
                    }
                }
                if (image?.Entry == null ||
                    !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase)))
                {
                    Commentary.Print(
                        $"Polling for Media Data {i} time after {DateTime.Now.TimeOfDay.Subtract(startTime).TotalMinutes} minutes: {media.PollUrl}",
                        true);
                    //Thread.Sleep(1000 * 60);
                    if (i < 6)
                    {
                        Task.Delay(1000 * 60).Wait(1000 * 60);
                    }

                    continue;
                }
                var imageBinary = (from content in image.Entry.Contents
                                   let additionalHeaders = new Dictionary <string, string> {
                    { "predix-zone-id", Endpoint.PredixZoneIdForImage }
                }
                                   select _predixHttpClient.GetFile(content.Url, additionalHeaders)
                                   into response
                                   select response.Result).FirstOrDefault();
                image.Base64 = imageBinary;
                image        = MarkPixelCoordinates(parkingEvent: parkingEvent, image: image, customer: customer);
            }
            if (image == null)
            {
                return;
            }
            image.PropertyId    = parkingEvent.Properties.Id;
            image.ImageAssetUid = imageAssetUid;

            image.OriginalBase64 = null;
            image.Base64         = null;

            Save(image);
            //return image.Base64;
        }
Esempio n. 3
0
        public Image MarkPixelCoordinates(ParkingEvent parkingEvent, Image image, Customer customer)
        {
            try
            {
                image.OriginalBase64 = image.Base64;
                if (!string.IsNullOrWhiteSpace(parkingEvent.Properties.PixelCoordinates))
                {
                    //IsBase64(image.Base64);
                    string selectedBase64 = image.Base64.Split(',').ToList <string>()[1];
                    var    bitMapImage    = Base64StringToBitmap(selectedBase64.Trim());
                    var    coordinates    = parkingEvent.Properties.PixelCoordinates.Split(',').ToList();
                    using (var graphics = Graphics.FromImage(bitMapImage))
                    {
                        Pen yellowPen = new Pen(Color.Yellow, 3);
                        try
                        {
                            var a1 = coordinates[0].Split(':').Select(float.Parse).ToList()[0];
                            var a2 = coordinates[0].Split(':').Select(float.Parse).ToList()[1];
                            var b1 = coordinates[1].Split(':').Select(float.Parse).ToList()[0];
                            var b2 = coordinates[1].Split(':').Select(float.Parse).ToList()[1];
                            var c1 = coordinates[2].Split(':').Select(float.Parse).ToList()[0];
                            var c2 = coordinates[2].Split(':').Select(float.Parse).ToList()[1];
                            var d1 = coordinates[3].Split(':').Select(float.Parse).ToList()[0];
                            var d2 = coordinates[3].Split(':').Select(float.Parse).ToList()[1];
                            graphics.DrawPolygon(yellowPen, new PointF[]
                            {
                                new PointF(a1, a2),
                                new PointF(b1, b2),
                                new PointF(c1, c2),
                                new PointF(d1, d2)
                            });
                            // Create font and brush.
                            Font       drawFont  = new Font("Arial", 26);
                            SolidBrush drawBrush = new SolidBrush(Color.White);

                            // Create point for upper-left corner of drawing.
                            PointF drawPoint = new PointF(150.0F, 110.0F);
                            //StringFormat stringFormat = new StringFormat
                            //{
                            //    LineAlignment = StringAlignment.Center,
                            //    Alignment = StringAlignment.Center
                            //};
                            //graphics.DrawString($"Event Id: {parkingEvent.Id}, Asset Uid: {parkingEvent.AssetUid}, Pixel Coordinates {parkingEvent.Properties.PixelCoordinates}",
                            //    drawFont, drawBrush, drawPoint);
                            List <string> writings = new List <string>
                            {
                                $"Event Id: {parkingEvent.Id}",
                                $"In or Out: {parkingEvent.EventType}",
                                $"Local Time: {parkingEvent.Timestamp.ToUtcDateTimeOrNull().ToTimeZone(customer.TimezoneId)} {parkingEvent.EventTime?.ToString("F")}"
                                //$"Location Uid: {parkingEvent.LocationUid}",
                                //$"Asset Uid: {parkingEvent.AssetUid}",
                                //$"Pixel Coordinates {parkingEvent.Properties.PixelCoordinates}"
                            };
                            foreach (var writing in writings)
                            {
                                drawPoint.Y = drawPoint.Y + 40;
                                graphics.DrawString(writing,
                                                    drawFont, drawBrush, drawPoint);
                            }
                        }
                        catch (Exception e)
                        {
                            Commentary.Print(
                                $"Failed to mark pixel coordinates {parkingEvent.Properties.PixelCoordinates} PropertyId {parkingEvent.Properties.Id}");
                            Commentary.Print(e.Message);
                        }
                    }

                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        string randomTempFileName = Path.GetTempPath();
                        if (!Directory.Exists($"{randomTempFileName}CivicSmart\\{DateTime.Now:yyyy-MM-dd}"))
                        {
                            Directory.CreateDirectory($"{randomTempFileName}CivicSmart\\{DateTime.Now:yyyy-MM-dd}");
                        }

                        var fileName =
                            $"{randomTempFileName}CivicSmart\\{DateTime.Now:yyyy-MM-dd}\\geviolation{DateTime.Now.Ticks}.jpg";
                        using (FileStream fs = new FileStream(fileName,
                                                              FileMode.Create, FileAccess.ReadWrite))
                        {
                            Commentary.Print($"Image: {fileName}", true);
                            bitMapImage.Save(memoryStream, ImageFormat.Jpeg);
                            byte[] bytes = memoryStream.ToArray();
                            fs.Write(bytes, 0, bytes.Length);
                            image.Base64 = image.Base64.Split(',').ToList <string>()[0] + "," +
                                           Convert.ToBase64String(bytes);
                            image.ImagePath = fileName.Replace($"{randomTempFileName}CivicSmart", "");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Commentary.Print(
                    $"Failed to convert base64 to Image {image.Base64} PropertyId {parkingEvent.Properties.Id}");
                Commentary.Print(e.Message);
                return(image);
            }

            return(image);
        }