人脸搜索
<p>[TOC]</p>
<h2>功能介绍</h2>
<p>人脸搜索主要用在人脸通用场景,搜索相似人脸,主要分两种:</p>
<ul>
<li>人脸搜索1:N:在指定人脸集合中,找到最相似的人脸;</li>
<li>人脸搜索M:N:待识别图片中含有多个人脸时,在指定人脸集合中,找到这多个人脸分别最相似的人脸</li>
</ul>
<p>要完成1:N或者M:N识别,首先需要构建一个人脸库,用于存放所有人脸特征,相关接口如下:</p>
<ul>
<li>添加人脸:向人脸库中添加人脸</li>
<li>删除人脸:删除指定用户的某张人脸</li>
<li>获取用户人脸列表:获取某个用户组中的全部人脸列表</li>
<li>获取用户列表:查询指定用户组中的用户列表</li>
<li>删除用户:删除指定用户</li>
</ul>
<h2>接口调用说明</h2>
<h3>请求方式</h3>
<p>如接口没有单独说明,均为:<strong>POST</strong></p>
<h3>请求格式</h3>
<p>如接口没有单独说明,均为:<strong>application/form-data</strong></p>
<h3>请求参数</h3>
<p>请求参数包括公共参数和业务参数(业务参数见具体接口说明)
调用接口时,需要把<strong>公共参数</strong>和<strong>业务参数</strong>一并放在<strong>请求参数</strong>中提交</p>
<h4>公共请求参数</h4>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px;">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>appId</td>
<td>String</td>
<td>是</td>
<td>服务商分配的唯一标识</td>
</tr>
<tr>
<td>timestamp</td>
<td>Long</td>
<td>是</td>
<td>当前时间戳(毫秒)</td>
</tr>
<tr>
<td>sign</td>
<td>String</td>
<td>是</td>
<td>签名,详见签名算法说明</td>
</tr>
</tbody>
</table>
<h4>签名算法说明</h4>
<pre><code>sign = sha256(appId + appSecret + timestamp)</code></pre>
<p>用服务商分配的 <strong>appId</strong>、服务商分配的 <strong>appSecret</strong>,当前时间戳(毫秒) <strong>timestamp</strong>,按上述顺序拼接成字符串,再进行 <strong>sha256</strong> 哈希得到。如下:</p>
<pre><code class="language-java">String appId = &quot;xyzxy2121zxyz&quot;;
String timestamp = &quot;1555378976238&quot;;
String appSecret = &quot;efcefcef1121cefcefc1212121&quot;;
String str = appId + appSecret + timestamp;
String sign = sha256(str);</code></pre>
<h3>返回说明</h3>
<h4>公共返回字段说明</h4>
<p>所有接口均返回以下公共字段:</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>code</td>
<td>返回码,详见:公共code返回码说明</td>
</tr>
<tr>
<td>msg</td>
<td>code对应的描述</td>
</tr>
<tr>
<td>charge</td>
<td>计费标志</td>
</tr>
<tr>
<td>taskNo</td>
<td>本次请求号</td>
</tr>
<tr>
<td>data</td>
<td>返回具体结果,object类型,详见data返回字段描述</td>
</tr>
</tbody>
</table>
<h4>公共code返回码说明</h4>
<p>所有接口公共返回码如下:</p>
<table>
<thead>
<tr>
<th>code</th>
<th><div style="width:420px;">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>成功</td>
</tr>
<tr>
<td>201</td>
<td>找不到该用户,或未找到匹配的用户,请确认人脸库中是否存在此用户</td>
</tr>
<tr>
<td>202</td>
<td>该用户已存在,请不要重复创建用户</td>
</tr>
<tr>
<td>203</td>
<td>该人脸不存在</td>
</tr>
<tr>
<td>204</td>
<td>该人脸已存在,请不要重复添加人脸</td>
</tr>
<tr>
<td>205</td>
<td>faceToken不存在</td>
</tr>
<tr>
<td>206</td>
<td>人脸库中用户下的人脸数目超过20个的限制</td>
</tr>
<tr>
<td>207</td>
<td>人脸尺寸过小,请保证人脸区域在64 X 64以上</td>
</tr>
<tr>
<td>208</td>
<td>请使用非卡通的人脸图像</td>
</tr>
<tr>
<td>209</td>
<td>人脸属性编辑处理该图像失败,请使用其他图片</td>
</tr>
<tr>
<td>210</td>
<td>图片尺寸过小,请使用清晰的图片</td>
</tr>
<tr>
<td>211</td>
<td>图片中没有人脸或无法解析人脸</td>
</tr>
<tr>
<td>212</td>
<td>人脸有被遮挡</td>
</tr>
<tr>
<td>213</td>
<td>人脸模糊</td>
</tr>
<tr>
<td>214</td>
<td>人脸图片添加失败</td>
</tr>
<tr>
<td>215</td>
<td>获取人脸图片失败</td>
</tr>
<tr>
<td>400</td>
<td>参数错误</td>
</tr>
<tr>
<td>404</td>
<td>接口地址不正确</td>
</tr>
<tr>
<td>500</td>
<td>系统维护,请稍候再试</td>
</tr>
<tr>
<td>601</td>
<td>接口未开通</td>
</tr>
<tr>
<td>602</td>
<td>账号停用</td>
</tr>
<tr>
<td>604</td>
<td>接口停用</td>
</tr>
<tr>
<td>606</td>
<td>调用超限,请稍候再试</td>
</tr>
<tr>
<td>607</td>
<td>ip不在白名单</td>
</tr>
<tr>
<td>609</td>
<td>请求过于频繁,请稍候再试</td>
</tr>
<tr>
<td>610</td>
<td>请求超时</td>
</tr>
<tr>
<td>999</td>
<td>其他,以实际返回为准</td>
</tr>
</tbody>
</table>
<h2>人脸搜索(1:N)</h2>
<h3>接口描述</h3>
<ul>
<li>在指定人脸集合中,找到最相似的人脸</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/search</code></p>
<h3>业务参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>file</td>
<td>file</td>
<td>否</td>
<td>人脸图片文件</td>
</tr>
<tr>
<td>base64</td>
<td>String</td>
<td>否</td>
<td>人脸图片的Base64</td>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>否</td>
<td>人脸图片的url</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>否</td>
<td>用户Id,当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能</td>
</tr>
<tr>
<td>qualityControl</td>
<td>String</td>
<td>否</td>
<td>图片质量控制<br>NONE: 不进行控制<br>LOW:较低的质量要求<br>NORMAL: 一般的质量要求<br>HIGH: 较高的质量要求<br>默认 NONE<br>若图片质量不满足要求,则返回结果中会提示质量检测失败</td>
</tr>
<tr>
<td>livenessControl</td>
<td>String</td>
<td>否</td>
<td>活体检测控制<br>NONE: 不进行控制<br>LOW:较低的活体要求(高通过率 低攻击拒绝率)<br>NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)<br>HIGH: 较高的活体要求(高攻击拒绝率 低通过率)<br>默认 NONE<br>若活体检测结果不满足要求,则返回结果中会提示活体检测失败</td>
</tr>
<tr>
<td>faceSortType</td>
<td>Integer</td>
<td>否</td>
<td>人脸检测排序类型<br>0:代表检测出的人脸按照人脸面积从大到小排列<br>1:代表检测出的人脸按照距离图片中心从近到远排列<br>默认为0</td>
</tr>
<tr>
<td>maxUserNum</td>
<td>Integer</td>
<td>否</td>
<td>查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回50个</td>
</tr>
<tr>
<td>matchThreshold</td>
<td>Integer</td>
<td>否</td>
<td>匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认0<br>此阈值设置得越高,检索速度将会越快,推荐使用阈值80</td>
</tr>
</tbody>
</table>
<ul>
<li>base64、file、url,必须提供一个,优先级:base64 > file > url</li>
<li>图片现支持PNG、JPG、JPEG、BMP,图片文件大小不超过2MB</li>
</ul>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;907635727140148539633037&quot;,// 本次请求号
&quot;charge&quot;: true,//计费标准
&quot;data&quot;: {
&quot;face_token&quot;: &quot;2bcef82220e41cbe57feb612345&quot;,//人脸标志
&quot;user_list&quot;: [//匹配的用户信息列表
{
&quot;score&quot;: 99.999900817871,//用户的匹配得分,推荐阈值80分
&quot;group_id&quot;: &quot;groupIdtest123&quot;,//用户所属的group_id
&quot;user_id&quot;: &quot;userIdtest123&quot;,//用户的user_id
&quot;user_info&quot;: &quot;&quot;//注册用户时携带的user_info
}
]
}
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;图片信息不能为空&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>data返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>face_token</td>
<td>人脸标志</td>
</tr>
<tr>
<td>user_list</td>
<td>匹配的用户信息列表</td>
</tr>
<tr>
<td>score</td>
<td>用户的匹配得分,推荐阈值80分</td>
</tr>
<tr>
<td>group_id</td>
<td>用户所属的group_id</td>
</tr>
<tr>
<td>user_id</td>
<td>用户的user_id</td>
</tr>
<tr>
<td>user_info</td>
<td>注册用户时携带的user_info</td>
</tr>
</tbody>
</table>
<h2>人脸搜索(M:N)</h2>
<h3>接口描述</h3>
<ul>
<li>待识别的图片中,存在多张人脸的情况下,支持在一个人脸库中,一次请求,同时返回图片中所有人脸的识别结果。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/multi-search</code></p>
<h3>业务参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>file</td>
<td>file</td>
<td>否</td>
<td>人脸图片文件</td>
</tr>
<tr>
<td>base64</td>
<td>String</td>
<td>否</td>
<td>人脸图片的Base64</td>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>否</td>
<td>人脸图片的url</td>
</tr>
<tr>
<td>maxFaceNum</td>
<td>Integer</td>
<td>否</td>
<td>最多处理人脸的数目,默认值为1(仅检测图片中面积最大的那个人脸) 最大值10</td>
</tr>
<tr>
<td>matchThreshold</td>
<td>Integer</td>
<td>否</td>
<td>匹配阈值,设置阈值后,score低于此阈值的用户信息将不会返回<br>最大100,最小0,默认80<br>此阈值设置得越高,检索速度将会越快,推荐使用默认阈值80</td>
</tr>
<tr>
<td>qualityControl</td>
<td>String</td>
<td>否</td>
<td>图片质量控制<br>NONE: 不进行控制<br>LOW:较低的质量要求<br>NORMAL: 一般的质量要求<br>HIGH: 较高的质量要求<br>默认 NONE<br>若图片质量不满足要求,则返回结果中会提示质量检测失败</td>
</tr>
<tr>
<td>livenessControl</td>
<td>String</td>
<td>否</td>
<td>活体检测控制<br>NONE: 不进行控制<br>LOW:较低的活体要求(高通过率 低攻击拒绝率)<br>NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)<br>HIGH: 较高的活体要求(高攻击拒绝率 低通过率)<br>默认 NONE<br>若活体检测结果不满足要求,则返回结果中会提示活体检测失败</td>
</tr>
<tr>
<td>maxUserNum</td>
<td>Integer</td>
<td>否</td>
<td>识别返回的最大用户数,默认为1,最大20个</td>
</tr>
</tbody>
</table>
<ul>
<li>base64、file、url,必须提供一个,优先级:base64 > file > url</li>
<li>图片文件大小不超过2MB</li>
</ul>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;, // 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;525195723178392579953620&quot;,// 本次请求号
&quot;charge&quot;: true,//计费标准
&quot;data&quot;: {
&quot;face_num&quot;: 1,//图片中的人脸数量
&quot;face_list&quot;: [//人脸信息列表
{
&quot;face_token&quot;: &quot;2bcef82220e41cbe57feb652c69b4db8&quot;,//人脸标志
&quot;location&quot;: { //人脸在图片中的位置
&quot;top&quot;: 95.57,//人脸区域离上边界的距离
&quot;left&quot;: 103.77,//人脸区域离左边界的距离
&quot;rotation&quot;: 7,//人脸框相对于竖直方向的顺时针旋转角
&quot;width&quot;: 83,//人脸区域的宽度
&quot;height&quot;: 83//人脸区域的高度
},
&quot;user_list&quot;: [//匹配的用户信息列表
{
&quot;score&quot;: 99.99991607666,//用户的匹配得分,推荐阈值80分
&quot;group_id&quot;: &quot;groupIdtest123&quot;,//用户所属的group_id
&quot;user_id&quot;: &quot;userIdtest123&quot;,//用户的user_id
&quot;user_info&quot;: &quot;&quot;//注册用户时携带的user_info
}
]
}
]
}
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;图片信息不能为空&quot;, // 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>data返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>face_num</td>
<td>图片中的人脸数量</td>
</tr>
<tr>
<td>face_list</td>
<td>人脸信息列表</td>
</tr>
<tr>
<td>face_token</td>
<td>人脸标志</td>
</tr>
<tr>
<td>user_list</td>
<td>匹配的用户信息列表</td>
</tr>
<tr>
<td>score</td>
<td>用户的匹配得分,推荐阈值80分</td>
</tr>
<tr>
<td>group_id</td>
<td>用户所属的group_id</td>
</tr>
<tr>
<td>user_id</td>
<td>用户的user_id</td>
</tr>
<tr>
<td>user_info</td>
<td>注册用户时携带的user_info</td>
</tr>
<tr>
<td>location</td>
<td>人脸在图片中的位置</td>
</tr>
<tr>
<td>top</td>
<td>人脸区域离上边界的距离</td>
</tr>
<tr>
<td>left</td>
<td>人脸区域离左边界的距离</td>
</tr>
<tr>
<td>width</td>
<td>人脸区域的宽度</td>
</tr>
<tr>
<td>height</td>
<td>人脸区域的高度</td>
</tr>
<tr>
<td>rotation</td>
<td>人脸框相对于竖直方向的顺时针旋转角,[-180,180]</td>
</tr>
</tbody>
</table>
<h2>添加人脸</h2>
<h3>接口描述</h3>
<ul>
<li>向人脸库中添加人脸</li>
<li>添加人脸后,生效时间一般为5s以内,之后便可以进行人脸搜索或认证操作。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/add</code></p>
<h3>业务参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px;">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>file</td>
<td>file</td>
<td>否</td>
<td>人脸图片,文件类型</td>
</tr>
<tr>
<td>base64</td>
<td>String</td>
<td>否</td>
<td>人脸图片的Base64</td>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>否</td>
<td>人脸图片的url</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>是</td>
<td>用户id,(由数字、字母、下划线组成),长度限制48B。</td>
</tr>
<tr>
<td>userInfo</td>
<td>String</td>
<td>否</td>
<td>用户资料,长度限制256B,默认空</td>
</tr>
<tr>
<td>qualityControl</td>
<td>String</td>
<td>否</td>
<td>图片质量控制<br>NONE: 不进行控制<br>LOW:较低的质量要求<br>NORMAL: 一般的质量要求<br>HIGH: 较高的质量要求<br>默认 NONE<br>若图片质量不满足要求,则返回结果中会提示质量检测失败</td>
</tr>
<tr>
<td>livenessControl</td>
<td>String</td>
<td>否</td>
<td>活体检测控制<br>NONE: 不进行控制<br>LOW:较低的活体要求(高通过率 低攻击拒绝率)<br>NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)<br>HIGH: 较高的活体要求(高攻击拒绝率 低通过率)<br>默认 NONE<br>若活体检测结果不满足要求,则返回结果中会提示活体检测失败</td>
</tr>
<tr>
<td>actionType</td>
<td>String</td>
<td>否</td>
<td>操作方式<br>APPEND: 当user_id在库中已经存在时,对此user_id重复注册时,新注册的图片默认会追加到该user_id下<br>REPLACE : 当对此user_id重复注册时,则会用新图替换库中该user_id下所有图片<br>默认使用APPEND</td>
</tr>
</tbody>
</table>
<ul>
<li>base64、file、url,必须提供一个,优先级:base64 > file > url</li>
<li>图片文件大小不超过2MB</li>
<li>组内每个uid下的人脸图片数目上限为20张</li>
</ul>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;686172601162294852169843&quot;,// 本次请求号
&quot;charge&quot;: true,//计费标准
&quot;data&quot;: {
&quot;face_token&quot;: &quot;2bcef82220e41cbe57feb652c612345&quot;,// 本次请求号
&quot;location&quot;: {
&quot;top&quot;: 95.57,// 人脸区域离上边界的距离
&quot;left&quot;: 103.77,// 人脸区域离左边界的距离
&quot;rotation&quot;: 7,// 人脸框相对于竖直方向的顺时针旋转角
&quot;width&quot;: 83,// 人脸区域的宽度
&quot;height&quot;: 83// 人脸区域的高度
}
}
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;图片信息不能为空&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false //计费标准
}</code></pre>
<h3>data返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>face_token</td>
<td>人脸标志</td>
</tr>
<tr>
<td>location</td>
<td>人脸在图片中的位置</td>
</tr>
<tr>
<td>top</td>
<td>人脸区域离上边界的距离</td>
</tr>
<tr>
<td>left</td>
<td>人脸区域离左边界的距离</td>
</tr>
<tr>
<td>width</td>
<td>人脸区域的宽度</td>
</tr>
<tr>
<td>height</td>
<td>人脸区域的高度</td>
</tr>
<tr>
<td>rotation</td>
<td>人脸框相对于竖直方向的顺时针旋转角,[-180,180]</td>
</tr>
</tbody>
</table>
<h2>获取用户人脸列表</h2>
<h3>接口描述</h3>
<ul>
<li>用于获取一个用户的全部人脸列表。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/list</code></p>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>是</td>
<td>用户id,(由数字、字母、下划线组成),长度限制48B</td>
</tr>
</tbody>
</table>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;907635727140148539633037&quot;,// 本次请求号
&quot;charge&quot;: false,//计费标准
&quot;data&quot;: {
&quot;face_list&quot;: [
{
&quot;face_token&quot;: &quot;2bcef82220e41cbe57feb612345&quot;,//人脸图片的唯一标识
&quot;ctime&quot;: &quot;2018-01-01 00:00:00&quot;//人脸创建时间
}
]
}
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;参数userId不能为空&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>data返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>face_list</td>
<td>人脸列表</td>
</tr>
<tr>
<td>ctime</td>
<td>人脸创建时间</td>
</tr>
<tr>
<td>face_token</td>
<td>人脸图片的唯一标识</td>
</tr>
</tbody>
</table>
<h2>获取用户列表</h2>
<h3>接口描述</h3>
<ul>
<li>用于查询用户列表。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/user/list</code></p>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>start</td>
<td>Integer</td>
<td>否</td>
<td>默认值0,起始序号</td>
</tr>
<tr>
<td>length</td>
<td>Integer</td>
<td>否</td>
<td>返回数量,默认值100,最大值1000</td>
</tr>
</tbody>
</table>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;984185255132493644829345&quot;,// 本次请求号
&quot;charge&quot;: false,//计费标准
&quot;data&quot;: {
&quot;user_id_list&quot;: [
&quot;userIdtest123&quot;
]
}
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;参数length值不正确&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>data返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>user_id_list</td>
<td>用户ID列表,数组元素为用户ID</td>
</tr>
</tbody>
</table>
<h2>删除人脸</h2>
<h3>接口描述</h3>
<ul>
<li>删除用户的某一张人脸,如果该用户只有一张人脸图片,则同时删除用户。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/delete</code></p>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>logId</td>
<td>String</td>
<td>是</td>
<td>请求标识码,随机数,唯一</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>是</td>
<td>用户id(由数字、字母、下划线组成),长度限制48B</td>
</tr>
<tr>
<td>faceToken</td>
<td>String</td>
<td>是</td>
<td>需要删除的人脸图片token,(由数字、字母、下划线组成)长度限制64B</td>
</tr>
</tbody>
</table>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;525195723178392579912345&quot;,// 本次请求号
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;参数logId不能为空&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<p><a name="删除用户"></a></p>
<h2>删除用户</h2>
<h3>接口描述</h3>
<ul>
<li>用于将用户从某个组中删除
> 删除用户将参数该用户下所有人脸,请谨慎使用</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/face/user/delete</code></p>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>userId</td>
<td>String</td>
<td>是</td>
<td>用户id(由数字、字母、下划线组成),长度限制48B</td>
</tr>
</tbody>
</table>
<h3>成功返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;成功&quot;,// 返回码对应描述
&quot;code&quot;: 200,// 返回码,详见返回码说明
&quot;taskNo&quot;: &quot;525195723178392579912345&quot;,// 本次请求号
&quot;charge&quot;: false//计费标准
}</code></pre>
<h3>失败返回样例</h3>
<pre><code class="language-json">{
&quot;msg&quot;: &quot;参数userId不能为空&quot;,// 返回码对应描述
&quot;code&quot;: 400,// 返回码,详见返回码说明
&quot;charge&quot;: false//计费标准
}</code></pre>
<h2>附录</h2>
<h3>质量控制参数说明</h3>
<p>不同的控制度下所对应的质量控制阈值,如果检测出来的质量信息某一项不符合控制阈值的要求,则会返回错误信息。</p>
<p>遮挡情况的阈值</p>
<table>
<thead>
<tr>
<th>控制度</th>
<th>left_eye</th>
<th>right_eye</th>
<th>nose</th>
<th>mouth</th>
<th>left_cheek</th>
<th>right_cheek</th>
<th>chin_contour</th>
</tr>
</thead>
<tbody>
<tr>
<td>LOW</td>
<td>0.8</td>
<td>0.8</td>
<td>0.8</td>
<td>0.8</td>
<td>0.8</td>
<td>0.8</td>
<td>0.8</td>
</tr>
<tr>
<td>NORMAL</td>
<td>0.6</td>
<td>0.6</td>
<td>0.6</td>
<td>0.6</td>
<td>0.6</td>
<td>0.6</td>
<td>0.6</td>
</tr>
<tr>
<td>HIGH</td>
<td>0.2</td>
<td>0.2</td>
<td>0.2</td>
<td>0.2</td>
<td>0.2</td>
<td>0.2</td>
<td>0.2</td>
</tr>
</tbody>
</table>
<p>模糊度、完整度的阈值</p>
<table>
<thead>
<tr>
<th>控制度</th>
<th>illumination</th>
<th>blurdegree</th>
<th>completeness</th>
</tr>
</thead>
<tbody>
<tr>
<td>LOW</td>
<td>20</td>
<td>0.8</td>
<td>0</td>
</tr>
<tr>
<td>NORMAL</td>
<td>40</td>
<td>0.6</td>
<td>0</td>
</tr>
<tr>
<td>HIGH</td>
<td>100</td>
<td>0.2</td>
<td>1</td>
</tr>
</tbody>
</table>
<h3>活体控制参数说明</h3>
<p>不同的控制度下所对应的活体控制阈值不同,如果检测出来的活体分数小于控制阈值,则会返回错误信息。</p>
<table>
<thead>
<tr>
<th>控制度</th>
<th>阈值</th>
<th><div style="width:420px;">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>LOW</td>
<td>0.05</td>
<td>活体误拒率:万分之一;拒绝率:97.75%</td>
</tr>
<tr>
<td>NORMAL</td>
<td>0.3</td>
<td>活体误拒率:千分之一;拒绝率:98.82%</td>
</tr>
<tr>
<td>HIGH</td>
<td>0.9</td>
<td>活体误拒率:百分之一;拒绝率:99.77%</td>
</tr>
</tbody>
</table>
<p>1、误拒率: 把真人识别为假人的概率. 阈值越高,安全性越高, 要求也就越高, 对应的误识率就越高
2、通过率=1-误拒率</p>
<p>关于以上数值的概念介绍:
拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。
误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。
通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。
阈值(Threshold):高于此数值,则可判断为活体。</p>