AipFace.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <?php
  2. /*
  3. * Copyright (c) 2017 Baidu.com, Inc. All Rights Reserved
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  6. * use this file except in compliance with the License. You may obtain a copy of
  7. * the License at
  8. *
  9. * Http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  13. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  14. * License for the specific language governing permissions and limitations under
  15. * the License.
  16. */
  17. require_once 'lib/AipBase.php';
  18. class AipFace extends AipBase {
  19. /**
  20. * 人脸检测 detect api url
  21. * @var string
  22. */
  23. private $detectUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/detect';
  24. /**
  25. * 人脸比对 match api url
  26. * @var string
  27. */
  28. private $matchUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/match';
  29. /**
  30. * 人脸识别 identify api url
  31. * @var string
  32. */
  33. private $identifyUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/identify';
  34. /**
  35. * 人脸认证 verify api url
  36. * @var string
  37. */
  38. private $verifyUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/verify';
  39. /**
  40. * M:N 识别 multi_identify api url
  41. * @var string
  42. */
  43. private $multiIdentifyUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/multi-identify';
  44. /**
  45. * 人脸注册 user_add api url
  46. * @var string
  47. */
  48. private $userAddUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/add';
  49. /**
  50. * 人脸更新 user_update api url
  51. * @var string
  52. */
  53. private $userUpdateUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/update';
  54. /**
  55. * 人脸删除 user_delete api url
  56. * @var string
  57. */
  58. private $userDeleteUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/delete';
  59. /**
  60. * 用户信息查询 user_get api url
  61. * @var string
  62. */
  63. private $userGetUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/get';
  64. /**
  65. * 组列表查询 group_getlist api url
  66. * @var string
  67. */
  68. private $groupGetlistUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/group/getlist';
  69. /**
  70. * 组内用户列表查询 group_getusers api url
  71. * @var string
  72. */
  73. private $groupGetusersUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/group/getusers';
  74. /**
  75. * 组间复制用户 group_adduser api url
  76. * @var string
  77. */
  78. private $groupAdduserUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/group/adduser';
  79. /**
  80. * 组内删除用户 group_deleteuser api url
  81. * @var string
  82. */
  83. private $groupDeleteuserUrl = 'https://aip.baidubce.com/rest/2.0/face/v2/faceset/group/deleteuser';
  84. /**
  85. * 人脸检测接口
  86. *
  87. * @param string $image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
  88. * @param array $options - 可选参数对象,key: value都为string类型
  89. * @description options列表:
  90. * max_face_num 最多处理人脸数目,默认值1
  91. * face_fields 包括age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities信息,逗号分隔,默认只返回人脸框、概率和旋转角度
  92. * @return array
  93. */
  94. public function detect($image, $options=array()){
  95. $data = array();
  96. $data['image'] = base64_encode($image);
  97. $data = array_merge($data, $options);
  98. return $this->request($this->detectUrl, $data);
  99. }
  100. /**
  101. * 人脸比对接口
  102. *
  103. * @param string $images - base64编码后的多张图片数据,半角逗号分隔,单次请求总共最大20M
  104. * @param array $options - 可选参数对象,key: value都为string类型
  105. * @description options列表:
  106. * ext_fields 返回质量信息,取值固定:目前支持qualities(质量检测)。(对所有图片都会做改处理)
  107. * image_liveness 返回的活体信息,“faceliveness,faceliveness” 表示对比对的两张图片都做活体检测;“,faceliveness” 表示对第一张图片不做活体检测、第二张图做活体检测;“faceliveness,” 表示对第一张图片做活体检测、第二张图不做活体检测;<br>**注:需要用于判断活体的图片,图片中的人脸像素面积需要不小于100px\*100px,人脸长宽与图片长宽比例,不小于1/3**
  108. * types 请求对比的两张图片的类型,示例:“7,13”<br>**12**表示带水印证件照:一般为带水印的小图,如公安网小图<br>**7**表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等<br>**13**表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片,**注**:需要确保人脸部分不可太小,通常为100px\*100px
  109. * @return array
  110. */
  111. public function match($images, $options=array()){
  112. $data = array();
  113. $arr = array();
  114. foreach($images as $image){
  115. $arr[] = base64_encode($image);
  116. }
  117. $data['images'] = implode(',', $arr);
  118. $data = array_merge($data, $options);
  119. return $this->request($this->matchUrl, $data);
  120. }
  121. /**
  122. * 人脸识别接口
  123. *
  124. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  125. * @param string $image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
  126. * @param array $options - 可选参数对象,key: value都为string类型
  127. * @description options列表:
  128. * ext_fields 特殊返回信息,多个用逗号分隔,取值固定: 目前支持faceliveness(活体检测)。**注:需要用于判断活体的图片,图片中的人脸像素面积需要不小于100px\*100px,人脸长宽与图片长宽比例,不小于1/3**
  129. * user_top_num 返回用户top数,默认为1,最多返回5个
  130. * @return array
  131. */
  132. public function identifyUser($groupId, $image, $options=array()){
  133. $data = array();
  134. $data['group_id'] = $groupId;
  135. $data['image'] = base64_encode($image);
  136. $data = array_merge($data, $options);
  137. return $this->request($this->identifyUrl, $data);
  138. }
  139. /**
  140. * 人脸认证接口
  141. *
  142. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  143. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  144. * @param string $image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
  145. * @param array $options - 可选参数对象,key: value都为string类型
  146. * @description options列表:
  147. * top_num 返回用户top数,默认为1
  148. * ext_fields 特殊返回信息,多个用逗号分隔,取值固定: 目前支持faceliveness(活体检测)。**注:需要用于判断活体的图片,图片中的人脸像素面积需要不小于100px\*100px,人脸长宽与图片长宽比例,不小于1/3**
  149. * @return array
  150. */
  151. public function verifyUser($uid, $groupId, $image, $options=array()){
  152. $data = array();
  153. $data['uid'] = $uid;
  154. $data['group_id'] = $groupId;
  155. $data['image'] = base64_encode($image);
  156. $data = array_merge($data, $options);
  157. return $this->request($this->verifyUrl, $data);
  158. }
  159. /**
  160. * M:N 识别接口
  161. *
  162. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  163. * @param string $image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
  164. * @param array $options - 可选参数对象,key: value都为string类型
  165. * @description options列表:
  166. * ext_fields 特殊返回信息,多个用逗号分隔,取值固定: 目前支持faceliveness(活体检测)。**注:需要用于判断活体的图片,图片中的人脸像素面积需要不小于100px\*100px,人脸长宽与图片长宽比例,不小于1/3**
  167. * detect_top_num 检测多少个人脸进行比对,默认值1(最对返回10个)
  168. * user_top_num 返回识别结果top人数”,当同一个人有多张图片时,只返回比对最高的1个分数(即,scores参数只有一个值),默认为1(最多返回20个)
  169. * @return array
  170. */
  171. public function multiIdentify($groupId, $image, $options=array()){
  172. $data = array();
  173. $data['group_id'] = $groupId;
  174. $data['image'] = base64_encode($image);
  175. $data = array_merge($data, $options);
  176. return $this->request($this->multiIdentifyUrl, $data);
  177. }
  178. /**
  179. * 人脸注册接口
  180. *
  181. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  182. * @param string $userInfo - 用户资料,长度限制256B
  183. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  184. * @param string $image - 图像base64编码,**每次仅支持单张图片,图片编码后大小不超过10M**。为保证后续识别的效果较佳,建议注册的人脸,为用户正面人脸。
  185. * @param array $options - 可选参数对象,key: value都为string类型
  186. * @description options列表:
  187. * action_type 参数包含append、replace。**如果为“replace”,则每次注册时进行替换replace(新增或更新)操作,默认为append操作**。例如:uid在库中已经存在时,对此uid重复注册时,新注册的图片默认会**追加**到该uid下,如果手动选择`action_type:replace`,则会用新图替换库中该uid下所有图片。
  188. * @return array
  189. */
  190. public function addUser($uid, $userInfo, $groupId, $image, $options=array()){
  191. $data = array();
  192. $data['uid'] = $uid;
  193. $data['user_info'] = $userInfo;
  194. $data['group_id'] = $groupId;
  195. $data['image'] = base64_encode($image);
  196. $data = array_merge($data, $options);
  197. return $this->request($this->userAddUrl, $data);
  198. }
  199. /**
  200. * 人脸更新接口
  201. *
  202. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  203. * @param string $userInfo - 用户资料,长度限制256B
  204. * @param string $groupId - 更新指定groupid下uid对应的信息
  205. * @param string $image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
  206. * @param array $options - 可选参数对象,key: value都为string类型
  207. * @description options列表:
  208. * action_type 目前仅支持replace,uid不存在时,不报错,会自动变为注册操作;未选择该参数时,如果uid不存在会提示错误
  209. * @return array
  210. */
  211. public function updateUser($uid, $userInfo, $groupId, $image, $options=array()){
  212. $data = array();
  213. $data['uid'] = $uid;
  214. $data['user_info'] = $userInfo;
  215. $data['group_id'] = $groupId;
  216. $data['image'] = base64_encode($image);
  217. $data = array_merge($data, $options);
  218. return $this->request($this->userUpdateUrl, $data);
  219. }
  220. /**
  221. * 人脸删除接口
  222. *
  223. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  224. * @param array $options - 可选参数对象,key: value都为string类型
  225. * @description options列表:
  226. * group_id 删除指定groupid下uid对应的信息
  227. * @return array
  228. */
  229. public function deleteUser($uid, $options=array()){
  230. $data = array();
  231. $data['uid'] = $uid;
  232. $data = array_merge($data, $options);
  233. return $this->request($this->userDeleteUrl, $data);
  234. }
  235. /**
  236. * 用户信息查询接口
  237. *
  238. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  239. * @param array $options - 可选参数对象,key: value都为string类型
  240. * @description options列表:
  241. * group_id 选择指定group_id则只查找group列表下的uid内容,如果不指定则查找所有group下对应uid的信息
  242. * @return array
  243. */
  244. public function getUser($uid, $options=array()){
  245. $data = array();
  246. $data['uid'] = $uid;
  247. $data = array_merge($data, $options);
  248. return $this->request($this->userGetUrl, $data);
  249. }
  250. /**
  251. * 组列表查询接口
  252. *
  253. * @param array $options - 可选参数对象,key: value都为string类型
  254. * @description options列表:
  255. * start 默认值0,起始序号
  256. * end 返回数量,默认值100,最大值1000
  257. * @return array
  258. */
  259. public function getGroupList($options=array()){
  260. $data = array();
  261. $data = array_merge($data, $options);
  262. return $this->request($this->groupGetlistUrl, $data);
  263. }
  264. /**
  265. * 组内用户列表查询接口
  266. *
  267. * @param string $groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
  268. * @param array $options - 可选参数对象,key: value都为string类型
  269. * @description options列表:
  270. * start 默认值0,起始序号
  271. * end 返回数量,默认值100,最大值1000
  272. * @return array
  273. */
  274. public function getGroupUsers($groupId, $options=array()){
  275. $data = array();
  276. $data['group_id'] = $groupId;
  277. $data = array_merge($data, $options);
  278. return $this->request($this->groupGetusersUrl, $data);
  279. }
  280. /**
  281. * 组间复制用户接口
  282. *
  283. * @param string $srcGroupId - 从指定group里复制信息
  284. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  285. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  286. * @param array $options - 可选参数对象,key: value都为string类型
  287. * @description options列表:
  288. * @return array
  289. */
  290. public function addGroupUser($srcGroupId, $groupId, $uid, $options=array()){
  291. $data = array();
  292. $data['src_group_id'] = $srcGroupId;
  293. $data['group_id'] = $groupId;
  294. $data['uid'] = $uid;
  295. $data = array_merge($data, $options);
  296. return $this->request($this->groupAdduserUrl, $data);
  297. }
  298. /**
  299. * 组内删除用户接口
  300. *
  301. * @param string $groupId - 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。如果需要将一个uid注册到多个group下,group\_id需要用多个逗号分隔,每个group_id长度限制为48个英文字符。**注:group无需单独创建,注册用户时则会自动创建group。**<br>**产品建议**:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率
  302. * @param string $uid - 用户id(由数字、字母、下划线组成),长度限制128B
  303. * @param array $options - 可选参数对象,key: value都为string类型
  304. * @description options列表:
  305. * @return array
  306. */
  307. public function deleteGroupUser($groupId, $uid, $options=array()){
  308. $data = array();
  309. $data['group_id'] = $groupId;
  310. $data['uid'] = $uid;
  311. $data = array_merge($data, $options);
  312. return $this->request($this->groupDeleteuserUrl, $data);
  313. }
  314. }