范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

最简单的人脸检测(免费调用百度AI开放平台接口)

  欢迎访问我的GitHub
  这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos  本篇概览在检测人脸数量、位置、性别、口罩等场景时,可以考虑使用百度开放平台提供的web接口,一个web请求就能完成检测得到结果,本篇记录了从申请到真实调用的完整过程,由以下步骤组成:
  注册百度账号按照您的实际情况,注册个人或者企业账号,这个不多说了 登录百度智能云使用刚才注册号的账号登录,地址是:https://login.bce.baidu.com/ 实名认证打开百度智能云的控制台:https://console.bce.baidu.com/ 如下图,点击下图红框中的两个按钮,完成激活和实名认证:
  创建应用为了能够使用百度服务,需要创建一个应用 先选择类别,在控制台页面,操作如下图,点击红框四:
  此刻已跳转到管理引用的页面,点击下图红框中的 创建应用
  为了免费使用百度的服务,先点击下图红框中的 去领取 :
  在领取页面勾选人脸检测:
  领取完成后,回到创建应用的页面,发现这些服务已经被勾选,如下图:
  应用相关的信息填写完成后,提交表单即可完成创建应用 拿到API Key和Secret Key在应用列表页面拿到API Key和Secret Key,这些都是调用百度服务的关键授权信息,如下图红框所示:
  得到access_token在使用百度提供的各种服务(如人脸检测)的时候,需要带上授权信息证明你有使用该服务的权限,这个授权信息就是 access_token 最简单的方式就是curl命令获取 curl -i -k "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的API Key】&client_secret=【百度云应用的Secret Key】"这里用postman尝试上述请求,如下图,红框中就是这次请求咱们要得到的 access_token 信息:
  拿到access_token,就可以开始的调用百度的服务了,如下图,官方文档说了这个access_token的有效期是30天:
  关于百度云授权信息的更多信息请在此查看:https://cloud.baidu.com/doc/FACE/s/Tkqahnjtk 编码百度关于人脸检测的文档:https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 人脸检测服务是个web接口,也能通过操作curl或者postman来完成,但是为了在代码中使用百度的服务,这里写一段代码来完成人脸检测 今天的项目是个普通的maven工程,没有使用spring或者spingboot框架,只有一些简单的java类和main方法 首先要在项目中引入下面三个库:    	org.projectlombok     lombok     1.18.18    	com.squareup.okhttp3 	okhttp 	3.10.0    	com.fasterxml.jackson.core 	jackson-databind 	2.11.0 先新建一个对象 FaceDetectRequest.java ,用于保存请求参数:package com.bolingcavalry.grabpush.bean.request;  import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;  /**  * @author willzhao  * @version 1.0  * @description 请求对象  * @date 2022/1/1 16:21  */ @Data public class FaceDetectRequest {     // 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断     String image;      // 图片类型     // BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;     // URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);     // FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。     @JsonProperty("image_type")     String imageType;      // 包括age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息     //逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度     @JsonProperty("face_field")     String faceField;      // 最多处理人脸的数目,默认值为1,根据人脸检测排序类型检测图片中排序第一的人脸(默认为人脸面积最大的人脸),最大值120     @JsonProperty("max_face_num")     int maxFaceNum;      // 人脸的类型     // LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等     // IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片     // WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图     // CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片     // 默认LIVE     @JsonProperty("face_type")     String faceType;      // 活体控制 检测结果中不符合要求的人脸会被过滤     // NONE: 不进行控制     // LOW:较低的活体要求(高通过率 低攻击拒绝率)     // NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)     // HIGH: 较高的活体要求(高攻击拒绝率 低通过率)     // 默认NONE     @JsonProperty("liveness_control")     String livenessControl;          // 人脸检测排序类型     // 0:代表检测出的人脸按照人脸面积从大到小排列     // 1:代表检测出的人脸按照距离图片中心从近到远排列     // 默认为0     @JsonProperty("face_sort_type")     int faceSortType; }其次是响应对象 FaceDetectResponse.java :package com.bolingcavalry.grabpush.bean.response;  import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.ToString;  import java.io.Serializable; import java.util.List;  /**  * @author willzhao  * @version 1.0  * @description TODO  * @date 2022/1/1 13:30  */ @Data @ToString public class FaceDetectResponse implements Serializable {     // 返回码     @JsonProperty("error_code")     String errorCode;     // 描述信息     @JsonProperty("error_msg")     String errorMsg;     // 返回的具体内容     Result result;      /**      * @author willzhao      * @version 1.0      * @description 返回的具体内容      * @date 2022/1/1 16:01      */     @Data     public static class Result {         // 人脸数量         @JsonProperty("face_num")         private int faceNum;         // 每个人脸的信息         @JsonProperty("face_list")         List faceList;          /**          * @author willzhao          * @version 1.0          * @description 检测出来的人脸对象          * @date 2022/1/1 16:03          */         @Data         public static class Face {             // 位置             Location location;             // 是人脸的置信度             @JsonProperty("face_probability")             double face_probability;             // 口罩             Mask mask;              /**              * @author willzhao              * @version 1.0              * @description 人脸在图片中的位置              * @date 2022/1/1 16:04              */             @Data             public static class Location {                 double left;                 double top;                 double width;                 double height;                 double rotation;             }              /**              * @author willzhao              * @version 1.0              * @description 口罩对象              * @date 2022/1/1 16:11              */             @Data             public static class Mask {                 int type;                 double probability;             }         }     } }这里有一处要注意:FaceDetectResponse对象中的字段是少于真实响应返回的字段的,这是因为这个demo不需要完整的返回内容,因此只要选择应用需要的字段定义在FaceDetectResponse.java中即可 最后是完整的服务类 BaiduCloudService.java ,如下所示,即读取图片 -> 转base64 -> 构造请求对象 -> 提交请求 -> 收到响应 -> 解析响应:package com.bolingcavalry.grabpush.extend;  import com.bolingcavalry.grabpush.bean.request.FaceDetectRequest; import com.bolingcavalry.grabpush.bean.response.FaceDetectResponse; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.*; import sun.misc.BASE64Encoder; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream;  /**  * @author willzhao  * @version 1.0  * @description 百度云服务的调用  * @date 2022/1/1 11:06  */ public class BaiduCloudService {      // 转换     BASE64Encoder encoder = new BASE64Encoder();      OkHttpClient client = new OkHttpClient();      static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");      static final String URL_TEMPLATE = "https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=%s";      String token;      ObjectMapper mapper = new ObjectMapper();      public BaiduCloudService(String token) {         this.token = token;                  // 重要:反序列化的时候,字符的字段如果比类的字段多,下面这个设置可以确保反序列化成功         mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);     }      /**      * 将指定位置的图片转为base64字符串      * @param imagePath      * @return      */     private String img2Base64(String imagePath) {         InputStream inputStream = null;         byte[] data = null;          try {             inputStream = new FileInputStream(imagePath);             data = new byte[inputStream.available()];             inputStream.read(data);             inputStream.close();         } catch (IOException ioException) {             ioException.printStackTrace();         }          return null==data ? null :encoder.encode(data);     }      /**      * 检测指定的图片      * @param imageBase64      * @return      */     public FaceDetectResponse detect(String imageBase64) {         // 请求对象         FaceDetectRequest faceDetectRequest = new FaceDetectRequest();         faceDetectRequest.setImageType("BASE64");         faceDetectRequest.setFaceField("mask");         faceDetectRequest.setMaxFaceNum(6);         faceDetectRequest.setFaceType("LIVE");         faceDetectRequest.setLivenessControl("NONE");         faceDetectRequest.setFaceSortType(0);         faceDetectRequest.setImage(imageBase64);          FaceDetectResponse faceDetectResponse = null;          try {             // 用Jackson将请求对象序列化成字符串             String jsonContent = mapper.writeValueAsString(faceDetectRequest);              //             RequestBody requestBody = RequestBody.create(JSON, jsonContent);             Request request = new Request                     .Builder()                     .url(String.format(URL_TEMPLATE, token))                     .post(requestBody)                     .build();             Response response = client.newCall(request).execute();             String rawRlt = response.body().string();             faceDetectResponse = mapper.readValue(rawRlt, FaceDetectResponse.class);         } catch (IOException ioException) {             ioException.printStackTrace();         }          return faceDetectResponse;     }      public static void main(String[] args) {         // 图片在本地的位置         String imagePath = "E:temp2022011pic1.jpeg";          // 百度云的token,是通过此接口得到的:https://aip.baidubce.com/oauth/2.0/token         String token = "24.95xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx.xxxxxxxxxx.xxxxxx-xxxxxxxx";          // 实例化服务对象         BaiduCloudService service = new BaiduCloudService(token);          // 将图片转为base64字符串         String imageBase64 = service.img2Base64(imagePath);          // 向百度服务发请求,检测人脸         FaceDetectResponse faceDetectResponse = service.detect(imageBase64);          // 输出检测结果         System.out.println(faceDetectResponse);     } }确保用于检测的照片与上述代码中的路径一致(E:	emp2022011pic1.jpeg),我这里选用了一张戴口罩的单人照,如下图:
  执行BaiduCloudService的main方法,控制台将百度返回的检测结果打印出来,注意下面的内容并非JSON,而是lombok的@ToString注解拼接出的效果:
  至此,通过百度的web接口调用人脸检测的实战已完成,可见有了云平台的支持,对于使用方来说开发过程变得非常简单 使用限制既然是免费的,就很难十全十美,这样的web服务存在QPS限制,如下图,一秒钟不能超过两个,如果完成了企业认证,可以增加到十个,如果依旧不能满足需要,就只能付费了:
  欢迎关注头条号:程序员欣宸学习路上,你不孤单,欣宸原创一路相伴...

手机厂商要消灭SIM卡?苹果公司新一代iPhone手机发布以后,其采用的两项技术引发了公众关注一项是卫星通讯技术,另一项是美版iPhone14不再需要SIM卡,改用eSIM替代。目前我国eSIM在消费电子2022快手电商116商家大会将于9月29日开启9月29日下午2点,2022快手电商116商家大会将以线上直播的形式举办。本次大会以新增量新繁荣为主题,不仅将正式宣布今年116心意购物节的新政策新玩法新福利新机遇,还将官宣新的经海底陨石坑还原天地对撞真相美国趣味科学网站8月17日刊登题为第二颗杀手小行星彻底灭绝了恐龙吗?西非的陨石坑表明的确如此的文章,作者是斯蒂芬妮帕帕斯。全文摘编如下在西非海岸附近发现一个疑似恐龙时代末期形成的陨小米中端新机通过3C认证入网67W快充,即将发布IT之家9月28日消息,小米现有一款型号为22101316C的小米5G新机通过了3C认证,配备最高67W的MDY12EF充电器,也就是小米11ProUltra的67W充电器。数码博视频国内首款量产民用氢能自行车上线,官方售价12800元,你看好吗?视频加载中氢能自行车骑起来还是挺轻松的9月28日上午,常州市永安行氢能自行车宣布上市。该车瞄准民用消费市场,采用低压储氢和换氢技术,零碳环保,是目前国内首款大规模量产的面向消费端的买手机少花冤枉钱,目前这4部手机最值得买,看看你会怎么选?买手机少花冤枉钱,目前这4部手机最值得买,看看你会怎么选?第一部realme真我GT2大师探索版三千多元,可以买到一个没有短板的旗舰,我自认为还是很值得买的,给人一种少花冤枉钱的感4。4亿年前鱼类化石揭示有颌脊椎动物的崛起志留纪早期五种古鱼的三维复原图。(中科院古脊椎动物与古人类研究所供图)新华社北京9月28日电(记者张泉)我国科学家近期在重庆贵州等地约4。4亿年前的志留纪早期地层中发现重庆特异埋藏vivoX90Pro配置很实在,5000mAh三星E6屏,16G512G不到五千虽然这段时间旗舰手机的热度一直围绕在华为Mate50系列和iPhone14系列身上,但这并不意味着高端机销量中就是他们两个所有,不要忘了,在今年目前为止国产市场高端机销量数据中,占博鳌亚洲论坛副理事长周小川要负责任地管理好人工智能,创造更多面向未来的就业每经记者王帆每经编辑董兴生9月28日,博鳌亚洲论坛国际科技与创新论坛第二届大会在广州召开,博鳌亚洲论坛副理事长周小川在发表视频致辞时指出新冠疫情肆虐全球三年来,疫苗研发和广泛接种,高出36。4!华为开始反击,Mate50海外版变了就在前不久,华为Mate50系列机型一发布,线上线下就被一抢而空,如今华为已被迫追加订单,试图尽力去满足消费者的需求。这次,没有了麒麟芯片的加持,华为Mate50的定价并没有显得很支付宝出手!2万余个账户被永久冻结今年以来,支付宝加速对违规账户进行处理,数万个账户被永久冻结。撰文张浩东出品支付百科近日,支付百科注意到,支付宝安全中心发布了针对虚假刷单类欺诈行为深度治理的公告,严厉打击刷单欺诈
夺冠后勇士会保留全班人马吗?今年夏天谁去谁留?一般来说冠军球队都不会轻易改变已有的阵容结构,不过勇士也有属于自己的问题,比如本赛季勇士薪资总额高达1。77亿美元,如果阵容全员保留下来勇士下赛季奢侈税将是一个天文数字,而且因为薪勇士多人表示留队意愿鲁尼已遭多队哄抢,勇士该如何保留冠军班底离勇士队夺冠结束还没有几天,勇士队的众将已经在为下赛季考虑了,维金斯波特和小佩顿均已经表示他们想留在勇士队。嘴哥的合同还有一年就要到期,今年嘴哥的发挥相当于勇士最全面的选手了,他的炸裂!森林狼1换1报价杜兰特,艾顿2换1曝光,湖人完成第二笔签约目前,202122赛季正式落下帷幕,联盟各队也都开始将目光转移到交易市场之上,力争帮助球队在交易市场之上引进心仪球员,以在新赛季取得更上一层楼的战绩。随着交易市场的临近,越来越多的或说再见!4年4400万,勇士冠军功臣收到溢价合同北京时间6月20号,NBA总决赛落下帷幕之后,各支球队已经将目光转移到休赛期,力争在今夏这没有硝烟的抢人大战中为球队完成阵容的全面升级,以在新赛季取得更上一层楼的战绩。近段时间,球八冠王马奎斯恢复状况雷普索尔本田车队经理重申了来自他车队的关于这位八冠王恢复过程的积极报道关于马克马奎斯的恢复过程,本田车队传来了积极的消息。根据车队老板阿尔贝托普伊格的说法,这位雷普索尔本田车手在对苹果商店首先在美国成立工会马里兰州TowsonTownCenter苹果商店的员工投票决定加入工会,在周六投票结束后,成立了美国第一个苹果工人工会。65票赞成,33票反对,他们加入了国际机械师和航空航天工人协大疆Inspire3或兼容DJI高亮图传监视器依旧沿用TB50电池前不久大疆正式发布了DJIRS3和DJIRS3Pro两款相机稳定器和诸多影像配件,不过大疆今年的新品并不会到此为止,最近又传出了不少大疆Inspire3的相关信息,显然这款无人机的基于SpringBoot的MCMS系统,完全开源,直接商用太爽了若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。前端采用VueElementUI。后端采用SpringBootSpringSecurityRedisJwt。权限认证东北三省楼市继续探底,5月成交金额大跌51,年累计跌幅达48在本轮市下行中,东三省(辽宁黑龙江吉林)异常突出14月交易额大跌47,5月下跌51,合计15月下跌达48。在前面谈到东三省楼市的文章(点击这里查看)中,不少东北网友为下跌拍手称快。投资养老公寓,年化收益818,你心动了吗?参加培训,安排大家吃饭并发放礼品,购买老年公寓理财产品,年化收益818,老年公寓运营后,还可享受优惠入住。这样的好事你心动了吗?2016年7月2019年5月,在未经有关部门批准的情房山区发放1000万元汽车消费券北京商报讯(记者刘卓澜)6月20日,房山区正式启动汽车消费券发放活动。据介绍,本轮汽车消费券发放总金额为1000万元。针对不同购车需求设置了额度不等的购车补贴,消费者可在参与本轮活