13
13
import java .util .List ;
14
14
import java .util .Map ;
15
15
import java .util .stream .Collectors ;
16
+ import static com .github .kilianB .hashAlgorithms .DifferenceHash .Precision ;
16
17
17
18
public class ImageIndexer {
18
19
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 );
24
23
25
24
public SimilarImagesInfo processImage (Post originalPost , BufferedImage image )
26
25
throws SQLException {
27
26
final Long channelId = originalPost .getChannelId ();
27
+ final String uniqueId = originalPost .getMessageId ().toString ();
28
28
final var db = getDatabaseForChannel (channelId );
29
+ if (db .doesEntryExist (uniqueId , differenceHash )) {
30
+ return new SimilarImagesInfo (originalPost , List .of ());
31
+ }
29
32
final List <ImageResult > results = db .getMatchingImages (image )
30
33
.stream ()
31
34
.map (r -> {
@@ -34,7 +37,7 @@ public SimilarImagesInfo processImage(Post originalPost, BufferedImage image)
34
37
})
35
38
.filter (r -> !r .isSamePost (originalPost ))
36
39
.collect (Collectors .toList ());
37
- db .addImage (originalPost . getMessageId (). toString () , image );
40
+ db .addImage (uniqueId , image );
38
41
return new SimilarImagesInfo (originalPost , results );
39
42
}
40
43
@@ -46,8 +49,8 @@ private H2DatabaseImageMatcher getDatabaseForChannel(Long channelId) throws SQLE
46
49
var jdbcUrl = "jdbc:h2:./imagesdb_" + channelId ;
47
50
var conn = DriverManager .getConnection (jdbcUrl , "root" , "" );
48
51
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 );
51
54
databases .put (channelId , db );
52
55
return db ;
53
56
}
0 commit comments