public static async Task <SignalRMessage> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log, ExecutionContext context) { log.LogInformation("C# HTTP trigger function processed a request to analyze image."); var ms = new MemoryStream(); await req.Body.CopyToAsync(ms); var imageBytes = ms.ToArray(); var identified = await FaceConnector.AnalyzeImageAsync(imageBytes, GetConfig(log, context)); identified.ToList().ForEach(_ => { log.LogInformation(_.UserData); }); dynamic data = new ExpandoObject(); var message = new SignalRMessage { Target = "ImageAnalyzed" }; var content = new AnalyzeResult { NrFound = identified.Count(), Users = identified.Select(_ => _.UserData).ToList() }; data.result = content; message.Arguments = new object[] { data }; return(message); }
public void Add(FaceConnector element) { if (last != null) { last.Next = element; } element.Previous = last; last = element; if (First == null) { First = element; } }
public static bool AreConnectable(FaceConnector a, FaceConnector b, int dim) { if (a.HashCode != b.HashCode) { return(false); } int[] vertices = a.Vertices; int[] vertices2 = b.Vertices; for (int i = 0; i < vertices.Length; i++) { if (vertices[i] != vertices2[i]) { return(false); } } return(true); }
/// <summary> /// Can two faces be connected. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="dim"></param> /// <returns></returns> public static bool AreConnectable(FaceConnector a, FaceConnector b, int dim) { if (a.HashCode != b.HashCode) { return(false); } var av = a.Vertices; var bv = b.Vertices; for (int i = 0; i < av.Length; i++) { if (av[i] != bv[i]) { return(false); } } return(true); }
/// <summary> /// Connect faces using a connector. /// </summary> /// <param name="connector"></param> void ConnectFace(FaceConnector connector) { var index = connector.HashCode % ConnectorTableSize; var list = ConnectorTable[index]; for (var current = list.First; current != null; current = current.Next) { if (FaceConnector.AreConnectable(connector, current, Dimension)) { list.Remove(current); FaceConnector.Connect(current, connector); current.Face = null; connector.Face = null; ObjectManager.DepositConnector(current); ObjectManager.DepositConnector(connector); return; } } list.Add(connector); }
public void Remove(FaceConnector connector) { if (connector.Previous != null) { connector.Previous.Next = connector.Next; } else if (connector.Previous == null) { First = connector.Next; } if (connector.Next != null) { connector.Next.Previous = connector.Previous; } else if (connector.Next == null) { last = connector.Previous; } connector.Next = null; connector.Previous = null; }
/// <summary> /// Connect two faces. /// </summary> /// <param name="a"></param> /// <param name="b"></param> public static void Connect(FaceConnector a, FaceConnector b) { a.Face.AdjacentFaces[a.EdgeIndex] = b.Face.Index; b.Face.AdjacentFaces[b.EdgeIndex] = a.Face.Index; }
public void DepositConnector(FaceConnector connector) { ConnectorStack.Push(connector); }
/// <summary> /// Removes the element from the list. /// </summary> /// <param name="connector"></param> public void Remove(FaceConnector connector) { if (connector.Previous != null) { connector.Previous.Next = connector.Next; } else if (/*first == face*/ connector.Previous == null) { this.first = connector.Next; } if (connector.Next != null) { connector.Next.Previous = connector.Previous; } else if (/*last == face*/ connector.Next == null) { this.last = connector.Previous; } connector.Next = null; connector.Previous = null; }
/// <summary> /// Adds a face to the list. /// </summary> /// <param name="element"></param> public void Add(FaceConnector element) { if (this.last != null) { this.last.Next = element; } element.Previous = this.last; this.last = element; if (this.first == null) { this.first = element; } }
/// <summary> /// Adds the element to the beginning. /// </summary> /// <param name="connector"></param> void AddFirst(FaceConnector connector) { this.first.Previous = connector; connector.Next = this.first; this.first = connector; }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { if (activity.Type == ActivityTypes.Message) { ConnectorClient connector = null; try { connector = new ConnectorClient(new Uri(activity.ServiceUrl)); // calculate something for us to return var faceTraits = new List <Trait>(); // return our reply to the user if (activity.Attachments.Count == 1) { FaceConnector faceConnector = new FaceConnector(); var faces = await faceConnector.UploadAndDetectFaces(activity); if (faces.Length > 0) { faceTraits = FaceAnalizer.GetTraitsFromFace(faces[0]); } else { await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("You're so dumb, you can't even take a selfie")); return(Request.CreateResponse(HttpStatusCode.OK));; } var jokeService = new JokeService(); var joke = jokeService.GetJoke(faceTraits); Activity reply = activity.CreateReply(joke); await connector.Conversations.ReplyToActivityAsync(reply); } else { JObject r = await WatsonService.TalkToWatson(activity.Text, activity.Conversation.Id); Dictionary <string, double> map = new Dictionary <string, double>(); foreach (JObject entity in r["entities"]) { map[entity["value"].Value <string>()] = entity["confidence"].Value <double>(); } if (map.Keys.Count > 0) { var jokeService = new JokeService(); var joke = jokeService.GetJoke(new List <Trait> { new Trait { Name = map.Keys.First(), Accuracy = 1.0 } }); Activity reply = activity.CreateReply($"{joke}"); await connector.Conversations.ReplyToActivityAsync(reply); } //var entities = ((IEnumerable<object>)r.Result).ToList()[1]; // var replyText = ((Newtonsoft.Json.Linq.JProperty )entities); } // faceConnector.UploadAndDetectFaces(activity.Attachments) } catch (Exception ex) { if (connector != null) { Activity reply = activity.CreateReply(ex.Message); await connector.Conversations.ReplyToActivityAsync(reply); } } } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }
private void AddFirst(FaceConnector connector) { First.Previous = connector; connector.Next = First; First = connector; }