最新要闻
- iQOO杀疯了!1TB UFS 4.0闪存只要3699元:同档位绝无仅有 环球视点
- 迪士尼被曝大量低价团购票无法入园 平台回应:旅行社操作失误 全球信息
- 5.8英寸塞进骁龙8 Gne2!小屏旗舰华硕Zenfone 10海外官宣
- 余承东同款座驾!AITO问界M5智驾版下周开启交付
- 保时捷发布史上最有科技感纯电超跑Mission X:动力超过1000匹 极速320公里/小时_消息
- 马斯克嘲讽苹果AR头显:花3500美元买它 不如20美元买包致幻菇_全球看热讯
- 天天讯息:浓烟下的美国:N95口罩销量猛增逾10倍、中国产空气净化器大卖
- 环球时讯:16GB/32GB内存笔记本对比实测:16GB不够用了
- 讯飞星火认知大模型V1.5正式发布:知识问答突破 可以告别搜索了-环球百事通
- 2023年底更多极端天气来袭 美国警告厄尔尼诺已形成-世界热门
- 快资讯:特朗普因机密文件案被起诉 将于下星期出庭
- 快舟一号甲固体火箭第20次发射:“导里导气”
- 英国政府将对油气公司征收暴利税设定门槛
- 端午节火车票开售 热门车票“秒空”
- 基建狂魔新作!世界上建设难度最高的跨海集群工程:深中通道
- 另外赠送洁面乳:多芬氨基酸洁面泡泡2瓶49.9元发车(新低)|每日报道
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【独家】百度人脸识别_SpringBoot整合离线SDK
(资料图片)
一、前言
- 建议使用低版本 SDK : Baidu_Face_Offline_SDK_Windows_Java_6.1.3
- 目前已知8.x版本对服务端不兼容,存在运行过程中,第一次调用sdk能够正常执行,第二次时出现JVM异常。
- SDK不支持多线程,一般都用于设备端,如人脸闸机上的面板机设备。
- 自定义库文件路径,与项目分离。
- 整合springBoot项目,实现启动初始化SDK,按需调用。
二、SDK 引入并配置
- 解压程序,查看对应操作系统的文件夹,将src目录下的文件移动到我们的项目中。请不要修改此目录结构。
- 给Face.java类添加注解,实现条件实例化。
@Slf4j@Component@Conditional(FaceSdkEnableCondition.class)public class Face { // *******以下为人脸sdk api接口*********
- 修改Face.java类加载库的方式,以及初始化。
- 新增 Environment 类动态获取库路径。
- 更换 System.load() 加载库文件。
- 使用
@PostConstruct
注解,当类对象被创建时,自动完成初始化工作。 - 使用
@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销毁"); }
- 配置条件启动类相关
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")); }}
配置路径存放库文件
face-sdk: enable: true # 路径请务必使用双斜杆 libPath: D:\\FaceLib\\ imagesPath: D:\\FaceImages\\
- 请将SDK文件的所有.dll文件拷贝到
libPath
目录下。 - 请将SDK文件下的opencv-jar、models、license文件夹拷贝到
libPath
目录下。 - 请登录 百度智能云 控制中心,注册并获取离线识别SDK序列号,替换license\license.key内的序列号。
- 请将SDK文件的所有.dll文件拷贝到
安装maven依赖,以解决打包异常
- 请修改并在项目终端执行以下的命令,将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包的具体路径)
- 添加maven依赖
cn.dyina opencv-jar 1.0
三、项目使用
- 在SpringBoot启动类上,添加包扫描。
@SpringBootApplication(scanBasePackages = {"cn.dyina","com.jni"})public class SpringBootBaiDuFaceSdkApplication { //...}
- 编写service、controller。(以下示例代码仅提供参考,请根据自己的业务需求进行编写。)
@Slf4j@Servicepublic 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 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 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 getAllFace(@RequestParam("groupId") String groupId){ log.info("====>> getAllFace"); List userIdList = faceService.getAllFace(groupId); return R.success(userIdList); }}
后记
com.jni.face
包下,除了Face.java类,其他都是示例程序,可以视情况删除。models 文件夹里的模型可以按情况删除,详细可以查看文档。
项目启动后,你的控制台应该会收到SDK初始化的信息。并且你的
libPath
目录下应该生成db文件夹,人脸数据将存储在这里。(db文件夹将生成在库文件所在目录。删除face.db后,初始化SDK时会自动生成,不需要额外操作。)有生产需求的,但设备量不多,可以咸鱼买序列号。(官网最低100个起购)
关键词:
【独家】百度人脸识别_SpringBoot整合离线SDK
天天热讯:UDS统一诊断服务
【新华500】新华500指数(989001)9日涨0.45%
iQOO杀疯了!1TB UFS 4.0闪存只要3699元:同档位绝无仅有 环球视点
迪士尼被曝大量低价团购票无法入园 平台回应:旅行社操作失误 全球信息
5.8英寸塞进骁龙8 Gne2!小屏旗舰华硕Zenfone 10海外官宣
余承东同款座驾!AITO问界M5智驾版下周开启交付
保时捷发布史上最有科技感纯电超跑Mission X:动力超过1000匹 极速320公里/小时_消息
今日关注:17-呼吸灯
华为云 UCS GitOps:轻松交付多集群云原生应用
全球速看:OPEN AI 全新版本来了2.0.0永久免费在线体验构建AI开放生态
Angular4 教程_编程入门自学教程_菜鸟教程-免费教程分享
虚拟列表
马斯克嘲讽苹果AR头显:花3500美元买它 不如20美元买包致幻菇_全球看热讯
天天讯息:浓烟下的美国:N95口罩销量猛增逾10倍、中国产空气净化器大卖
环球时讯:16GB/32GB内存笔记本对比实测:16GB不够用了
讯飞星火认知大模型V1.5正式发布:知识问答突破 可以告别搜索了-环球百事通
2023年底更多极端天气来袭 美国警告厄尔尼诺已形成-世界热门
快资讯:特朗普因机密文件案被起诉 将于下星期出庭
车载雷达报警测试要点
快舟一号甲固体火箭第20次发射:“导里导气”
英国政府将对油气公司征收暴利税设定门槛
天天热点!.NET的8种JSON序列化反序列化工具供你选择
端午节火车票开售 热门车票“秒空”
基建狂魔新作!世界上建设难度最高的跨海集群工程:深中通道
另外赠送洁面乳:多芬氨基酸洁面泡泡2瓶49.9元发车(新低)|每日报道
全球短讯!大叔被疑偷拍自证清白后仍遭女子曝光 网友:太欺负人
考生考前与老师闲聊押中英语作文:十分幸运
陕西一考生考前与老师闲聊押中英语作文:十分幸运,考完第一时间找老师表达喜悦
茶颜悦色杯底现镊子,工作人员:是夹茶叶用的,已处理中|今日视点
住房公积金制度惠及面进一步扩大 去年全国发放贷款超万亿元|天天实时
天天关注:WPF中有中心点的slider滑动条
世界头条:易基因:全基因组DNA甲基化和小RNA分析揭示甘蓝型油菜种子的基因组不对称性
接口防刷处理方案,太优雅了!
Linux磁盘分区扩容-世界今亮点
ChatGTP:没人比我更懂诗歌_当前头条
四部门:深入开展家电以旧换新_天天即时看
美国铀期货U3O8价格于6月7日涨至56.25美元
方便英文单词_方便英文
医疗产业ETF(159877)涨0.67%,开立医疗涨5.08%,华兰股份涨5.31%
全球看点:唯美的歌词带意境(唯美的歌词)
天天快讯:中国无人驾驶高速地铁海外开工:最大载客量达1100人
16核i9+RTX 4060游戏本价格也被国产打下来了 七彩虹将星X15仅售5999|每日聚焦
【新要闻】赛力斯董事长张兴海:恶性竞争将毁掉企业和行业
全球关注:低头玩手机等于颈椎增压45斤!相当于6岁小孩骑脖子
马斯克要横扫欧洲!特斯拉全新超级工厂曝光:投资超300亿 或落地西班牙
陆家嘴数智天地·智慧谷项目亮相 金融科技企业拟在此设立研发总部
天天滚动:双方家长有矛盾怎么办 双方家长有矛盾怎么解决
全球微资讯!websocket
海外直播源码技术文字聊天功能的配置_当前速讯
深入浅出Spring原理及实战「缓存Cache开发系列」
每日快看:缯怎么读怎么组词_缯怎么读
环球时讯:英特尔开始停产11代处理器
王治郅视频_王治郅事件-全球最新
莫兰迪作品高清大图_莫兰迪作品 每日精选
天天消息!22.5万起 小鹏G6开启预售 官方:真正的6边形战士来了
全球实时:惠普推出新款无线耳机:充电盒自带触控屏 控制音乐播放
全球快播:高考考生遇采访喊话:取消调休 取消调休
网购格力空调收到“木各力”牌 商家拒绝退款
余承东:特斯拉FSD进入中国我们也不怕 依然可以遥遥领先
焦点快播:gtx260m显卡(gtx260m)
高考前最后一课丨常德市七中老师收到全班学生送的礼物 笑着笑着就哭了_当前快讯
dnf带幻影的史诗武器(dnf幻影手镯) 世界热闻
当前速递!猪菜磨底VS服务回暖!5月CPI或小幅反弹
热讯:流年
世界百事通!深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等
每日资讯:美团太细了:Springcloud 微服务优雅停机,如何实现?
全网Jenkins+Gitee+Docker/SSH 部署避坑点总结 每日关注
全球通讯!人工智能(AI)热潮提振了的科技股,并推高了对冲基金的回报,帮助他们挽回去年的损失
今日快讯:热力学第一定律功能关系(热力学第一定律)
热消息:favorite subject(favorite)
天天看点:辽宁省沈阳市2023-06-06 16:27发布大风蓝色预警
每日报道:qq显示iphone在线没有显示4g(qq显示iphone在线)
全球百事通!正整数包括什么分数(正整数包括什么)
鸡汤用高压锅煮要煮多久 高压锅炖鸡汤要压多少分钟
守护者之铠(永恒守护者腿铠)-全球消息
充满“海洋”味!比亚迪宋PLUS冠军版来了:选它还是四驱哈弗枭龙MAX
世界热头条丨精装版丰田陆巡 全新雷克萨斯GX全球首发:能越野的日系豪华!
美国一列满载全新汽车的火车脱轨:弯弯曲曲扭成“贪吃蛇”
快消息!K60系列终极大作!曝Redmi K60 Ultra 7月登场
重庆一女生考完哭着说终于不用做数学了:网友神回复-焦点观察
汉字的演变历史手抄报_汉字的演变历史 天天最新
高考“钉子户”梁实谈第27次高考:文综重大失误
世界短讯!珍惜时间的名人小故事(珍惜时间的名人)
全球播报:百度贴吧怎么注册帐号登录(百度贴吧怎么注册帐号)
热推荐:太极杨氏85赵斌视频(赵斌杨氏85式太极拳)
Nginx安装部署及性能优化 当前看点
每日动态!Map
恩施市教育局电子政务系统(恩施市教育局电子政务登录)
tom ford男友(sufjan stevens男朋友)_头条焦点
全球通讯!“宗”这个字应该如何正确读音?
董明珠:格力空调10年免费包修 对手不敢这么做
天玑9200手机出手 5G上行速度跑出440Mbps新纪录-世界热点
每日看点!扎克伯格批苹果Vision Pro头显:社交属性太差 不如跟Meta
梅西打义乌厂商措手不及:迈阿密新队服来不及生产 每日时讯
北大屠夫称大学生就业难关键在父母:大学生是普通教育 不要把自己当精英 世界播报
今日观点!医保卡_医保卡里的钱可以取出来吗
qq用手机怎么设置空白名字_手机qq怎么弄空白名字
当前速看:【机构调研记录】凯石基金调研江苏雷利
RTOS测试(韩国方案)