face.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. # -*- coding: utf-8 -*-
  2. """
  3. 人脸识别
  4. """
  5. import re
  6. import sys
  7. import math
  8. import time
  9. from .base import AipBase
  10. from .base import base64
  11. from .base import json
  12. from .base import urlencode
  13. from .base import quote
  14. class AipFace(AipBase):
  15. """
  16. 人脸识别
  17. """
  18. __detectUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/detect'
  19. __searchUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/search'
  20. __multiSearchUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/multi-search'
  21. __userAddUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add'
  22. __userUpdateUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/update'
  23. __faceDeleteUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete'
  24. __userGetUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/get'
  25. __faceGetlistUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/getlist'
  26. __groupGetusersUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getusers'
  27. __userCopyUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/copy'
  28. __userDeleteUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/delete'
  29. __groupAddUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/add'
  30. __groupDeleteUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/delete'
  31. __groupGetlistUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getlist'
  32. __personVerifyUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/person/verify'
  33. __videoSessioncodeUrl = 'https://aip.baidubce.com/rest/2.0/face/v1/faceliveness/sessioncode'
  34. def detect(self, image, image_type, options=None):
  35. """
  36. 人脸检测
  37. """
  38. options = options or {}
  39. data = {}
  40. data['image'] = image
  41. data['image_type'] = image_type
  42. data.update(options)
  43. return self._request(self.__detectUrl, json.dumps(data, ensure_ascii=False), {
  44. 'Content-Type': 'application/json',
  45. })
  46. def search(self, image, image_type, group_id_list, options=None):
  47. """
  48. 人脸搜索
  49. """
  50. options = options or {}
  51. data = {}
  52. data['image'] = image
  53. data['image_type'] = image_type
  54. data['group_id_list'] = group_id_list
  55. data.update(options)
  56. return self._request(self.__searchUrl, json.dumps(data, ensure_ascii=False), {
  57. 'Content-Type': 'application/json',
  58. })
  59. def multiSearch(self, image, image_type, group_id_list, options=None):
  60. """
  61. 人脸搜索 M:N 识别
  62. """
  63. options = options or {}
  64. data = {}
  65. data['image'] = image
  66. data['image_type'] = image_type
  67. data['group_id_list'] = group_id_list
  68. data.update(options)
  69. return self._request(self.__multiSearchUrl, json.dumps(data, ensure_ascii=False), {
  70. 'Content-Type': 'application/json',
  71. })
  72. def addUser(self, image, image_type, group_id, user_id, options=None):
  73. """
  74. 人脸注册
  75. """
  76. options = options or {}
  77. data = {}
  78. data['image'] = image
  79. data['image_type'] = image_type
  80. data['group_id'] = group_id
  81. data['user_id'] = user_id
  82. data.update(options)
  83. return self._request(self.__userAddUrl, json.dumps(data, ensure_ascii=False), {
  84. 'Content-Type': 'application/json',
  85. })
  86. def updateUser(self, image, image_type, group_id, user_id, options=None):
  87. """
  88. 人脸更新
  89. """
  90. options = options or {}
  91. data = {}
  92. data['image'] = image
  93. data['image_type'] = image_type
  94. data['group_id'] = group_id
  95. data['user_id'] = user_id
  96. data.update(options)
  97. return self._request(self.__userUpdateUrl, json.dumps(data, ensure_ascii=False), {
  98. 'Content-Type': 'application/json',
  99. })
  100. def faceDelete(self, user_id, group_id, face_token, options=None):
  101. """
  102. 人脸删除
  103. """
  104. options = options or {}
  105. data = {}
  106. data['user_id'] = user_id
  107. data['group_id'] = group_id
  108. data['face_token'] = face_token
  109. data.update(options)
  110. return self._request(self.__faceDeleteUrl, json.dumps(data, ensure_ascii=False), {
  111. 'Content-Type': 'application/json',
  112. })
  113. def getUser(self, user_id, group_id, options=None):
  114. """
  115. 用户信息查询
  116. """
  117. options = options or {}
  118. data = {}
  119. data['user_id'] = user_id
  120. data['group_id'] = group_id
  121. data.update(options)
  122. return self._request(self.__userGetUrl, json.dumps(data, ensure_ascii=False), {
  123. 'Content-Type': 'application/json',
  124. })
  125. def faceGetlist(self, user_id, group_id, options=None):
  126. """
  127. 获取用户人脸列表
  128. """
  129. options = options or {}
  130. data = {}
  131. data['user_id'] = user_id
  132. data['group_id'] = group_id
  133. data.update(options)
  134. return self._request(self.__faceGetlistUrl, json.dumps(data, ensure_ascii=False), {
  135. 'Content-Type': 'application/json',
  136. })
  137. def getGroupUsers(self, group_id, options=None):
  138. """
  139. 获取用户列表
  140. """
  141. options = options or {}
  142. data = {}
  143. data['group_id'] = group_id
  144. data.update(options)
  145. return self._request(self.__groupGetusersUrl, json.dumps(data, ensure_ascii=False), {
  146. 'Content-Type': 'application/json',
  147. })
  148. def userCopy(self, user_id, options=None):
  149. """
  150. 复制用户
  151. """
  152. options = options or {}
  153. data = {}
  154. data['user_id'] = user_id
  155. data.update(options)
  156. return self._request(self.__userCopyUrl, json.dumps(data, ensure_ascii=False), {
  157. 'Content-Type': 'application/json',
  158. })
  159. def deleteUser(self, group_id, user_id, options=None):
  160. """
  161. 删除用户
  162. """
  163. options = options or {}
  164. data = {}
  165. data['group_id'] = group_id
  166. data['user_id'] = user_id
  167. data.update(options)
  168. return self._request(self.__userDeleteUrl, json.dumps(data, ensure_ascii=False), {
  169. 'Content-Type': 'application/json',
  170. })
  171. def groupAdd(self, group_id, options=None):
  172. """
  173. 创建用户组
  174. """
  175. options = options or {}
  176. data = {}
  177. data['group_id'] = group_id
  178. data.update(options)
  179. return self._request(self.__groupAddUrl, json.dumps(data, ensure_ascii=False), {
  180. 'Content-Type': 'application/json',
  181. })
  182. def groupDelete(self, group_id, options=None):
  183. """
  184. 删除用户组
  185. """
  186. options = options or {}
  187. data = {}
  188. data['group_id'] = group_id
  189. data.update(options)
  190. return self._request(self.__groupDeleteUrl, json.dumps(data, ensure_ascii=False), {
  191. 'Content-Type': 'application/json',
  192. })
  193. def getGroupList(self, options=None):
  194. """
  195. 组列表查询
  196. """
  197. options = options or {}
  198. data = {}
  199. data.update(options)
  200. return self._request(self.__groupGetlistUrl, json.dumps(data, ensure_ascii=False), {
  201. 'Content-Type': 'application/json',
  202. })
  203. def personVerify(self, image, image_type, id_card_number, name, options=None):
  204. """
  205. 身份验证
  206. """
  207. options = options or {}
  208. data = {}
  209. data['image'] = image
  210. data['image_type'] = image_type
  211. data['id_card_number'] = id_card_number
  212. data['name'] = name
  213. data.update(options)
  214. return self._request(self.__personVerifyUrl, json.dumps(data, ensure_ascii=False), {
  215. 'Content-Type': 'application/json',
  216. })
  217. def videoSessioncode(self, options=None):
  218. """
  219. 语音校验码接口
  220. """
  221. options = options or {}
  222. data = {}
  223. data.update(options)
  224. return self._request(self.__videoSessioncodeUrl, json.dumps(data, ensure_ascii=False), {
  225. 'Content-Type': 'application/json',
  226. })
  227. __faceverifyUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/faceverify'
  228. def faceverify(self, images):
  229. """
  230. 在线活体检测
  231. """
  232. return self._request(self.__faceverifyUrl, json.dumps(images, ensure_ascii=False), {
  233. 'Content-Type': 'application/json',
  234. })
  235. __matchUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/match'
  236. def match(self, images):
  237. """
  238. 人脸比对
  239. """
  240. return self._request(self.__matchUrl, json.dumps(images, ensure_ascii=False), {
  241. 'Content-Type': 'application/json',
  242. })