百度人脸识别_SpringBoot整合离线SDK

这篇具有很好参考价值的文章主要介绍了百度人脸识别_SpringBoot整合离线SDK。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

  1. 建议使用低版本 SDK : Baidu_Face_Offline_SDK_Windows_Java_6.1.3
    • 目前已知8.x版本对服务端不兼容,存在运行过程中,第一次调用sdk能够正常执行,第二次时出现JVM异常。
    • SDK不支持多线程,一般都用于设备端,如人脸闸机上的面板机设备。
  2. 自定义库文件路径,与项目分离。
  3. 整合springBoot项目,实现启动初始化SDK,按需调用。

二、SDK 引入并配置

  1. 解压程序,查看对应操作系统的文件夹,将src目录下的文件移动到我们的项目中。请不要修改此目录结构。
百度人脸识别_SpringBoot整合离线SDK
  1. 给Face.java类添加注解,实现条件实例化。
@Slf4j
@Component
@Conditional(FaceSdkEnableCondition.class)
public class Face {
    // *******以下为人脸sdk api接口*********
  1. 修改Face.java类加载库的方式,以及初始化。
    1. 新增 Environment 类动态获取库路径。
    2. 更换 System.load() 加载库文件。
    3. 使用 @PostConstruct 注解,当类对象被创建时,自动完成初始化工作。
    4. 使用 @PreDestroy 注解,当类对象被销毁时,自动完成释放内存工作。
// ********* 以下为系统加载库文件及opencv **********
    private static String libPath;
    public Face(){ }

    @Autowired
    public Face(Environment env) {
        // 初始化libPath
        libPath = env.getProperty("face-sdk.libPath",String.class);
        // 加载dll文件
        System.load(libPath + "BaiduFaceApi.dll");
        System.load(libPath + "opencv_java320.dll");
    }

    Face api = null;

    /*  sdk初始化 */
    @PostConstruct
    public void init() {
        log.info("离线SDK开始初始化");
        log.info("SDK路径:{}",libPath);
        api = new Face();
        int res = api.sdkInit(libPath);
        if (res != 0) {
            log.info("sdk init fail and error = {}\n", res);
            return;
        }
        log.info("离线SDK初始化完成");
    }

    /*  sdk释放内存 */
    @PreDestroy
    private void destroy() {
        if(api != null){
            api.sdkDestroy();
        }
        log.info("离线SDK销毁");
    }
  1. 配置条件启动类相关
package cn.dyina.config;

public class FaceSdkEnableCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        // 根据face-sdk.enable属性来决定是否创建 Face bean
        return "true".equals(env.getProperty("face-sdk.enable"));
    }
}
  1. 配置路径存放库文件

    face-sdk:
      enable: true
      # 路径请务必使用双斜杆
      libPath: D:\\FaceLib\\
      imagesPath: D:\\FaceImages\\
    
    1. 请将SDK文件的所有.dll文件拷贝到 libPath 目录下。
    2. 请将SDK文件下的opencv-jar、models、license文件夹拷贝到libPath 目录下。
    3. 请登录 百度智能云 控制中心,注册并获取离线识别SDK序列号,替换license\license.key内的序列号。
  2. 安装maven依赖,以解决打包异常

    百度人脸识别_SpringBoot整合离线SDK

    1. 修改并在项目终端执行以下的命令,将opencv-jar下的opencv-320.jar依赖安装到maven仓库。
    mvn install:install-file -DgroupId=cn.dyina(jar包的groupId) -DartifactId=opencv-jar(jar包的artifactId) -Dversion=1.0(jar的版本号) -Dpackaging=jar -Dfile=D:\FaceLib\opencv-jar\opencv-320.jar(jar包的具体路径)
    
    1. 添加maven依赖
    <!-- 本地依赖 opencv-jar-->
    <dependency>
        <groupId>cn.dyina</groupId>
        <artifactId>opencv-jar</artifactId>
        <version>1.0</version>
    </dependency>
    

三、项目使用

  1. 在SpringBoot启动类上,添加包扫描。
@SpringBootApplication(scanBasePackages = {"cn.dyina","com.jni"})
public class SpringBootBaiDuFaceSdkApplication {
    //...
}
  1. 编写service、controller。(以下示例代码仅提供参考,请根据自己的业务需求进行编写。)
@Slf4j
@Service
public class FaceService {
    @Value("${face-sdk.imagesPath}")
    String imagesPath;


    public String registerFace(String fileName, String nickName) {
        // 注册人脸图片
        String ip_nickName = fileName.replaceFirst("[.][^.]+$", "");
        // 获取人脸特征值
        Mat mat = Imgcodecs.imread(imagesPath + fileName);
        long matAddr = mat.getNativeObjAddr();
        // 填充人脸信息 后期将从数据库获取
        String userInfo = nickName;
        String userId = ip_nickName.replace(".","");
        String groupId = "Face";
        // 用人脸特征值注册
        JSONObject res = JSONObject.parseObject(Face.userAddByMat(matAddr, userId, groupId, userInfo));
        log.info("user add result is:{}", res);
        return res.getString("msg");
    }


    public String identifyFace(String fileName) {
        // 调用人脸sdkAPI
        Face.loadDbFace();
        Mat mat1 = Imgcodecs.imread(imagesPath + fileName);
        long mat1Addr = mat1.getNativeObjAddr();
        int type = 0;
        // 和人脸库里面的人脸特征值比较(人脸识别)
        JSONObject res = JSONObject.parseObject(Face.identifyWithAllByMat(mat1Addr, type));
        log.info("identify res is:{}", res);
        if (!res.getString("errno").equals("0")) {
            return res.getString("msg");
        }
        // 获取人脸识别信息
        double score = res.getJSONObject("data")
                .getJSONArray("result")
                .getJSONObject(0)
                .getDouble("score");
        String userId = res.getJSONObject("data")
                .getJSONArray("result")
                .getJSONObject(0)
                .getString("user_id");
        if (score > 80) {
            String nickName = userId.split("_")[1];
            return nickName;
        } else {
            log.info("根据图片获取人员信息失败");
            return "Match score is low";
        }
    }

}
/**
 *  人脸识别 页面相关接口
 */
@Slf4j
@RestController
@CrossOrigin(origins = "*", maxAge = 3600)
public class FaceController {

    @Autowired
    private FaceService faceService;

    @Value("${face-sdk.imagesPath}")
    String imagesPath;

    /**
     * 人脸注册
     * @param file
     * @param ip
     * @param nickName
     * @return
     * @throws IOException
     */
    @PostMapping("/faceRegister")
    public R<String> faceRegister(@RequestParam("photo") MultipartFile file,
                                  @RequestParam("ip") String ip,
                                  @RequestParam("nickName") String nickName) throws IOException {

        String photo = Base64.getEncoder().encodeToString(file.getBytes());
        String fileName = ip + "_" + nickName + ".jpg";
        Base64ToImage.saveImage(imagesPath, fileName, photo);
        // 人脸注册
        String res = faceService.registerFace(fileName, nickName);
        if(!res.equals("success")){
            return R.error(res,null);
        }
        return R.success(null);
    }


    /**
     * 检测人脸
     * @param photo
     * @param ip
     * @return
     */
    @PostMapping("/faceDetection")
    public R<String> faceDetection(@RequestParam("photo") String photo, @RequestParam("ip") String ip) {
        String fileName = ip +".jpg"; // 临时存储,用于检测
        Base64ToImage.saveImage(imagesPath, fileName, photo);
        String res = faceService.identifyFace(fileName);
        return R.success(res);
    }



    /**
     * 查询用户组人脸
     * @param groupId
     * @return
     */
    @GetMapping("/getAllFace")
    public R<List> getAllFace(@RequestParam("groupId") String groupId){
        log.info("====>> getAllFace");
        List<String> userIdList = faceService.getAllFace(groupId);
        return R.success(userIdList);
    }
}

后记

  1. com.jni.face包下,除了Face.java类,其他都是示例程序,可以视情况删除。

  2. models 文件夹里的模型可以按情况删除,详细可以查看文档。

  3. 项目启动后,你的控制台应该会收到SDK初始化的信息。并且你的libPath 目录下应该生成db文件夹,人脸数据将存储在这里。(db文件夹将生成在库文件所在目录。删除face.db后,初始化SDK时会自动生成,不需要额外操作。)

  4. 请不要使用热部署插件,会导致依赖报错。

  5. 有生产需求的,但设备量不多,可以咸鱼买序列号。(官网最低100个起购)文章来源地址https://www.toymoban.com/news/detail-476984.html

到了这里,关于百度人脸识别_SpringBoot整合离线SDK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Springboot+百度AI人工智能人脸识别考勤系统设计与实现

    基于Springboot+百度AI人工智能人脸识别考勤系统设计与实现  博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费

    2024年02月05日
    浏览(70)
  • JAVA基于百度AI接口的人脸识别考勤签到系统设计与实现(Springboot框架)

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月04日
    浏览(57)
  • SpringBoot项目(百度AI整合)——如何在Springboot中使用文字识别OCR入门

    前言:本系列博客尝试结合官网案例,阐述百度 AI 开放平台里的组件使用方式,核心是如何在spring项目中快速上手应用。 本文介绍如何在Springboot中使用百度AI的文字识别OCR 其他相关的使用百度AI的文章列表如下: 如何在Springboot中使用语音文件识别 ffmpeg的安装和使用 1.从官

    2024年02月02日
    浏览(41)
  • 基于java框架百度AI接口人脸识别考勤签到系统 (springboot框架)开题答辩常规问题和如何回答

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月17日
    浏览(68)
  • 百度驾驶证C++离线SDK V1.1 C#接入

    百度驾驶证C++离线SDK V1.1 C#接入 目录 说明  效果  项目 代码 下载  自己根据SDK封装了动态库,然后C#调用。 SDK包结构 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms; using 驾驶证测试

    2024年04月14日
    浏览(34)
  • 百度云【人脸识别】

    目录 1:百度云【人脸识别云服务】 2:Java-SDK文档 3:项目中测试 人脸识别云服务 包含实名认证、人脸对比、人脸搜索、活体检测等能力。灵活应用于金融、泛安防等行业场景,满足身份核验、人脸考勤、闸机通行等业务需求                     全线免费试用 公有云API最

    2024年02月13日
    浏览(37)
  • 项目:基于OpenCV+百度云人脸识别项目

    基于OpenCV和百度云人脸识别的项目可以使用以下的框架来实现: 数据采集和预处理:使用OpenCV来采集摄像头或读取图像文件,并对图像进行预处理操作,例如裁剪、调整大小、灰度化等。 人脸检测:使用OpenCV的人脸检测功能来检测图像中的人脸。可以使用预训练的人脸检测

    2024年01月16日
    浏览(47)
  • Java借助百度云人脸识别实现人脸注册、登录功能的完整示例

    先来看一下Java借助百度云人脸识别实现人脸注册登录功能的预览效果 登录百度智能云控制台: https://console.bce.baidu.com/ ,开通人脸识别 选择人脸识别项,创建人脸识别应用 人脸识别接口默认全部选择,也可以选择添加其他接口。 得到应用 ID、 API KEY、Secret Key 人脸识别API文

    2024年02月11日
    浏览(48)
  • 百度智能AI接口:人脸识别考勤签到系统设计与实现

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月05日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包