Jelajahi Sumber

Fix: Multithreading

wudi 4 tahun lalu
induk
melakukan
b2983071bc

+ 2 - 10
src/main/java/com/mokasz/pool/image/algorithm/HashTool.java

@@ -5,17 +5,9 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
 public class HashTool {
-    static MessageDigest messageDigest;
 
-    static {
-        try {
-            messageDigest = MessageDigest.getInstance("MD5");
-        } catch (NoSuchAlgorithmException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static String calculateMd5 (byte[] data) {
+    public static String calculateMd5 (byte[] data) throws NoSuchAlgorithmException {
+        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
         messageDigest.update(data);
         return DatatypeConverter.printHexBinary(messageDigest.digest());
     }

+ 1 - 2
src/main/java/com/mokasz/pool/image/algorithm/OpenCvService.java

@@ -15,7 +15,6 @@ public class OpenCvService {
         Loader.load(opencv_java.class);
     }
 
-    private final PHash pHash = PHash.create();
     public static final int HashLength = 8;
 
     private static void transformMatToArrayOfFloat(Mat mat, float[] floats) {
@@ -30,7 +29,7 @@ public class OpenCvService {
     public void calculatePHash(byte[] fileBytes, float[] vector) {
         Mat input = Imgcodecs.imdecode(new MatOfByte(fileBytes), Imgcodecs.IMREAD_UNCHANGED);
         Mat output = new Mat();
-        pHash.compute(input, output);
+        PHash.create().compute(input, output);
         transformMatToArrayOfFloat(output, vector);
     }
 

+ 5 - 6
src/main/java/com/mokasz/pool/image/restful/controller/ImageController.java

@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.sql.ResultSet;
 import java.util.List;
 
@@ -38,7 +39,7 @@ public class ImageController {
 
     @PostMapping("/store/url")
     @ResponseStatus(HttpStatus.CREATED)
-    public void storeUrl (@RequestParam(value = "url") String url) throws IOException {
+    public void storeUrl (@RequestParam(value = "url") String url) throws IOException, NoSuchAlgorithmException {
         byte[] fileData = DownloadBytes.downloadAsBytesArray(url);
         String md5 = HashTool.calculateMd5(fileData);
         float[] floats = new float[8];
@@ -46,13 +47,11 @@ public class ImageController {
         float[] binaries = new float[64];
         service.transformBinaryArray(floats, binaries);
         String hash = service.getReadableHash(floats);
-        log.info("URL: {}, MD5: {} PHash: {}", url, md5, hash);
         jdbcTemplate.update(
-                "INSERT INTO image_pool.url_hash VALUES (?, ?, ?, ?, NOW()) ON CONFLICT (url) DO NOTHING",
+                "INSERT INTO image_pool.url_hash_alt VALUES (?, ?, ?, NOW()) ON CONFLICT (url) DO NOTHING",
                 url,
                 md5,
-                hash,
-                binaries);
+                hash);
     }
 
     @PostMapping("/store")
@@ -92,7 +91,7 @@ public class ImageController {
         service.transformBinaryArray(floats, binaries);
         List<ImageQueryResponse> list =
                 jdbcTemplate.query(
-                        "SELECT * FROM (SELECT hash, (64 - l2_distance(?::FLOAT2[], vector)) / 64 AS similarity FROM image_pool.image_hash WHERE hash IN (SELECT hash FROM image_pool.image_to_pool WHERE pool_id = ?) ORDER BY vector <-> ?::FLOAT2[] ASC) t WHERE similarity >=? and similarity<=? ORDER BY similarity DESC LIMIT ?",
+                        "SELECT * FROM (SELECT hash, (64 - l2_distance(?::FLOAT2[], vector)) / 64 AS similarity FROM image_pool.image_hash WHERE hash IN (SELECT hash FROM image_pool.image_to_pool WHERE pool_id = ?) ORDER BY vector <-> ?::FLOAT2[]) t WHERE similarity >=? and similarity<=? ORDER BY similarity DESC LIMIT ?",
                         (ResultSet rs, int rowNum) ->
                                 new ImageQueryResponse(rs.getFloat("similarity"), rs.getString("hash")),
                         binaries,