vishnu23's picture
Update app.py
39234b8
raw
history blame contribute delete
No virus
2.91 kB
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)