|
|
@@ -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,
|