public void RequestWeightedSimilarAndThen(SimilarQuery query, CategoryRatio ratio, Action <List <MultimediaObject> > handler) { logger.Debug("RequestWeightedSimilarAndThen"); queryFinishedCallback = handler; StartCoroutine(ExecuteMultiQuery(query, ratio)); }
public void SendQueryRequest() { CollectTimeTerm(); List <TermsObject> terms = new List <TermsObject>(); if (locationTerm != null) { terms.Add(locationTerm); } if (exampleTerm != null) { terms.Add(exampleTerm); } if (timeTerm != null) { terms.Add(timeTerm); } SimilarQuery query = QueryFactory.BuildMultiTermQuery(terms.ToArray()); controller.GoMultiTermQuery(query); }
/// <summary> /// Performs an asynchronous request based on the similarity query provided. /// </summary> /// <param name="query">The query to query cineast</param> /// <param name="handler">The handler for handling success / failure</param> public void RequestAsync(SimilarQuery query, CineastResponseHandler <List <MultimediaObject> > handler) { Guid guid = new Guid(); _guidHandlerMap.Add(guid.ToString(), handler); StartCoroutine(ExecuteQuery(query, guid.ToString())); }
public void GoQuery(SimilarQuery query) { logger.Debug("GoQuery"); ChangeState(State.CINEAST_REQUEST); Clean(); ResetSession(); cineast.RequestSimilarAndThen(query, HandleCineastResult); }
public void GoMultiTermQuery(SimilarQuery query) { logger.Debug("GoMultiQuery"); ChangeState(State.CINEAST_REQUEST); Clean(); ResetSession(); uiManager.panelManager.ShowPanel("waiting"); CategoryRatio cr = CineastUtils.CreateUniformRatio(query); logger.Debug("Ratios: " + cr.ToString()); cineast.RequestWeightedSimilarAndThen(query, cr, HandleCineastResult); }
public void CreateAndPassQuery() { logger.Debug("CreateAndPassQuery"); controller.uiManager.panelManager.ShowPanel("waiting"); SimilarQuery spatialQuery = null; if (TargetLocation != null) { logger.Debug("Found spatial input, building spatial query"); spatialQuery = QueryFactory.BuildSpatialSimilarQuery(TargetLocation.latitude, TargetLocation.longitude); } SimilarQuery temporalQuery = null; logger.Debug("Start and End time input s:{0}, e:{1}", startInput.text, endInput.text); if (!string.IsNullOrEmpty(startInput.text)) { int lower = int.Parse(startInput.text); int upper = !string.IsNullOrEmpty(endInput.text) ? int.Parse(endInput.text) : 9990; controller.SetTemporalRange(lower, upper); logger.Debug("Found at least start input, building termporal query"); temporalQuery = QueryFactory.BuildTemporalSimilarQuery(ConvertYearToISO8601((lower + upper) / 2)); /*if (spatialQuery != null) * { * temporalQuery.With(spatialQuery); * }*/ } logger.Debug("Sending query to controller"); if (temporalQuery != null) { controller.GoQuery(temporalQuery); } else { if (maxDistProvider.IsModified()) { controller.SetMaxDistance(maxDistProvider.GetMaxDistance()); } controller.GoQuery(spatialQuery); } }
public static CategoryRatio CreateUniformRatio(SimilarQuery query) { CategoryRatio cr = new CategoryRatio(); List <string> categories = new List <string>(); foreach (TermContainer tc in query.containers) { foreach (TermsObject to in tc.terms) { categories.AddRange(to.categories); } } foreach (string category in categories) { cr.AddWeight(category, 1d / categories.Count); } return(cr); }
public static WWW BuildSimilarRequest(string url, string utcTime) { SimilarQuery sq = QueryFactory.BuildTemporalSimilarQuery(utcTime); return(GenerateJSONPostRequest(url, JsonUtility.ToJson(sq))); }
/** * Builds a SimilarQuery and sends a request to the specified url. * * @param url - The url to the server * @param lat - The latitude of the query * @param lon - The longitude of the query */ public static WWW BuildSimilarRequest(string url, double lat, double lon) { SimilarQuery sQuery = QueryFactory.BuildSpatialSimilarQuery(lat, lon); return(GenerateJSONPostRequest(url, JsonUtility.ToJson(sQuery))); }
private IEnumerator ExecuteMultiQuery(SimilarQuery query, CategoryRatio ratio) { // === SIMILAR === // Initial SimilarQuery yield return(similarRequest = CineastUtils.BuildSimilarRequest(CineastUtils.Configuration.FindSimilarSegmentsUrl(), query)); // Parse response earlyBreak = !Parse(similarRequest.text, out similarResult); yield return(similarResult); if (earlyBreak) { yield break; } // Check if empty if (similarResult.IsEmpty()) { earlyBreak = true; yield break; // Stop and } ContentObject[] tempResult = CineastUtils.ExtractContentObjects(similarResult); if (ratio != null && similarResult.results.Length > 1) { foreach (ResultObject ro in similarResult.results) { ContentObject.ArrayToStrig(ro.content); } ResultMerger merger = new ResultMerger(); tempResult = merger.Merge(similarResult.results, ratio) .ToArray(); ContentObject.ArrayToStrig(tempResult); } // === SEGMENTS === // segments yield return(segmentRequest = CineastUtils.BuildSegmentRequest(CineastUtils.Configuration.FindSegmentsByIdUrl(), CineastUtils.ExtractIdArray(tempResult))); // parse response earlyBreak = !Parse(segmentRequest.text, out segmentResult); yield return(segmentResult); if (earlyBreak) { yield break; } // === METAS === yield return(metaRequest = CineastUtils.BuildMetadataRequest(CineastUtils.Configuration.FindMetadataUrl(), CineastUtils.ExtractIdArray(segmentResult.content))); earlyBreak = !Parse(metaRequest.text, out metaResult); yield return(metaResult); if (earlyBreak) { yield break; } // meta->mmo objectList = CineastUtils.Convert(metaResult.content); // === OBJECTS === yield return(objectRequest = CineastUtils.BuildObjectsRequest(CineastUtils.Configuration.FindObjectsUrl(), CineastUtils.ExtractIdArray(objectList.ToArray()))); yield return(objectsResult = JsonUtility.FromJson <ObjectsResult>(objectRequest.text)); // merge results List <MultimediaObject> objects = CineastUtils.Convert(objectsResult.content); foreach (MultimediaObject mmo in objects) { if (objectList.Contains(mmo)) { objectList.Find(o => o.Equals(mmo)).Merge(mmo); } } results = new List <MultimediaObject>(objectList); // === WRAPUP === foreach (MultimediaObject mmo in objectList) { mmo.resultIndex = CineastUtils.GetIndexOf(mmo, similarResult) + 1; } // === SORT LIST === objectList.Sort( Comparison); List <MultimediaObject> transferList; if (filterEngine != null) { transferList = filterEngine.ApplyFilters(objectList); } else { transferList = objectList; } // cleanup finished = true; if (queryFinishedCallback != null) { queryFinishedCallback.Invoke(transferList); } yield return(true); }
public void RequestSimilarAndThen(SimilarQuery query, Action <List <MultimediaObject> > handler) { queryFinishedCallback = handler; StartCoroutine(ExecuteQuery(query)); }
private IEnumerator ExecuteQuery(SimilarQuery query, string guid = null) { // === SIMILAR === // Initial SimilarQuery // logger.Debug("Starting initial similar request.\n" + JsonUtility.ToJson(query)); yield return(similarRequest = CineastUtils.BuildSimilarRequest(CineastUtils.Configuration.FindSimilarSegmentsUrl(), query)); // logger.Debug("Received similar response: " + similarRequest.text); // Parse response earlyBreak = !Parse(similarRequest.text, out similarResult); yield return(similarResult); if (earlyBreak) { // logger.Error("HTTP error upon similar response"); yield break; } // logger.Info("Successfully parsed similar response"); // Check if empty if (similarResult.IsEmpty()) { earlyBreak = true; // logger.Error("Empty similar result"); yield break; // Stop and } // === SEGMENTS === // segments // logger.Debug("Starting segments query"); yield return(segmentRequest = CineastUtils.BuildSegmentRequest(CineastUtils.Configuration.FindSegmentsByIdUrl(), CineastUtils.ExtractIdArray(CineastUtils.ExtractContentObjects(similarResult)))); // logger.Debug("Received segments response:\n" + segmentRequest.text); // parse response earlyBreak = !Parse(segmentRequest.text, out segmentResult); yield return(segmentResult); if (earlyBreak) { // logger.Error("HTTP error upon segments response"); yield break; } // logger.Info("Successfully parsed segments response"); // === METAS === // logger.Debug("Starting metadata request"); yield return(metaRequest = CineastUtils.BuildMetadataRequest(CineastUtils.Configuration.FindMetadataUrl(), CineastUtils.ExtractIdArray(segmentResult.content))); // logger.Debug("Received metadata response:\n" + metaRequest.text); earlyBreak = !Parse(metaRequest.text, out metaResult); yield return(metaResult); if (earlyBreak) { // logger.Error("HTTP error upon metadata response"); yield break; } // logger.Info("Successfully parsed metadata response"); // meta->mmo objectList = CineastUtils.Convert(metaResult.content); // logger.Info("Successfully converted metadata result to MultimediaObjects"); // === OBJECTS === // logger.Debug("Starting object query"); yield return(objectRequest = CineastUtils.BuildObjectsRequest(CineastUtils.Configuration.FindObjectsUrl(), CineastUtils.ExtractIdArray(objectList.ToArray()))); // logger.Debug("Received objects response:\n" + objectRequest.text); yield return(objectsResult = JsonUtility.FromJson <ObjectsResult>(objectRequest.text)); // logger.Info("Successfully parsed objects response"); // merge results List <MultimediaObject> objects = CineastUtils.Convert(objectsResult.content); // logger.Debug("Successfully converted object result to MultimediaObjects"); foreach (MultimediaObject mmo in objects) { if (objectList.Contains(mmo)) { objectList.Find(o => o.Equals(mmo)).Merge(mmo); } } // logger.Info("Finished merging different MultimediaObject lists"); results = new List <MultimediaObject>(objectList); // === WRAPUP === // logger.Debug("Applying result index to MultimediaObject list"); foreach (MultimediaObject mmo in objectList) { mmo.resultIndex = CineastUtils.GetIndexOf(mmo, similarResult) + 1; } // logger.Info("Result contains " + objectList.Count + " entities"); // logger.Debug("Full result list:\n" + DumpMMOList(objectList)); // === SORT LIST === // logger.Debug("Sorting list"); objectList.Sort( Comparison); // logger.Debug("Sorted list: \n" + DumpMMOList(objectList)); List <MultimediaObject> transferList; if (filterEngine != null) { // logger.Debug("FilterEngine installed with " + filterEngine.GetFilterCount() + " filters."); transferList = filterEngine.ApplyFilters(objectList); } else { // logger.Debug("No FilterEngine installed - no filtering"); transferList = objectList; } // cleanup finished = true; if (guid == null) { // LEGACY if (queryFinishedCallback != null) { // logger.Info("Query completed, passing resulting MultimediaObject list to callback"); queryFinishedCallback.Invoke(transferList); } } else { CineastResponseHandler <List <MultimediaObject> > handler = _guidHandlerMap[guid]; if (handler != null) { handler.onSuccess(transferList); } } yield return(true); }
public void RequestSimilarThanMasterpiece(SimilarQuery query, Action <List <MultimediaObject> > handler) { queryFinishedCallback = handler; StartCoroutine(ExecuteQueryMoreLikeMasterpiece(query)); }
/* * Query For Masteroiece ( Draw picture) */ private IEnumerator ExecuteQueryMoreLikeMasterpiece(SimilarQuery query) { // Since api is used several times it has to be set false on call finished = false; // === SIMILAR === // Initial SimilarQuery yield return(similarRequest = CineastUtils.BuildSimilarRequest(CineastUtils.Configuration.FindSimilarSegmentsUrl(), query)); // Parse response earlyBreak = !Parse(similarRequest.text, out similarResult); yield return(similarResult); if (earlyBreak) { yield break; } // Check if empty if (similarResult.IsEmpty()) { earlyBreak = true; yield break; // Stop and } // === SEGMENTS === // segments yield return(segmentRequest = CineastUtils.BuildSegmentRequest(CineastUtils.Configuration.FindSegmentsByIdUrl(), CineastUtils.ExtractIdArray(CineastUtils.ExtractContentObjects(similarResult)))); // parse response earlyBreak = !Parse(segmentRequest.text, out segmentResult); yield return(segmentResult); if (earlyBreak) { yield break; } yield return(objectRequest = CineastUtils.BuildObjectsRequest(CineastUtils.Configuration.FindObjectsUrl(), CineastUtils.ExtractIdArray(segmentResult.content))); yield return(objectsResult = JsonUtility.FromJson <ObjectsResult>(objectRequest.text)); objectList = CineastUtils.Convert(objectsResult.content); // merge results var objects = CineastUtils.Convert(objectsResult.content); foreach (var mmo in objects) { if (objectList.Contains(mmo)) { objectList.Find(o => o.Equals(mmo)).Merge(mmo); } } results = new List <MultimediaObject>(objectList); // === WRAPUP === foreach (var mmo in objectList) { mmo.resultIndex = CineastUtils.GetIndexOf(mmo, similarResult) + 1; } // === SORT LIST === objectList.Sort( Comparison); List <MultimediaObject> transferList; if (filterEngine != null) { transferList = filterEngine.ApplyFilters(objectList); } else { transferList = objectList; } // cleanup finished = true; if (queryFinishedCallback != null) { queryFinishedCallback.Invoke(transferList); } yield return(true); }
private IEnumerator ExecuteMultiQuery(SimilarQuery query, CategoryRatio ratio) { // === SIMILAR === // Initial SimilarQuery logger.Debug("Starting initial similar request.\n" + JsonUtility.ToJson(query)); yield return(similarRequest = CineastUtils.BuildSimilarRequest(CineastUtils.Configuration.FindSimilarSegmentsUrl(), query)); logger.Debug("Received similar response: " + similarRequest.text); // Parse response earlyBreak = !Parse(similarRequest.text, out similarResult); yield return(similarResult); if (earlyBreak) { logger.Error("HTTP error upon similar response"); yield break; } logger.Info("Successfully parsed similar response"); // Check if empty if (similarResult.IsEmpty()) { earlyBreak = true; logger.Error("Empty similar result"); yield break; // Stop and } ContentObject[] tempResult = CineastUtils.ExtractContentObjects(similarResult); if (ratio != null && similarResult.results.Length > 1) { logger.Debug("Merging..."); foreach (ResultObject ro in similarResult.results) { logger.Debug("Result for category {0} contains {1} entries.\n\t{2}", ro.category, ro.content.Length, ContentObject.ArrayToStrig(ro.content)); } ResultMerger merger = new ResultMerger(); tempResult = merger.Merge(similarResult.results, ratio) .ToArray(); logger.Debug("After merge: {0} unique entries\n\t{1}", tempResult.Length, ContentObject.ArrayToStrig(tempResult)); } // === SEGMENTS === // segments logger.Debug("Starting segments query"); yield return(segmentRequest = CineastUtils.BuildSegmentRequest(CineastUtils.Configuration.FindSegmentsByIdUrl(), CineastUtils.ExtractIdArray(tempResult))); logger.Debug("Received segments response:\n" + segmentRequest.text); // parse response earlyBreak = !Parse(segmentRequest.text, out segmentResult); yield return(segmentResult); if (earlyBreak) { logger.Error("HTTP error upon segments response"); yield break; } logger.Info("Successfully parsed segments response"); // === METAS === logger.Debug("Starting metadata request"); yield return(metaRequest = CineastUtils.BuildMetadataRequest(CineastUtils.Configuration.FindMetadataUrl(), CineastUtils.ExtractIdArray(segmentResult.content))); logger.Debug("Received metadata response:\n" + metaRequest.text); earlyBreak = !Parse(metaRequest.text, out metaResult); yield return(metaResult); if (earlyBreak) { logger.Error("HTTP error upon metadata response"); yield break; } logger.Info("Successfully parsed metadata response"); // meta->mmo objectList = CineastUtils.Convert(metaResult.content); logger.Info("Successfully converted metadata result to MultimediaObjects"); // === OBJECTS === logger.Debug("Starting object query"); yield return(objectRequest = CineastUtils.BuildObjectsRequest(CineastUtils.Configuration.FindObjectsUrl(), CineastUtils.ExtractIdArray(objectList.ToArray()))); logger.Debug("Received objects response:\n" + objectRequest.text); yield return(objectsResult = JsonUtility.FromJson <ObjectsResult>(objectRequest.text)); logger.Info("Successfully parsed objects response"); // merge results List <MultimediaObject> objects = CineastUtils.Convert(objectsResult.content); logger.Debug("Successfully converted object result to MultimediaObjects"); foreach (MultimediaObject mmo in objects) { if (objectList.Contains(mmo)) { objectList.Find(o => o.Equals(mmo)).Merge(mmo); } } logger.Info("Finished merging different MultimediaObject lists"); results = new List <MultimediaObject>(objectList); // === WRAPUP === logger.Debug("Applying result index to MultimediaObject list"); foreach (MultimediaObject mmo in objectList) { mmo.resultIndex = CineastUtils.GetIndexOf(mmo, similarResult) + 1; } logger.Info("Result contains " + objectList.Count + " entities"); logger.Debug("Full result list:\n" + DumpMMOList(objectList)); // === SORT LIST === logger.Debug("Sorting list"); objectList.Sort( Comparison); logger.Debug("Sorted list: \n" + DumpMMOList(objectList)); List <MultimediaObject> transferList; if (filterEngine != null) { logger.Debug("FilterEngine installed with " + filterEngine.GetFilterCount() + " filters."); transferList = filterEngine.ApplyFilters(objectList); } else { logger.Debug("No FilterEngine installed - no filtering"); transferList = objectList; } // cleanup finished = true; if (queryFinishedCallback != null) { logger.Info("Query completed, passing resulting MultimediaObject list to callback"); queryFinishedCallback.Invoke(transferList); } yield return(true); }
public static WWW BuildSimilarRequest(string url, SimilarQuery query) { return(GenerateJSONPostRequest(url, JsonUtility.ToJson(query))); }
private IEnumerator ExecuteMultiQuery(SimilarQuery query, CategoryRatio ratio, string guid = null) { // === SIMILAR === // Initial SimilarQuery yield return(similarRequest = CineastUtils.BuildSimilarRequest(CineastUtils.Configuration.FindSimilarSegmentsUrl(), query)); // Parse response earlyBreak = !Parse(similarRequest.text, out similarResult); yield return(similarResult); if (earlyBreak) { yield break; } // Check if empty if (similarResult.IsEmpty()) { earlyBreak = true; yield break; // Stop and } ContentObject[] tempResult = CineastUtils.ExtractContentObjects(similarResult); if (ratio != null && similarResult.results.Length > 1) { ResultMerger merger = new ResultMerger(); tempResult = merger.Merge(similarResult.results, ratio) .ToArray(); } // === SEGMENTS === // segments yield return(segmentRequest = CineastUtils.BuildSegmentRequest(CineastUtils.Configuration.FindSegmentsByIdUrl(), CineastUtils.ExtractIdArray(tempResult))); // parse response earlyBreak = !Parse(segmentRequest.text, out segmentResult); yield return(segmentResult); if (earlyBreak) { yield break; } // === METAS === yield return(metaRequest = CineastUtils.BuildMetadataRequest(CineastUtils.Configuration.FindMetadataUrl(), CineastUtils.ExtractIdArray(segmentResult.content))); earlyBreak = !Parse(metaRequest.text, out metaResult); yield return(metaResult); if (earlyBreak) { yield break; } // meta->mmo objectList = CineastUtils.Convert(metaResult.content); // === OBJECTS === yield return(objectRequest = CineastUtils.BuildObjectsRequest(CineastUtils.Configuration.FindObjectsUrl(), CineastUtils.ExtractIdArray(objectList.ToArray()))); yield return(objectsResult = JsonUtility.FromJson <ObjectsResult>(objectRequest.text)); // merge results List <MultimediaObject> objects = CineastUtils.Convert(objectsResult.content); foreach (MultimediaObject mmo in objects) { if (objectList.Contains(mmo)) { objectList.Find(o => o.Equals(mmo)).Merge(mmo); } } results = new List <MultimediaObject>(objectList); // === WRAPUP === foreach (MultimediaObject mmo in objectList) { mmo.resultIndex = CineastUtils.GetIndexOf(mmo, similarResult) + 1; } // === SORT LIST === objectList.Sort(Comparison); List <MultimediaObject> transferList; if (filterEngine != null) { // logger.Debug("FilterEngine installed with " + filterEngine.GetFilterCount() + " filters."); transferList = filterEngine.ApplyFilters(objectList); } else { // logger.Debug("No FilterEngine installed - no filtering"); transferList = objectList; } // cleanup finished = true; if (guid == null) { // LEGACY if (queryFinishedCallback != null) { // logger.Info("Query completed, passing resulting MultimediaObject list to callback"); queryFinishedCallback.Invoke(transferList); } } else { CineastResponseHandler <List <MultimediaObject> > handler = _guidHandlerMap[guid]; if (handler != null) { handler.onSuccess(transferList); } } yield return(true); }
public void With(SimilarQuery query) { TermContainer[] tc = new[] { containers[0], query.containers[0] }; containers = tc; }