use of org.vitrivr.cineast.core.data.score.ScoreElement in project cineast by vitrivr.
the class AudioFingerprint method postprocessQuery.
/**
* This method represents the last step that's executed when processing a query. A list of partial-results (DistanceElements) returned by the lookup stage is processed based on some internal method and finally converted to a list of ScoreElements. The filtered list of ScoreElements is returned by the feature module during retrieval.
*
* @param partialResults List of partial results returned by the lookup stage.
* @param qc A ReadableQueryConfig object that contains query-related configuration parameters.
* @return List of final results. Is supposed to be de-duplicated and the number of items should not exceed the number of items per module.
*/
@Override
protected List<ScoreElement> postprocessQuery(List<SegmentDistanceElement> partialResults, ReadableQueryConfig qc) {
/* Prepare empty list of results. */
final ArrayList<ScoreElement> results = new ArrayList<>();
final HashMap<String, DistanceElement> map = new HashMap<>();
/* Merge into map for final results; select the minimum distance. */
for (DistanceElement result : partialResults) {
map.merge(result.getId(), result, (d1, d2) -> {
if (d1.getDistance() > d2.getDistance()) {
return d2;
} else {
return d1;
}
});
}
/* Return immediately if no partial results are available. */
if (map.isEmpty()) {
return results;
}
/* Prepare final results. */
final CorrespondenceFunction fkt = qc.getCorrespondenceFunction().orElse(this.correspondence);
map.forEach((key, value) -> results.add(value.toScore(fkt)));
return ScoreElement.filterMaximumScores(results.stream());
}
use of org.vitrivr.cineast.core.data.score.ScoreElement in project cineast by vitrivr.
the class AverageColorRaster method getSimilar.
private List<ScoreElement> getSimilar(float[] raster, float[] hist, ReadableQueryConfig rqc) {
final int limit = rqc.getResultsPerModule();
final QueryConfig qc = new QueryConfig(rqc).setDistanceIfEmpty(Distance.chisquared);
List<Map<String, PrimitiveTypeProvider>> rows = this.selector.getNearestNeighbourRows(limit * 5, hist, "hist", qc);
ArrayList<ScoreElement> scores = new ArrayList<>(rows.size());
for (Map<String, PrimitiveTypeProvider> map : rows) {
String id = map.get(GENERIC_ID_COLUMN_QUALIFIER).getString();
double score = register(raster, map.get("raster").getFloatArray());
scores.add(new SegmentScoreElement(id, score));
}
scores.sort(ScoreElement.SCORE_COMPARATOR.reversed());
if (scores.size() > limit) {
return scores.subList(0, limit);
} else {
return scores;
}
}
use of org.vitrivr.cineast.core.data.score.ScoreElement in project cineast by vitrivr.
the class HPCPShingle method postprocessQuery.
/**
* This method represents the last step that's executed when processing a query. A list of partial-results (DistanceElements) returned by the lookup stage is processed based on some internal method and finally converted to a list of ScoreElements. The filtered list of ScoreElements is returned by the feature module during retrieval.
*
* @param partialResults List of partial results returned by the lookup stage.
* @param qc A ReadableQueryConfig object that contains query-related configuration parameters.
* @return List of final results. Is supposed to be de-duplicated and the number of items should not exceed the number of items per module.
*/
@Override
protected List<ScoreElement> postprocessQuery(List<SegmentDistanceElement> partialResults, ReadableQueryConfig qc) {
/* Prepare helper data-structures. */
final HashMap<String, DistanceElement> map = new HashMap<>();
for (DistanceElement hit : partialResults) {
if (hit.getDistance() <= this.distanceThreshold) {
map.merge(hit.getId(), hit, (o, n) -> new SegmentDistanceElement(o.getId(), (o.getDistance() + n.getDistance()) / 2));
}
}
/* Prepare final result-set. */
final CorrespondenceFunction fkt = qc.getCorrespondenceFunction().orElse(this.correspondence);
return ScoreElement.filterMaximumScores(map.entrySet().stream().map(e -> e.getValue().toScore(fkt)));
}
use of org.vitrivr.cineast.core.data.score.ScoreElement in project cineast by vitrivr.
the class AverageHPCP method postprocessQuery.
/**
* This method represents the last step that's executed when processing a query. A list of partial-results (DistanceElements) returned by the lookup stage is processed based on some internal method and finally converted to a list of ScoreElements. The filtered list of ScoreElements is returned by the feature module during retrieval.
*
* @param partialResults List of partial results returned by the lookup stage.
* @param qc A ReadableQueryConfig object that contains query-related configuration parameters.
* @return List of final results. Is supposed to be de-duplicated and the number of items should not exceed the number of items per module.
*/
@Override
protected List<ScoreElement> postprocessQuery(List<SegmentDistanceElement> partialResults, ReadableQueryConfig qc) {
/* Prepare helper data-structures. */
final HashMap<String, DistanceElement> map = new HashMap<>();
/* Set QueryConfig and extract correspondence function. */
for (DistanceElement hit : partialResults) {
map.merge(hit.getId(), hit, (o, n) -> new SegmentDistanceElement(hit.getId(), (o.getDistance() + n.getDistance()) / 2));
}
/* Prepare final result-set. */
final CorrespondenceFunction fkt = qc.getCorrespondenceFunction().orElse(this.correspondence);
return ScoreElement.filterMaximumScores(map.entrySet().stream().map(e -> e.getValue().toScore(fkt)));
}
use of org.vitrivr.cineast.core.data.score.ScoreElement in project cineast by vitrivr.
the class CENS method postprocessQuery.
/**
* This method represents the last step that's executed when processing a query. A list of partial-results (DistanceElements) returned by the lookup stage is processed based on some internal method and finally converted to a list of ScoreElements. The filtered list of ScoreElements is returned by the feature module during retrieval.
*
* @param partialResults List of partial results returned by the lookup stage.
* @param qc A ReadableQueryConfig object that contains query-related configuration parameters.
* @return List of final results. Is supposed to be de-duplicated and the number of items should not exceed the number of items per module.
*/
@Override
protected List<ScoreElement> postprocessQuery(List<SegmentDistanceElement> partialResults, ReadableQueryConfig qc) {
/* Prepare map to build a unique set of results. */
final HashMap<String, DistanceElement> map = new HashMap<>();
for (DistanceElement hit : partialResults) {
map.merge(hit.getId(), hit, (o, n) -> o.getDistance() > n.getDistance() ? n : o);
}
/* Prepare final list of results. */
final CorrespondenceFunction correspondence = qc.getCorrespondenceFunction().orElse(this.correspondence);
return ScoreElement.filterMaximumScores(map.entrySet().stream().map((e) -> e.getValue().toScore(correspondence)));
}
Aggregations