FaceApi.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package com.zd.face.controller;
  2. import com.arcsoft.face.FaceFeature;
  3. import com.arcsoft.face.FaceInfo;
  4. import com.arcsoft.face.toolkit.ImageInfo;
  5. import com.github.xiaoymin.knife4j.annotations.ApiSupport;
  6. import com.zd.common.core.domain.R;
  7. import com.zd.common.core.web.domain.ResultData;
  8. import com.zd.common.swagger.config.Knife4jConfiguration;
  9. import com.zd.face.utils.FileUtil;
  10. import com.zd.system.api.face.FaceCompare;
  11. import com.zd.face.service.FaceService;
  12. import com.zd.system.api.domain.LabStudentsInfo;
  13. import com.zd.system.api.students.RemoteStudentsService;
  14. import io.swagger.annotations.Api;
  15. import io.swagger.annotations.ApiOperation;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.*;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.io.*;
  20. import java.util.List;
  21. /**
  22. * @Author: zhoupan
  23. * @Date: 2021/10/12/13:36
  24. * @Description:
  25. */
  26. @Api(tags = "【人脸识别】")
  27. @ApiSupport(author = Knife4jConfiguration.Author.ZP)
  28. @RestController
  29. @RequestMapping("/faceApi")
  30. public class FaceApi {
  31. @Autowired
  32. FaceService faceService;
  33. @Autowired
  34. RemoteStudentsService remoteStudentsService;
  35. @ApiOperation("根据照片文件获取特征码")
  36. @PostMapping("faceFeature")
  37. public ResultData faceFeature(@RequestParam("file") MultipartFile file) throws IOException {
  38. ImageInfo imageInfo;
  39. File file1=null;
  40. try {
  41. file1= FileUtil.multipartFileToFile(file);
  42. imageInfo = faceService.getImageInfo(file1);
  43. } finally {
  44. if(file1!=null)
  45. {
  46. file1.delete();
  47. }
  48. }
  49. List<FaceInfo> faceInfos = faceService.faceDetect(imageInfo);
  50. FaceFeature faceFeature = faceService.faceFeature(imageInfo, faceInfos);
  51. return ResultData.success(faceFeature.getFeatureData());
  52. }
  53. /**
  54. * 人脸比较
  55. * @return
  56. */
  57. @ApiOperation("人脸比较")
  58. @PostMapping("/compare")
  59. public ResultData faceDetection(@RequestBody FaceCompare faceCompare)
  60. {
  61. R<LabStudentsInfo> info = remoteStudentsService.getInfo(faceCompare.getUserId());
  62. if(info.getCode()==200&&info.getData()!=null)
  63. {
  64. FaceFeature target = new FaceFeature(info.getData().getFaceFeature());
  65. FaceFeature source = new FaceFeature(faceCompare.getData());
  66. Boolean compore = faceService.compore(target, source);
  67. return ResultData.result(compore,()->"人脸对比不符!");
  68. }else
  69. {
  70. return ResultData.fail("未获取到对比数据!:"+info.getMsg());
  71. }
  72. }
  73. //获取流文件
  74. private static void inputStreamToFile(InputStream ins, File file) {
  75. try {
  76. OutputStream os = new FileOutputStream(file);
  77. int bytesRead = 0;
  78. byte[] buffer = new byte[8192];
  79. while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
  80. os.write(buffer, 0, bytesRead);
  81. }
  82. os.close();
  83. ins.close();
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. }
  88. }