1313import java .util .List ;
1414import java .util .Map ;
1515import java .util .stream .Collectors ;
16+ import static com .github .kilianB .hashAlgorithms .DifferenceHash .Precision ;
1617
1718public 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