|
|
@@ -4,9 +4,8 @@ import com.mokasz.image_pool.algorithm.OpenCvService;
|
|
|
import com.mokasz.image_pool.restful.entity.ImageQueryResponse;
|
|
|
import com.mokasz.image_pool.restful.entity.ImageSaveResponse;
|
|
|
import com.mokasz.image_pool.restful.service.DownloadBytes;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
@@ -15,13 +14,15 @@ import java.io.IOException;
|
|
|
import java.sql.ResultSet;
|
|
|
import java.util.List;
|
|
|
|
|
|
+@Slf4j
|
|
|
@RestController
|
|
|
@RequestMapping("/service/image")
|
|
|
+@RequiredArgsConstructor
|
|
|
public class ImageController {
|
|
|
|
|
|
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
- private final OpenCvService service = new OpenCvService();
|
|
|
- @Autowired private JdbcTemplate jdbcTemplate;
|
|
|
+ private final OpenCvService service;
|
|
|
+
|
|
|
+ private final JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
@GetMapping("/")
|
|
|
public ImageSaveResponse index() throws IOException {
|
|
|
@@ -32,7 +33,7 @@ public class ImageController {
|
|
|
if (url != null) {
|
|
|
return DownloadBytes.downloadAsBytesArray(url);
|
|
|
} else if (file != null) {
|
|
|
- logger.info("File size: {} Name: {}", file.getSize(), file.getOriginalFilename());
|
|
|
+ log.info("File size: {} Name: {}", file.getSize(), file.getOriginalFilename());
|
|
|
return file.getBytes();
|
|
|
} else {
|
|
|
throw new RuntimeException("缺少file或url");
|
|
|
@@ -48,14 +49,14 @@ public class ImageController {
|
|
|
service.calculatePHash(this.getFileBytes(file, url), floats);
|
|
|
float[] binaries = new float[64];
|
|
|
service.transformBinaryArray(floats, binaries);
|
|
|
- logger.info("{}", binaries);
|
|
|
+ log.info("{}", binaries);
|
|
|
String hash = service.getReadableHash(floats);
|
|
|
int updated =
|
|
|
jdbcTemplate.update(
|
|
|
"INSERT INTO image_pool.image_hash VALUES (?, NOW(), ?) ON CONFLICT (hash) DO NOTHING",
|
|
|
hash,
|
|
|
binaries);
|
|
|
- logger.info("{}", updated);
|
|
|
+ log.info("{}", updated);
|
|
|
jdbcTemplate.update(
|
|
|
"INSERT INTO image_pool.image_to_pool VALUES (?, ?, NOW()) ON CONFLICT (hash, pool_id) DO NOTHING",
|
|
|
hash,
|
|
|
@@ -76,7 +77,7 @@ public class ImageController {
|
|
|
service.calculatePHash(this.getFileBytes(file, url), floats);
|
|
|
float[] binaries = new float[64];
|
|
|
service.transformBinaryArray(floats, binaries);
|
|
|
- logger.info("{}", floats);
|
|
|
+ log.info("{}", floats);
|
|
|
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 ?",
|