RED-3813: image recategorization
added saving images after layout parsing finishes added endpoint for querying similiar images
This commit is contained in:
parent
18a8f5215f
commit
7e65396ffe
@ -1,61 +0,0 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.image;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.math3.ml.clustering.Cluster;
|
||||
import org.apache.commons.math3.ml.clustering.DBSCANClusterer;
|
||||
import org.apache.commons.math3.ml.distance.DistanceMeasure;
|
||||
import org.apache.commons.math3.ml.distance.ManhattanDistance;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ImageClusteringService {
|
||||
|
||||
private final ObjectMapper objectMapper;
|
||||
private final double eps = 26;
|
||||
private final int minPts = 3;
|
||||
|
||||
private final int fixedLength = 25;
|
||||
private final DistanceMeasure distanceMeasure = new ManhattanDistance();
|
||||
|
||||
@Autowired
|
||||
FileManagementStorageService fileManagementStorageService;
|
||||
|
||||
|
||||
public void clusterImages(String storageId) throws Exception {
|
||||
|
||||
DBSCANClusterer<Image> dbscanClusterer = new DBSCANClusterer<>(eps, minPts, distanceMeasure);
|
||||
|
||||
try (InputStream inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), storageId)) {
|
||||
ImageServiceResponse imageServiceResponse = objectMapper.readValue(inputStream, ImageServiceResponse.class);
|
||||
List<ImageMetadata> imageMetadataList = imageServiceResponse.getData();
|
||||
List<Image> imageList = new ArrayList<>();
|
||||
for (ImageMetadata metadata : imageMetadataList) {
|
||||
Image image = new Image(metadata.getRepresentation(), fixedLength);
|
||||
imageList.add(image);
|
||||
}
|
||||
if (imageList.isEmpty()) {
|
||||
throw new IllegalArgumentException("The image list is empty. Unable to perform clustering.");
|
||||
}
|
||||
List<Cluster<Image>> clusters = dbscanClusterer.cluster(imageList);
|
||||
for (Cluster<Image> cluster : clusters) {
|
||||
List<Image> clusterImages = cluster.getPoints();
|
||||
log.info("cluster: {}", clusterImages.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -47,6 +47,7 @@ public class ImageMessageReceiver {
|
||||
fileStatusService.setStatusAnalyse(dossierId, fileId, false);
|
||||
|
||||
log.info("Received message from {} for dossierId {} and fileId {}", MessagingConfiguration.IMAGE_SERVICE_RESPONSE_QUEUE, dossierId, fileId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.migration.SaasM
|
||||
import com.iqser.red.service.persistence.management.v1.processor.model.websocket.AnalyseStatus;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusProcessingUpdateService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.image.ImageSimilarityService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.WebsocketService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.image.ImageSimilarityService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.layoutparsing.LayoutParsingRequestIdentifierService;
|
||||
@ -28,6 +29,13 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -67,7 +75,6 @@ public class LayoutParsingFinishedMessageReceiver {
|
||||
imageSimiliarityService.saveImages(templateId, dossierId, fileId, storageId);
|
||||
|
||||
log.info("Received message {} in {}", response, LayoutParsingQueueNames.LAYOUT_PARSING_FINISHED_EVENT_QUEUE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user