关于php:php人像分割-人像抠图-证件照换底色-在线制作证件照API-Ai智能抠图

39次阅读

共计 2544 个字符,预计需要花费 7 分钟才能阅读完成。

需要

证件照在咱们生存中也是随时都须要的,例如去办证、体检、或者是参加考试等,但不是每个人都会 P 图,有些时候并不需要问了一个电子版证件照去照相馆拍照,所以能够利用技术开发一个在线工具,即拍即出图。

筹备

本文应用百度 AI 开放平台提供的收费人像宰割 API 实现抠图,这点百度是很良心的,看过很多同款 API,其余都得花钱,收费体验的次数也就几次、几十次调用,而百度间接就是 50000 次!况且百度是做 AI 比拟业余的,解决进去的后果很好!

1、先申请 API
https://ai.baidu.com/tech/bod…

2、创立利用后就能取得 API Key 和 Secret Key

3、开发文档
https://ai.baidu.com/ai-doc/B…

4、写代码
(1)获取 access_token
获取获取 access_token 文档:https://ai.baidu.com/docs#/Au…

代码

获取获取 access_token 代码

<?php
header("Content-type:application/json");
 
// 初始化 CURL
$ch = curl_init();
 
// 指标服务器地址 
curl_setopt($ch, CURLOPT_URL, 'https://aip.baidubce.com/oauth/2.0/token');
 
// 设置上传的文件
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
 'grant_type' => 'client_credentials',
 'client_id' => '填写你的',
 'client_secret' => '填写你的'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 
// 对认证证书起源的查看
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中查看 SSL 加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 
// 获取的信息以文件流的模式返回,而不是间接输入
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
// 申请头数组
$headers[] = "user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36";
// 设置申请头
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
 
// 发动申请
$result = curl_exec($ch);
echo $result;
 
// 敞开申请
curl_close($ch);
 
?>

图片转 base64 工具:http://tool.chinaz.com/tools/…

申请接口,人像宰割代码

<?php
header("Content-type:text/html;charset=utf-8");
 
// 初始化 CURL
$ch = curl_init();
 
// 指标服务器地址 
curl_setopt($ch, CURLOPT_URL, 'https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg');
 
// 设置上传的文件
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
 'access_token' => '上一步获取到的 access_token',
 'image' => '这里要用 base64 去掉图片头的 base64 代码'
 
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 
// 对认证证书起源的查看
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中查看 SSL 加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 
// 获取的信息以文件流的模式返回,而不是间接输入
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
// 申请头数组
$headers[] = "Content-Type:application/x-www-form-urlencoded";
// 设置申请头
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
 
// 发动申请
$result = curl_exec($ch);
 
// 解析 json
$arr_result = json_decode($result);
$imgurl = $arr_result->foreground;
 
// 输入图片
echo "<img src='./8.jpg'style='background:#f00'/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#f00'/><br/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#39f'/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#fff'/>";
 
// 敞开申请
curl_close($ch);
 
?>

最初就返回了抠图胜利的 base64 图片代码,也是不带图片头的,如果须要展现图片,就得拼接 data:image/jpg;base64, 就能够了!

结语

本文仅仅是做了一个申请流程,如果要做成可用的申请,须要欠缺图片上传主动转换为 base64,并且去掉图片头,主动获取 access_token 并且缓存(因为有有效期),最初返回多种底色的,固定尺寸的图片 json 数据。

作者

Author:TANKING
Date:2021-04-25
Web:http://www.likeyun.cn
WeChat:sansure2016

正文完
 0