mike23415 commited on
Commit
0a74686
·
verified ·
1 Parent(s): d5ec690

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -29
app.py CHANGED
@@ -1,36 +1,37 @@
1
- import os
 
2
  import torch
3
- import logging
4
- from flask import Flask, request, jsonify
5
  from diffusers import DiffusionPipeline
6
  from PIL import Image
7
- from io import BytesIO
8
- import base64
9
 
10
- # Logging
11
  logging.basicConfig(level=logging.INFO)
12
  logger = logging.getLogger(__name__)
13
 
14
- # Flask app
15
  app = Flask(__name__)
16
 
17
- # Load Zero123Plus pipeline (for CPU)
18
- logger.info("Loading Zero123Plus pipeline...")
19
  try:
 
20
  pipe = DiffusionPipeline.from_pretrained(
21
  "sudo-ai/zero123plus-v1.2",
22
- torch_dtype=torch.float32,
23
- variant=None, # avoid fp16 issues
24
  )
25
  pipe.to("cpu")
26
- logger.info("Pipeline loaded successfully.")
27
  except Exception as e:
28
  logger.error(f"Error loading model: {e}")
29
  pipe = None
30
 
31
- @app.route("/", methods=["GET"])
32
- def index():
33
- return "Zero123Plus API is running."
 
 
 
 
 
34
 
35
  @app.route("/generate", methods=["POST"])
36
  def generate():
@@ -44,25 +45,19 @@ def generate():
44
  if not image_data:
45
  return jsonify({"error": "No image provided"}), 400
46
 
47
- # Decode base64 to PIL image
48
- image = Image.open(BytesIO(base64.b64decode(image_data.split(",")[-1]))).convert("RGB")
49
 
50
- # Run inference
51
- logger.info("Generating 3D views...")
52
- output = pipe(image)
53
- generated_image = output.images[0]
54
 
55
- # Convert output to base64
56
- buffered = BytesIO()
57
- generated_image.save(buffered, format="PNG")
58
- img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
59
 
60
- return jsonify({"image": f"data:image/png;base64,{img_base64}"})
61
-
62
  except Exception as e:
63
- logger.error(f"Generation failed: {e}")
64
  return jsonify({"error": str(e)}), 500
65
 
66
  if __name__ == "__main__":
67
- logger.info("=== Application Startup at CPU mode =====")
68
  app.run(host="0.0.0.0", port=7860)
 
1
+ import io
2
+ import base64
3
  import torch
4
+ from flask import Flask, request, jsonify, send_file
 
5
  from diffusers import DiffusionPipeline
6
  from PIL import Image
7
+ import logging
 
8
 
 
9
  logging.basicConfig(level=logging.INFO)
10
  logger = logging.getLogger(__name__)
11
 
 
12
  app = Flask(__name__)
13
 
14
+ # Load the model once at startup (on CPU)
 
15
  try:
16
+ logger.info("Loading Zero123Plus pipeline...")
17
  pipe = DiffusionPipeline.from_pretrained(
18
  "sudo-ai/zero123plus-v1.2",
19
+ torch_dtype=torch.float32, # CPU needs float32
 
20
  )
21
  pipe.to("cpu")
22
+ logger.info("=== Application Startup at CPU mode =====")
23
  except Exception as e:
24
  logger.error(f"Error loading model: {e}")
25
  pipe = None
26
 
27
+ def pil_to_base64(image):
28
+ buffer = io.BytesIO()
29
+ image.save(buffer, format="PNG")
30
+ return base64.b64encode(buffer.getvalue()).decode("utf-8")
31
+
32
+ @app.route("/")
33
+ def home():
34
+ return "Zero123Plus CPU API is running!"
35
 
36
  @app.route("/generate", methods=["POST"])
37
  def generate():
 
45
  if not image_data:
46
  return jsonify({"error": "No image provided"}), 400
47
 
48
+ if image_data.startswith("data:image"):
49
+ image_data = image_data.split(",")[1]
50
 
51
+ image = Image.open(io.BytesIO(base64.b64decode(image_data))).convert("RGB")
 
 
 
52
 
53
+ result = pipe(image)
54
+ output_image = result.images[0]
55
+
56
+ return jsonify({"image": f"data:image/png;base64,{pil_to_base64(output_image)}"})
57
 
 
 
58
  except Exception as e:
59
+ logger.error(f"Error generating image: {e}")
60
  return jsonify({"error": str(e)}), 500
61
 
62
  if __name__ == "__main__":
 
63
  app.run(host="0.0.0.0", port=7860)