|
import requests |
|
import gradio as gr |
|
import time |
|
import os |
|
class Model3d_generater: |
|
|
|
def __init__(self): |
|
api_key = os.getenv("MESHY_API_KEY") |
|
self.headers = { |
|
"Authorization": f"Bearer {api_key}" |
|
} |
|
|
|
def _get_access_(self,query,style_prompt,resolution): |
|
|
|
payload = { |
|
"object_prompt":query, |
|
"style_prompt":style_prompt, |
|
"enable_pbr": True, |
|
"resolution":resolution, |
|
"art_style": "realistic", |
|
|
|
} |
|
|
|
generate_3d = requests.post( |
|
"https://api.meshy.ai/v1/text-to-3d", |
|
headers=self.headers, |
|
json=payload, |
|
) |
|
|
|
task_id=generate_3d.json()["result"] |
|
return task_id |
|
|
|
def check_status(self,task_id): |
|
|
|
response =requests.get( f"https://api.meshy.ai/v2/text-to-3d/{task_id}", |
|
headers=self.headers,) |
|
if response.status_code == 200: |
|
content=response.content |
|
status=response.json() |
|
return content,status |
|
else: |
|
return "Failed to get status" |
|
|
|
def _generate_3d_(self,query,style_prompt,resolution): |
|
task_id=self._get_access_(query,style_prompt,resolution) |
|
while True: |
|
content, status= self.check_status(task_id) |
|
if status['status'] == 'SUCCEEDED': |
|
print("Process complete. Model URLs:") |
|
download_3d=status["model_urls"]["glb"] |
|
response = requests.get(download_3d, allow_redirects=False) |
|
short_filename = '3d_asset.glb' |
|
|
|
with open(short_filename, 'wb') as file: |
|
file.write(response.content) |
|
return short_filename |
|
|
|
elif status and status['status'] == 'FAILED': |
|
print("An error occurred during processing.") |
|
break |
|
else: |
|
print("Processing... Please wait.") |
|
|
|
time.sleep(30) |
|
|
|
def interface(self): |
|
css=""".gradio-container {background: rgb(157,228,255); |
|
background: radial-gradient(circle, rgba(157,228,255,1) 0%, rgba(18,115,106,1) 100%);} |
|
|
|
} |
|
""" |
|
with gr.Blocks(css=css) as demo: |
|
gr.HTML(""" |
|
<center><h1 style="color:#fff">3d Model Generater</h1></center>""") |
|
|
|
with gr.Row(): |
|
prompt=gr.Textbox(label="Prompt") |
|
with gr.Column(scale=0.15): |
|
resolution=gr.Dropdown(choices=["1024","2048","4096"],label="Resolution") |
|
|
|
with gr.Row(): |
|
style=gr.Textbox(placeholder="describe the style like HDR,high quality,extrac",label="Style Prompt") |
|
|
|
with gr.Row(): |
|
output=gr.Model3D() |
|
|
|
with gr.Row(): |
|
button=gr.Button() |
|
|
|
button.click(self._generate_3d_,[prompt,style,resolution],outputs=output) |
|
|
|
demo.launch() |
|
|
|
if __name__=="__main__": |
|
result=Model3d_generater() |
|
result.interface() |