Spaces:
Runtime error
Runtime error
import os | |
import cv2 | |
from PIL import Image | |
import numpy as np | |
import geopandas as gpd | |
import matplotlib.pyplot as plt | |
from keras.models import load_model | |
from tensorflow.keras.preprocessing.image import load_img, img_to_array | |
import geopandas as gpd | |
from skimage.measure import regionprops, label | |
from shapely.geometry import Polygon | |
import shutil | |
import gradio as gr | |
def predict(img): | |
# model = load_model('drive/My Drive/building_footprint_extraction_model.h5') | |
model = load_model('building_footprint_extraction_model.h5') | |
img_array = img_to_array(img) | |
img_array = img_array.reshape((1, 256, 256, 3)) | |
img_array = img_array / 255.0 | |
predictions = model.predict(img_array) | |
predicted_image = np.argmax(predictions, axis=3) | |
predicted_image = predicted_image[0,:,:] | |
predicted_image = predicted_image * 255 | |
return predictions,predicted_image | |
def get_shape_files(img): | |
predictions,predicted_image= predict(img) | |
threshold = 0.5 | |
binary_mask = (predictions > threshold).astype(np.uint8)[:, :, 1] | |
if np.sum(binary_mask) == 0: | |
print("No building pixels detected. Saving an empty shapefile.") | |
else: | |
labeled_mask = label(binary_mask) | |
building_polygons = [] | |
props = regionprops(labeled_mask) | |
for prop in props: | |
polygon = Polygon([(point[1], point[0]) for point in prop.coords]) | |
building_polygons.append(polygon) | |
gdf = gpd.GeoDataFrame(geometry=building_polygons, crs="EPSG:4326") | |
output_shapefile = "shapefiles/building_footprints.shp" | |
if os.path.exists('shapefiles'): | |
pass | |
else: | |
os.mkdir('shapefiles') | |
gdf.to_file(output_shapefile) | |
# To get Masked Image | |
cv2.imwrite('shapefiles/mask.jpg',predicted_image) | |
shutil.make_archive('shapefile', 'zip', 'shapefiles') | |
return 'shapefile.zip',predicted_image | |
my_app = gr.Blocks() | |
with my_app: | |
gr.Markdown("<center><h1>Building Footprint Extraction</h1></center>") | |
with gr.Tabs(): | |
# with gr.TabItem("Get Mask Image"): | |
# with gr.Row(): | |
# with gr.Column(): | |
# img_source = gr.Image(label="Please select source Image", shape=(256, 256)) | |
# source_image_loader = gr.Button("Load above Image") | |
# with gr.Column(): | |
# img_output = gr.Image(label="Image Output") | |
# source_image_loader.click(predict,img_source,[img_output]) | |
with gr.TabItem("Get Mask Image and Shapefiles"): | |
with gr.Row(): | |
with gr.Column(): | |
img_source = gr.Image(label="Please select source Image", shape=(256, 256)) | |
get_shape_loader = gr.Button("Get Shape File") | |
with gr.Column(): | |
with gr.Row(): | |
mask_img=gr.Image(label="Image Output") | |
with gr.Row(): | |
output_zip = gr.outputs.File() | |
get_shape_loader.click(get_shape_files,img_source,[output_zip,mask_img]) | |
my_app.launch(debug = True) |