File size: 2,240 Bytes
8d36ed5 4d26de9 a2091eb 4d26de9 8d36ed5 02cc722 8d36ed5 81def50 8d36ed5 4d26de9 81def50 b3652fb a2091eb 3b1c0bd 4d26de9 8d36ed5 a2091eb 4d26de9 64c49d0 a2091eb 8d36ed5 4d26de9 a2091eb 64c49d0 4a9c7f0 64c49d0 4d26de9 8d36ed5 4d26de9 8d36ed5 4d26de9 fac5d14 4d26de9 64c49d0 4d26de9 8d36ed5 a2091eb 81def50 a2091eb 81def50 8d36ed5 64c49d0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import io
import time
import numpy as np
import cv2
import torch
import gradio as gr
from transformers import DPTFeatureExtractor, DPTForDepthEstimation
from fastapi import FastAPI, File, UploadFile
from PIL import Image
import uvicorn
app = FastAPI()
# 🟢 Chọn thiết bị xử lý (GPU nếu có)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 🟢 Tải model DPT-Hybrid thay cho ZoeDepth để tăng tốc
feature_extractor = DPTFeatureExtractor.from_pretrained("Intel/dpt-swinv2-tiny-256")
model = DPTForDepthEstimation.from_pretrained("Intel/dpt-swinv2-tiny-256").to(device)
model.eval()
def process_depth_map(image_bytes):
"""Xử lý Depth Map và hiển thị trên Hugging Face"""
start_time = time.time()
# 🟢 Đọc file ảnh
image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
# 🔵 Resize ảnh để tăng tốc độ xử lý
image = image.resize((256, 256))
image_np = np.array(image)
flipped_image = cv2.flip(image_np, -1)
# 🟢 Chuẩn bị ảnh cho mô hình
inputs = feature_extractor(images=flipped_image, return_tensors="pt").to(device)
# 🟢 Dự đoán Depth Map với DPT-Hybrid
with torch.no_grad():
outputs = model(**inputs)
# 🟢 Xử lý ảnh sau khi dự đoán
predicted_depth = outputs.predicted_depth.squeeze().cpu().numpy()
depth_map = (predicted_depth * 255 / predicted_depth.max()).astype("uint8")
# 🔵 Chuyển depth_map thành ảnh có thể hiển thị
depth_colored = cv2.applyColorMap(depth_map, cv2.COLORMAP_INFERNO)
depth_pil = Image.fromarray(depth_colored)
end_time = time.time()
print(f"⏳ DPT xử lý trong {end_time - start_time:.4f} giây")
return depth_pil # Trả về ảnh để hiển thị trên Hugging Face
# 🟢 Tạo UI trên Hugging Face Spaces với Gradio
gr.Interface(
fn=process_depth_map,
inputs=gr.Image(type="bytes"),
outputs=gr.Image(type="pil"),
title="🔍 Depth Map Estimation",
description="Tải ảnh lên để xem Depth Map",
).launch(share=True) # `share=True` để tạo link truy cập từ bên ngoài
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)
|