|
|
|
import os |
|
import sys |
|
import cv2 |
|
import json |
|
import random |
|
import time |
|
import requests |
|
import func_timeout |
|
import numpy as np |
|
import gradio as gr |
|
|
|
|
|
ApiUrl = os.environ['ApiUrl'] |
|
OpenId = os.environ['OpenId'] |
|
ApiKey = os.environ['ApiKey'] |
|
UploadToken = os.environ['UploadToken'] |
|
|
|
|
|
proj_dir = os.path.dirname(os.path.abspath(__file__)) |
|
data_dir = os.path.join(proj_dir, 'Datas') |
|
|
|
tmpFolder = "tmp" |
|
os.makedirs(tmpFolder, exist_ok=True) |
|
|
|
|
|
|
|
def upload_imgs(apiUrl, UploadToken, cloth_image, pose_image): |
|
folder = os.path.join(tmpFolder, str(random.randint(0, 100))) |
|
os.makedirs(folder, exist_ok=True) |
|
pose_path = os.path.join(folder, 'pose.jpg') |
|
cloth_path = os.path.join(folder, 'cloth.jpg') |
|
cv2.imwrite(pose_path, pose_image[:,:,::-1]) |
|
cv2.imwrite(cloth_path, cloth_image[:,:,::-1]) |
|
|
|
params = {'token':UploadToken, |
|
'input1':'pose.jpg', |
|
'input2':'cloth.jpg', |
|
'protocol':'https'} |
|
session = requests.session() |
|
ret = requests.post(f"{apiUrl}/upload", data=json.dumps(params)) |
|
if ret.status_code==200: |
|
if 'upload1' in ret.json(): |
|
data = ret.json() |
|
with open(cloth_path, 'rb') as file: |
|
headers = {"Content-Type": 'image/jpeg'} |
|
response = requests.put(data['upload2'], data=file, headers=headers) |
|
if response.status_code == 200: |
|
print("上传成功") |
|
else: |
|
print(f"上传失败,状态码: {response.status_code}, 响应内容: {response.text}") |
|
return |
|
with open(pose_path, 'rb') as file: |
|
response = requests.put(data['upload1'], data=file, headers=headers) |
|
if response.status_code == 200: |
|
print("上传成功") |
|
else: |
|
print(f"上传失败,状态码: {response.status_code}, 响应内容: {response.text}") |
|
return |
|
if os.path.exists(pose_path): os.remove(pose_path) |
|
if os.path.exists(cloth_path): os.remove(cloth_path) |
|
return {'pose':data['upload1'], 'cloth':data['upload2']} |
|
|
|
def publicFastSwap(apiUrl, openId, apiKey, uploads, category, caption): |
|
if category=="upper_cloth": |
|
category = 1 |
|
elif category=="lower_cloth": |
|
category = 2 |
|
elif category=="dresses": |
|
category = 3 |
|
elif category=="full_body": |
|
category = 4 |
|
params = {'openId':OpenId, 'apiKey':ApiKey, |
|
'task_type':"10", 'image':str(uploads['pose']), |
|
'mask':str(uploads['cloth']), |
|
'param1':str(category), 'param2':str(caption), |
|
'param3':'', 'param4':'', 'param5':'', } |
|
session = requests.session() |
|
ret = requests.post(f"{ApiUrl}/public", data=json.dumps(params)) |
|
if ret.status_code==200: |
|
if 'id' in ret.json(): |
|
print('public task successfully!') |
|
return ret.json()['id'] |
|
|
|
def getTaskRes(apiUrl, taskId): |
|
params = {'id':taskId, 'task_type':"10"} |
|
session = requests.session() |
|
ret = requests.post(f"{apiUrl}/status", data=json.dumps(params)) |
|
if ret.status_code==200: |
|
if 'status' in ret.json(): |
|
return ret.json() |
|
else: |
|
print(ret.json(), ret.status_code, 'call status failed') |
|
return None |
|
|
|
@func_timeout.func_set_timeout(10) |
|
def check_func(ip): |
|
session = requests.session() |
|
ret = requests.get(f"https://webapi-pc.meitu.com/common/ip_location?ip={ip}") |
|
for k in ret.json()['data']: |
|
nat = ret.json()['data'][k]['nation'] |
|
if nat.lower() in Regions.lower(): |
|
print(nat, 'invalid') |
|
return False |
|
else: |
|
print(nat, 'valid') |
|
return True |
|
def check_warp(ip): |
|
try: |
|
return check_func(ip) |
|
except Exception as e: |
|
print(e) |
|
return True |
|
|