百度人脸检测SpringBoot自动装配

1. SpringBoot自动装配的原理:(自定义Springboot启动器)

  • SpringBoot启动的时候通过**@EnableAutoConfiguration**注解找到META-INF/spring.factories配置文件中所有的自动配置类,并对其进行加载,

  • TanhuaAutoConfiguration它实际上就是一个javaConfig形式的Spring容器配置类,它们都有一个**@EnableConfigurationPerperties**的注解,通过这个注解启动XXXProperties命名的类去加载全局配置中的属性,如server.port,而XXXProperties通过@ConfigurationProperties注解将全局配置文件中的配置与当前类的属性进行绑定,从而实现自动装配

    1 在app-server中调用自动配置类,这个类的配置文件就需要 配置 系统需要的属性

    2 在auto-config项目中,抽离公共的环境配置
    3 通过@ConfigurationProperties读取公共的环境配置
    4 编写xxTemplate,实现短信发送业务
    5 在spring.factories中通过@EnableAutoConfiguration自动加载模板类

    2. 注册百度云

    3. 找到人脸识别

百度人脸检测SpringBoot自动装配_第1张图片

4. 领取免费资源

百度人脸检测SpringBoot自动装配_第2张图片

5 创建新应用

百度人脸检测SpringBoot自动装配_第3张图片
百度人脸检测SpringBoot自动装配_第4张图片

6. 将创建好的秘钥信息写入yaml文件

百度人脸检测SpringBoot自动装配_第5张图片
百度人脸检测SpringBoot自动装配_第6张图片

7.导入pom 文件

      <!--百度人脸识别API-->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.8.0</version>
        </dependency>

8. 书写BaiduProperties

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix="baidu.api")
@Data
public class BaiduProperties {
    private String appId;
    private String apiKey;
    private String secretKey;
}

9. 书写BaiDuYunTemplate

import com.baidu.aip.face.AipFace;
import com.tanhua.autoconfig.properties.BaiduProperties;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BaiDuYunTemplate {
    @Autowired
    private BaiduProperties baiduProperties;

    public BaiDuYunTemplate(BaiduProperties baiduProperties) {
        this.baiduProperties = baiduProperties;
    }
   public boolean detect(String imgURL){
       HashMap<String, String> options = new HashMap<String, String>();
       options.put("face_field", "age");
       options.put("max_face_num", "2");
       options.put("face_type", "LIVE");
       options.put("liveness_control", "LOW");
       // 初始化一个AipFace
       AipFace client = new AipFace(baiduProperties.getAppId(), baiduProperties.getApiKey(), baiduProperties.getSecretKey());
       System.out.println(client);
       // 可选:设置网络连接参数
       client.setConnectionTimeoutInMillis(2000);
       client.setSocketTimeoutInMillis(60000);

       // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理
       System.out.println("imgURL="+imgURL);
       // 调用接口
       String image = imgURL;
       String imageType = "BASE64";

       // 人脸检测
       JSONObject res = client.detect(image, imageType, options);
       System.out.println(res.toString(2));
       Integer error_code = Integer.valueOf(res.get("error_code").toString());
       return error_code==0;
   }
}

10. 书写BaiduAutoConfiguration

import com.tanhua.autoconfig.properties.BaiduProperties;
import com.tanhua.autoconfig.template.BaiDuYunTemplate;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

@EnableConfigurationProperties({
        BaiduProperties.class
})
public class BaiduAutoConfiguration {
    @Bean
   public BaiDuYunTemplate baiDuYunTemplate(BaiduProperties baiduProperties){return  new BaiDuYunTemplate(baiduProperties);}
}

11. 人脸识别应用

@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    BaiDuYunTemplate baiDuYunTemplate;
    @Resource
    HttpServletRequest httpServletRequest ;
   @DubboReference
    private UserApi userapi;
   @DubboReference
   private UserInfoApi userInfoapi;


     @PostMapping("/loginReginfo/head")
    public ResponseEntity loginHeader( MultipartFile headPhoto){
                 try {
                     InputStream is = headPhoto.getInputStream();
                     String path = ossTemplate.uploadToOSS(headPhoto, "face/");
                     boolean detect = baiDuYunTemplate.detect(path);
                     if (detect==false){
                         throw  new RuntimeException("人脸检测失败!!");
                     }
                     return ResponseEntity.ok(null);
                 } catch (Exception e) {
                     System.out.println(e.getMessage());
                 }

       return ResponseEntity.ok(null);
     }
}

你可能感兴趣的:(笔记,spring,boot,java,spring)