Skip to content

Commit 55743fb

Browse files
committed
Skip already indexed images
1 parent 383326e commit 55743fb

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/main/java/com/annimon/similarimagesbot/ImageIndexer.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,22 @@
1313
import java.util.List;
1414
import java.util.Map;
1515
import java.util.stream.Collectors;
16+
import static com.github.kilianB.hashAlgorithms.DifferenceHash.Precision;
1617

1718
public class ImageIndexer {
1819

19-
private final Map<Long, H2DatabaseImageMatcher> databases;
20-
21-
public ImageIndexer() {
22-
databases = new HashMap<>(5);
23-
}
20+
private final Map<Long, H2DatabaseImageMatcher> databases = new HashMap<>(5);
21+
private final DifferenceHash differenceHash = new DifferenceHash(32, Precision.Double);
22+
private final PerceptiveHash perceptiveHash = new PerceptiveHash(32);
2423

2524
public SimilarImagesInfo processImage(Post originalPost, BufferedImage image)
2625
throws SQLException {
2726
final Long channelId = originalPost.getChannelId();
27+
final String uniqueId = originalPost.getMessageId().toString();
2828
final var db = getDatabaseForChannel(channelId);
29+
if (db.doesEntryExist(uniqueId, differenceHash)) {
30+
return new SimilarImagesInfo(originalPost, List.of());
31+
}
2932
final List<ImageResult> results = db.getMatchingImages(image)
3033
.stream()
3134
.map(r -> {
@@ -34,7 +37,7 @@ public SimilarImagesInfo processImage(Post originalPost, BufferedImage image)
3437
})
3538
.filter(r -> !r.isSamePost(originalPost))
3639
.collect(Collectors.toList());
37-
db.addImage(originalPost.getMessageId().toString(), image);
40+
db.addImage(uniqueId, image);
3841
return new SimilarImagesInfo(originalPost, results);
3942
}
4043

@@ -46,8 +49,8 @@ private H2DatabaseImageMatcher getDatabaseForChannel(Long channelId) throws SQLE
4649
var jdbcUrl = "jdbc:h2:./imagesdb_" + channelId;
4750
var conn = DriverManager.getConnection(jdbcUrl, "root", "");
4851
db = new H2DatabaseImageMatcher(conn);
49-
db.addHashingAlgorithm(new DifferenceHash(32, DifferenceHash.Precision.Double), .4);
50-
db.addHashingAlgorithm(new PerceptiveHash(32), .2);
52+
db.addHashingAlgorithm(differenceHash, 0.4);
53+
db.addHashingAlgorithm(perceptiveHash, 0.2);
5154
databases.put(channelId, db);
5255
return db;
5356
}

0 commit comments

Comments
 (0)