mirror of
https://github.com/annimon-tutorials/Similar-Images-Bot.git
synced 2024-09-20 03:34:19 +03:00
Skip already indexed images
This commit is contained in:
parent
383326e9ff
commit
55743fbdda
@ -13,19 +13,22 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import static com.github.kilianB.hashAlgorithms.DifferenceHash.Precision;
|
||||||
|
|
||||||
public class ImageIndexer {
|
public class ImageIndexer {
|
||||||
|
|
||||||
private final Map<Long, H2DatabaseImageMatcher> databases;
|
private final Map<Long, H2DatabaseImageMatcher> databases = new HashMap<>(5);
|
||||||
|
private final DifferenceHash differenceHash = new DifferenceHash(32, Precision.Double);
|
||||||
public ImageIndexer() {
|
private final PerceptiveHash perceptiveHash = new PerceptiveHash(32);
|
||||||
databases = new HashMap<>(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SimilarImagesInfo processImage(Post originalPost, BufferedImage image)
|
public SimilarImagesInfo processImage(Post originalPost, BufferedImage image)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
final Long channelId = originalPost.getChannelId();
|
final Long channelId = originalPost.getChannelId();
|
||||||
|
final String uniqueId = originalPost.getMessageId().toString();
|
||||||
final var db = getDatabaseForChannel(channelId);
|
final var db = getDatabaseForChannel(channelId);
|
||||||
|
if (db.doesEntryExist(uniqueId, differenceHash)) {
|
||||||
|
return new SimilarImagesInfo(originalPost, List.of());
|
||||||
|
}
|
||||||
final List<ImageResult> results = db.getMatchingImages(image)
|
final List<ImageResult> results = db.getMatchingImages(image)
|
||||||
.stream()
|
.stream()
|
||||||
.map(r -> {
|
.map(r -> {
|
||||||
@ -34,7 +37,7 @@ public class ImageIndexer {
|
|||||||
})
|
})
|
||||||
.filter(r -> !r.isSamePost(originalPost))
|
.filter(r -> !r.isSamePost(originalPost))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
db.addImage(originalPost.getMessageId().toString(), image);
|
db.addImage(uniqueId, image);
|
||||||
return new SimilarImagesInfo(originalPost, results);
|
return new SimilarImagesInfo(originalPost, results);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,8 +49,8 @@ public class ImageIndexer {
|
|||||||
var jdbcUrl = "jdbc:h2:./imagesdb_" + channelId;
|
var jdbcUrl = "jdbc:h2:./imagesdb_" + channelId;
|
||||||
var conn = DriverManager.getConnection(jdbcUrl, "root", "");
|
var conn = DriverManager.getConnection(jdbcUrl, "root", "");
|
||||||
db = new H2DatabaseImageMatcher(conn);
|
db = new H2DatabaseImageMatcher(conn);
|
||||||
db.addHashingAlgorithm(new DifferenceHash(32, DifferenceHash.Precision.Double), .4);
|
db.addHashingAlgorithm(differenceHash, 0.4);
|
||||||
db.addHashingAlgorithm(new PerceptiveHash(32), .2);
|
db.addHashingAlgorithm(perceptiveHash, 0.2);
|
||||||
databases.put(channelId, db);
|
databases.put(channelId, db);
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user