Exemplo n.º 1
0
            public override Task <ImageReply> RequestImage(ImageRequest request, ServerCallContext context)
            {
                // Start the callback task before responding
                ImageReply result = callback(request);

                return(Task.FromResult(result));
            }
        /// <summary>
        ///
        /// </summary>
        /// <param name="image"></param>
        /// <returns>Null on error</returns>
        public List <ImageFeature> Process(ByteString image)
        {
            bool succeeded = false;

            try
            {
                List <ImageFeature> result = new List <ImageFeature>();
                EnsureConnection();
                ImageBody body = new ImageBody
                {
                    Image = image
                };
                ImageReply reply = grpcClient.SubmitImage(body);
                for (int i = 0; i < reply.Classes.Count; i++)
                {
                    ImageFeature feature = new ImageFeature(reply.Classes[i], reply.Scores[i],
                                                            reply.Boxes[i].YMin, reply.Boxes[i].XMin, reply.Boxes[i].YMax, reply.Boxes[i].XMax);
                    result.Add(feature);
                }
                succeeded = true;
                return(result);
            }
            catch (Grpc.Core.RpcException ex)
            {
                if (ex.StatusCode == StatusCode.Unavailable)
                {
                    Console.WriteLine($"Error sending grpc message: Grpc server for FPGA is unavailable");
                    return(null);
                }
                else
                {
                    Console.WriteLine($"Error sending grpc for FPGA message");
                    Console.WriteLine(ex);
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending grpc for FPGA message");
                Console.WriteLine(ex);
                return(null);
            }
            finally
            {
                if (!succeeded)
                {
                    Disconnect();
                }
            }
        }
        /// <summary>
        /// Request an image from the camera server
        /// </summary>
        /// <param name="body"></param>
        /// <returns>True for success</returns>
        private ImageReply RequestImage(ImageRequest body)
        {
            bool succeeded = false;

            try
            {
                EnsureConnection();
                ImageReply result = grpcClient.RequestImage(body);
                if (result.Error != string.Empty)
                {
                    Console.WriteLine($"Error returned from CameraServer: {result.Error}");
                    return(null);
                }
                else
                {
                    succeeded = true;
                    return(result);
                }
            }
            catch (Grpc.Core.RpcException ex)
            {
                if (ex.StatusCode == StatusCode.Unavailable)
                {
                    Console.WriteLine($"Error sending grpc message: CameraServer gRPC is unavailable");
                    return(null);
                }
                else
                {
                    Console.WriteLine($"Error sending CameraServer gRPC message");
                    Console.WriteLine(ex);
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending CameraServer gRPC message");
                Console.WriteLine(ex);
                return(null);
            }
            finally
            {
                if (!succeeded)
                {
                    ((IImageSource)this).Disconnect();
                }
            }
        }
        VideoProcessorGrpc.ImageBody IImageSource.RequestImages()
        {
            ImageRequest request = new ImageRequest()
            {
                CameraHardwareId = HardwareId
            };
            ImageReply reply = RequestImage(request);

            if (reply != null)
            {
                VideoProcessorGrpc.ImageBody result = new VideoProcessorGrpc.ImageBody()
                {
                    Image      = reply.FullImage,
                    SmallImage = reply.SmallImage
                };
                return(result);
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// Upload an image
        /// </summary>
        /// <param name="request"></param>
        /// <returns>True for success</returns>
        public ImageReply RequestImage(ImageRequest request)
        {
            ImageReply result = null;

            try
            {
                EnsureConnection();
                result = grpcClient.RequestImage(request);
            }
            catch (Grpc.Core.RpcException ex)
            {
                if (ex.StatusCode == StatusCode.Unavailable)
                {
                    Console.WriteLine($"Error sending grpc message: Grpc server is unavailable");
                    result = null;
                }
                else
                {
                    Console.WriteLine($"Error sending grpc message");
                    Console.WriteLine(ex);
                    result = null;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending grpc message");
                Console.WriteLine(ex);
                result = null;
            }
            finally
            {
                if (result == null)
                {
                    Disconnect();
                }
            }
            return(result);
        }