人工智慧 - 人臉合成 (騰訊AI開放平臺)
阿新 • • 發佈:2018-11-30
如果是從事微信開發的同事我想以前應該見過火爆朋友圈的軍裝照這個小程式吧,感覺將自己的人臉P無縫P上去感覺高大上。那麼這個是怎麼實現的呢?
我也不曉得具體怎麼實現的,我只需要知道我能通過第三方平臺實現這個功能就行了。在此,感謝各位前輩先驅們將相應的技術介面公開免費給我們使用,正因為有你們日以繼夜的辛勤付出和無私分享,程式行業開發的功能才越來越厲害。
具體流程
- 百度搜索 “騰訊AI開放平臺” 進入官網並註冊賬戶,在應用裡面選擇人臉融合功能模組。(使用這個功能可能會要你錄入一些自己的基本資訊,如:姓名,電話,郵箱啥的,現在是不是還要這個我也不清楚了)或直接輸入網址:
上傳融合的模版素材(圖片JPG)圖片要求
自定義上傳人臉融合素材模板,擴充套件使用場景,隨心所欲。
(單一應用暫時只支援上傳十張自定義素材,且需通過稽核後才可使用。為了提高稽核效率,請勿重複上傳相同素材。)
素材規範如下
模板要求:支援jpg/png;尺寸不超過1080*1080;檔案大小不超過500k
臉部要求:正臉(無擡頭低頭、無側轉);臉部輪廓與五官無遮擋;臉部光線平均;不露齒;無閉眼;臉部儘量位於圖片中間位置
稽核反饋:3個工作日內完成稽核,請至應用管理查詢稽核結果
版權證明:您需要保證你上傳的IP(明星、影視動漫人物等)素材是有版權的,版權檔案提交請聯絡QQ群(581197347)管理員呼叫人臉融合介面融合頭像(直接上程式碼)
include.php (需要的封裝包檔案,作用是載入需要的工具包,末尾會附上該包的下載地址)
<?php
// >= php 5.3.0,低版本的php需手動include SDK資料夾的所有檔案
spl_autoload_register(function ($class) {
include("SDK/{$class}.php");//請注意路徑,我的測試預設是在當前目錄下,如果你採用了框架,請更改這裡的路徑
});
?>
api.php
<?php
require('include.php');
/**
* 圖片生成介面
* String path 使用者上傳圖片在本地的地址
* int model 模版id
*/
function generImg($path,$model)
{
//請在此填入AppID與AppKey
$app_id = '';
$app_key = '';
//設定AppID與AppKey
Configer::setAppInfo($app_id, $app_key);
// 圖片base64編碼
$data = file_get_contents($path);
$base64 = base64_encode($data);
// 設定請求資料
$appkey = $app_key;
$params = array(
'app_id' => $app_id,
'image' => $base64,
'model' => $model,
'time_stamp' => strval(time()),
'nonce_str' => strval(rand()),
'sign' => '',
);
$params['sign'] = Signature::getReqSign($params, $appkey);
// 執行API呼叫
$url = 'https://api.ai.qq.com/fcgi-bin/ptu/ptu_facemerge';
$response = HttpUtil::doHttpPost($url, $params);
$res = json_decode($response,true);
if($res['ret']==16402){
return array(
'code' => 10001,
'msg' => '您上傳的圖片未檢測到頭像'
);
}
if($res['ret']==0)
{
$image = base64_decode($res['data']['image'],true);
$fileName = getFileName();
$file = fopen($fileName,'w');
fwrite($file,$image);
fclose($file);
return array(
'code' => 'ok',
'msg' => 'gener success',
'result'=> array(
'imgPath' => $fileName
)
);
}else{
return array(
'code' => 10002,
'msg' => 'not log',
'result'=> $res
);
}
}
/**
* 圖片合成成功後,儲存到本地的絕對路徑位置
* @return
* String 合成的圖片儲存在本地的位置,我這裡預設寫的是在當前目錄下,你可以更改這裡使之換到自定義的目錄下面
*/
function getFileName(){
return __DIR__ . '/' . 'DY_' . time() . rand(1000,9999).'.jpg';
}
/*
* demo 測試
*/
$path = './test7.jpg'; //需要融合的圖片,也就是使用者上傳的圖片
$model = 13078; //素材id(稽核成功後在騰訊AI後臺獲取)
$filepth = generImg($path,$model); //$filepath 就是合成後的影象在本地的路徑地址
?>