/// <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(); } } }
public List <ImageFeature> Process(Google.Protobuf.ByteString image) { string imageJson = MakeImageJson(image); if (imageJson != null) { CpuModelResponse response = InvokeCpuModel(imageJson); if (response != null) { List <ImageFeature> result = new List <ImageFeature>(); for (int i = 0; i < response.classes.Length; i++) { ImageFeature feature = new ImageFeature(response.classes[i], response.scores[i], response.bboxes[i]); result.Add(feature); } return(result); } } return(null); }