depthanything2 / depth_est.py
danieaneta
infra
9266e32
from PIL import Image
from transformers import pipeline
import base64
import requests
import io
import numpy as np
import os
def convert_img_base64(img):
with open(img, 'rb') as file:
base64_image = base64.b64encode(file.read())
return base64_image
class DepthEstimation():
def __init__(self, img_base64):
self.img_base64 = img_base64
def convert_from_base64(self):
image_data = base64.b64decode(self.img_base64)
image = Image.open(io.BytesIO(image_data))
return image
def run_depth(self):
image_data = self.convert_from_base64()
pipe = pipeline("depth-estimation", model="depth-anything/Depth-Anything-V2-Base-hf")
depth = pipe(image_data)
depth_map = depth['predicted_depth']
# Convert the tensor to a NumPy array and normalize
depth_map = depth_map.squeeze().cpu().numpy() # Remove batch dimension
depth_map = np.uint8(depth_map / depth_map.max() * 255) # Normalize to 0-255
# Convert depth map to PIL Image
depth_image = Image.fromarray(depth_map)
# Save the depth image to a bytes buffer
buffer = io.BytesIO()
depth_image.save(buffer, format='PNG')
image_bytes = buffer.getvalue()
# Encode the bytes to base64
base64_string = base64.b64encode(image_bytes).decode()
# Decode and display for verification
# image_data = base64.b64decode(base64_string)
# image = Image.open(io.BytesIO(image_data))
# image.show()
# image.save('output_image.png')
return base64_string
# if __name__ == "__main__":
# img_path = 'img3.jpg'
# base64_image = convert_img_base64(img_path)
# DepthEstimation(base64_image).run_depth()