dpa-example / app.py
jgerbscheid's picture
initial commit
b9bac12
raw
history blame
2.67 kB
import os
import math
import gradio as gr
import dijkprofile_annotator
from zipfile import ZipFile
def annotate_file(file_objects, model_type):
# TODO: actually use different model types based on selected model, only a well trained dijk model is available now.
generated_charfiles = []
str1 = "Starting processing of files."
pad1 = math.floor((os.get_terminal_size().columns - len(str1)) / 2) * "="
print(pad1 + "Starting processing of files." + pad1)
for i, file_obj in enumerate(file_objects):
target_filepath = f"/tmp/characteristicpoints_{i}.csv"
print(f" Processing file '{file_obj.name}', model '{model_type}', saving to '{target_filepath}'")
dijkprofile_annotator.annotate(file_obj.name, target_filepath, device='cpu')
generated_charfiles.append(target_filepath)
print(f" finished processing: {file_obj.name}! saved to : {target_filepath}")
print(" ", "-" * (os.get_terminal_size().columns - 5))
print("finished with all processing!")
# return the csv file if only 1 file was given, return a zip otherwise.
if len(generated_charfiles) == 1:
print(f"returning file: {generated_charfiles[0]}")
return generated_charfiles[0]
else:
return_zipfile = "/tmp/characterist_points.zip"
with ZipFile(return_zipfile, 'w') as zipObj:
for filepath in generated_charfiles:
zipObj.write(filepath)
print(f"returning file: {return_zipfile}")
return return_zipfile
description = "Upload een surfacelines.csv bestand in QDAMEdit format en krijg een annotatie file in characteristicpoints format terug \n" +\
"Een neural netwerk gebaseerd op image segmentation heeft geleerd op basis van ~6000 geannoteerde profielen om zo goed mogelijk automatisch de punten te plaatsen op de profielen.\n" +\
"Er zijn meerdere modellen beschikbaar om de annotatie te genereren, het 'dijk' model probeert alleen de dijk te vinden, het 'dijk+sloot' model zoekt ook naar een sloot en het 'volledig' model " +\
"probeert zo veel mogelijk van de punten beschikbaar in het QDAMEdit format te vinden. Probeer eerst het 'dijk' model aangezien hier de consistentste resultaten uit komen."
iface = gr.Interface(
fn=annotate_file,
title="Dijkprofiel Annotator",
description=description,
inputs=[gr.inputs.File(file_count="multiple", type="file", label="te annoteren surfacelines files", optional=False), gr.inputs.Dropdown(['dijk', 'dijk+sloot', "volledig"], type="value", default=None, label='Model type')],
outputs=gr.outputs.File(label="gegenereerde file"))
iface.launch()