コンテンツ
1.作者について
Liu Shuaibo、男性、西安工科大学電子情報学部、2021年大学院生、Zhang Hongwei人工知能研究グループ
研究の方向性:マシンビジョンと人工知能
Eメール:[email protected]
2.フェイスフュージョン入門
簡単に言えば、生成された面が同時に2つの面の外観の特徴を持つように、2つの面を融合することです。これは、Baidu Smart Cloudの公式ウェブサイトプラットフォームによって提供されるオンラインテストページです。4つの画像形式をサポートし、画像サイズは2M以下である必要があります。
3. Baidu SmartCloudAPIを呼び出します
アプリケーションインターフェイスを作成する手順は次のとおりです。矢印のプロンプトを順番にクリックします
。ステップ1:
ステップ2:
ステップ3:
4.コード分析
4.1ライブラリをインポートする
import requests # 可以用来生成一个网络请求,抓取网络信息即用来调用百度云的接口
import base64 # 将图片信息采用Base64编码
import json # 是一种轻量级的数据交换格式
4.2トークンを取得する
# token获取
def get_token(client_id, client_secret):
# client_id为官网获取的API Key,client_secret为官网获取的Secret Key.下行client_id=后的马赛克为你的API Key,client_secret=后的马赛克为你的Secret Key
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=********&client_secret=*********"
response = requests.get(url)
resultJson = response.json()
return resultJson['access_token']
ここでは、Baidu Smart Cloudで自分で取得したAPIキーとシークレットキーを使用する必要があります。トークンは、BaiduCloudフェイスフュージョンインターフェイスにアクセスするときにサーバーから発行される「アクセスライセンス」に相当します。
4.3画像を読み、エンコーディングを変換する
# 根据图片名读取图片,并转换成base64
def read_photo(name):
with open('%s' % name, 'rb') as f:
base64_data = base64.b64encode(f.read())
bd = base64_data.decode()
return bd
これは固定機能モデルです
4.4イメージフュージョンを実現するためのBaiduスマートクラウドインターフェースの呼び出し
# 调用百度的接口,实现融合图片
def face_fusion(token, template, target):
url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'
request_url = url + '?access_token=' + token
params = {
"image_template": {
# 将其中一张图片设置为模板(相当于底层图片)
"image": template,
"image_type": "BASE64",
"quality_control": "NORMAL"
},
"image_target": {
# 将其中一张图片设置为目标(相当于人脸信息“叠加”到模板上)
"image": target,
"image_type": "BASE64",
"quality_control": "NORMAL"
},
"merge_degree": "HIGH" # 融合程度
}
params = json.dumps(params)
headers = {
'content-type': 'application/json'}
result = requests.post(request_url, data=params, headers=headers).json() # 经过调用百度云接口服务器返回的内容(融合结果)
if result['error_code'] == 0:
res = result["result"]["merge_image"]
down_photo(res)
else:
print(str(result['error_code']) + result['error_msg'])
これがコア部分であり、BaiduAPIを呼び出して顔画像の融合を実現します
4.5FusionImageをダウンロードする
# 下载融合后图片
def down_photo(data):
imagedata = base64.b64decode(data)
file = open('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\result.jpg', "wb")
# 融合图片保存路径,'wb':以二进制格式打开一个文件只用于写入,文件存在则覆盖,若不存在创建新文件
file.write(imagedata)
ここで保存パスの名前に注意して、「\ n」、「\ r」などの形式を使用しないようにします。これにより、パスが読み取れなくなります。
4.6メインプログラムの実行
# 主程序
if __name__ == '__main__':
# 路径为自己的图片存储路径
胡歌 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\1.jpg') # 模板图片
赵丽颖 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\2.jpg') # 目标图片
token = get_token('*********', '**********') # 前者为API Key,后者改为Secret Key
face_fusion(token, 胡歌, 赵丽颖)
ここでは、Baidu Smart Cloudによって取得されたAPIキーとシークレットキーを使用し、メインプログラムを実行して、顔の融合画像の結果を取得する必要があります(注:前面にオクルージョンのないクリアな顔写真を選択する必要があります。顔を検出できないというプロンプトが表示されます。)
4.7融合結果の表示
5.完全なコード
'''
Author:LSB / 207
Date:2022年03月03日
'''
import requests # 可以用来生成一个网络请求,抓取网络信息即用来调用百度云的接口
import base64 # 将图片信息采用Base64编码
import json # 是一种轻量级的数据交换格式
# token获取
def get_token(client_id, client_secret):
# client_id为官网获取的API Key,client_secret为官网获取的Secret Key.下行client_id=后的马赛克为你的API Key,client_secret=后的马赛克为你的Secret Key
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=***********&client_secret=************" # 注意此处的&符号
response = requests.get(url)
resultJson = response.json()
return resultJson['access_token']
# 根据图片名读取图片,并转换成base64
def read_photo(name):
with open('%s' % name, 'rb') as f:
base64_data = base64.b64encode(f.read())
bd = base64_data.decode()
return bd
# 调用百度的接口,实现融合图片
def face_fusion(token, template, target):
url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'
request_url = url + '?access_token=' + token
params = {
"image_template": {
# 将其中一张图片设置为模板(相当于底层图片)
"image": template,
"image_type": "BASE64",
"quality_control": "NORMAL"
},
"image_target": {
# 将其中一张图片设置为目标(相当于人脸信息“叠加”到模板上)
"image": target,
"image_type": "BASE64",
"quality_control": "NORMAL"
},
"merge_degree": "HIGH" # 融合程度
}
params = json.dumps(params)
headers = {
'content-type': 'application/json'}
result = requests.post(request_url, data=params, headers=headers).json() # 经过调用百度云接口服务器返回的内容(融合结果)
if result['error_code'] == 0:
res = result["result"]["merge_image"]
down_photo(res)
else:
print(str(result['error_code']) + result['error_msg'])
# 下载融合后图片
def down_photo(data):
imagedata = base64.b64decode(data)
file = open('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\result.jpg', "wb")
# 融合图片保存路径,'wb':以二进制格式打开一个文件只用于写入,文件存在则覆盖,若不存在创建新文件
file.write(imagedata)
# 主程序
if __name__ == '__main__':
# 路径为自己的图片存储路径
胡歌 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\1.jpg') # 模板图片
赵丽颖 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\2.jpg') # 目标图片
token = get_token('*********', '**********') # 前者为API Key,后者改为Secret Key
face_fusion(token, 胡歌, 赵丽颖)