GetVectorService.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.example.xiaoshiweixinback.service.common;
  2. import com.example.xiaoshiweixinback.business.utils.JsonUtils;
  3. import lombok.RequiredArgsConstructor;
  4. import lombok.extern.slf4j.Slf4j;
  5. import okhttp3.*;
  6. import org.apache.commons.io.FileUtils;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.util.FileCopyUtils;
  10. import org.springframework.web.multipart.MultipartFile;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.Objects;
  16. import java.util.concurrent.TimeUnit;
  17. import static cn.hutool.core.io.FileUtil.getMimeType;
  18. @RequiredArgsConstructor
  19. @Slf4j
  20. @Service
  21. public class GetVectorService {
  22. @Value("${VectorUrl}")
  23. private String vectorUrl;
  24. /**
  25. * 根据图片获取图片特征向量
  26. *
  27. * @param file
  28. * @return
  29. * @throws IOException
  30. */
  31. public List<String> getVectorByFile(File file) throws IOException {
  32. MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
  33. .setType(MultipartBody.FORM);
  34. //根据文件名获取文件的MIME类型
  35. String mimeType = getMimeType(file.getPath());
  36. multipartBodyBuilder.addFormDataPart("image_info", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
  37. RequestBody requestBody = multipartBodyBuilder
  38. .build();
  39. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  40. .connectTimeout(60, TimeUnit.SECONDS)
  41. .writeTimeout(60, TimeUnit.SECONDS)
  42. .readTimeout(60, TimeUnit.SECONDS)
  43. .build();
  44. Request request = new Request.Builder()
  45. .url(vectorUrl + "/getVectorByImg")
  46. .post(requestBody)
  47. .build();
  48. Response response = null;
  49. response = okHttpClient.newCall(request).execute();
  50. String jsons = Objects.requireNonNull(response.body()).string();
  51. List<String> stringList = JsonUtils.jsonToList(jsons, String.class);
  52. return stringList;
  53. }
  54. /**
  55. * 根据图片描述获取图片特征向量
  56. *
  57. * @param description
  58. * @return
  59. * @throws IOException
  60. */
  61. public List<String> getVectorByText(String description) throws IOException {
  62. OkHttpClient okHttpClient = new OkHttpClient();
  63. Request request = new Request.Builder()
  64. .url(vectorUrl + "/getVectorByText?keyword=" + description)
  65. .get()
  66. .build();
  67. Response response = null;
  68. response = okHttpClient.newCall(request).execute();
  69. String jsons = Objects.requireNonNull(response.body()).string();
  70. List<String> stringList = JsonUtils.jsonToList(jsons, String.class);
  71. return stringList;
  72. }
  73. }