百度人脸检测SpringBoot自动装配

该博客介绍了如何使用SpringBoot实现自动配置,结合Baidu API进行人脸识别的步骤。首先,通过@EnableAutoConfiguration加载自动配置类,然后使用@ConfigurationProperties读取配置文件中的百度云秘钥。接着,创建BaiDuYunTemplate用于实现人脸识别功能,并在BaiduAutoConfiguration中注册为Bean。最后,在 UserController中调用该模板进行人脸检测,确保登录头像符合要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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. 找到人脸识别

在这里插入图片描述

4. 领取免费资源

在这里插入图片描述

5 创建新应用

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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);
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值