def receive_training_data(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'file' not in request.files: raise exc.InvalidData('No file part', status_code=404) if not request.form['PID'] or not request.form['Category'] or not request.form['Label']: raise exc.InvalidData('Missing metadata', status_code=404) saved_files = [] uploaded_files = request.files.getlist('file') print('uploaded files : ' + str(uploaded_files)) for file in uploaded_files: if file.filename == '': raise exc.InvalidData('No selected file', status_code=404) if not file or not utils.allowed_file(file.filename): raise exc.InvalidData('Image Data invalid', status_code=404) filename = secure_filename(file.filename) filepath = utils.create_filepath(request.form, app.config['UPLOAD_FOLDER'], filename) file.save(filepath) saved_files.append(filepath) DirPath = os.path.dirname(filepath) controller.insert_record(request.form['PID'], request.form['Category'], request.form['Label'], DirPath) inserted_id = controller.insert_model(request.form['PID'], request.form['Category']) controller.update_model_status(request.form['PID'], request.form['Category'], controller.TrainingStatus.not_trained) if app.config['LOG_DETAIL']: log_misc = {} log_misc["ImagesFilePath"] = [] for saved_file in saved_files: log_misc["ImagesFilePath"].append(saved_file) time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed, misc=log_misc) return "Images Uploaded!"
def start_training(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) thread = threading.Thread(target=_start_training, args=(request.form,)) thread.start() if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed) return "Model Queued"
def send_model_file(pid, category, filename): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed) try: path = os.path.join(pid, category, filename) return send_file(os.path.join(app.config['MODEL_FOLDER'], path)) except Exception as e: raise exc.InvalidData('Failed to send file', status_code=404)
def update_label(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'PID' not in request.form or 'Category' not in request.form or 'Label' not in request.form or 'NewLabel' not in request.form: raise exc.InvalidData('Missing Data for training', status_code=404) controller.update_label(request.form['PID'], request.form['Category'], request.form['Label'], request.form['NewLabel']) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed) return "Label Updated!"
def list_labels(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'PID' not in request.form or 'Category' not in request.form: raise exc.InvalidData('Missing Data for training', status_code=404) result = controller.list_labels(request.form['PID'], request.form['Category']) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed, response=result) return make_response(jsonify(result))
def run_inference_multi(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'file' not in request.files: raise exc.InvalidData('No file part', status_code=404) saved_files = [] upload_dir = str(uuid.uuid4()) uploaded_files = request.files.getlist('file') print('uploaded files : ' + str(uploaded_files)) for file in uploaded_files: if file.filename == '': raise exc.InvalidData('No selected file', status_code=404) if not file or not utils.allowed_file(file.filename): raise exc.InvalidData('Image Data invalid', status_code=404) filename = secure_filename(file.filename) filename = os.path.join(upload_dir, filename) filepath = utils.create_filepath(request.form, app.config['INFERENCE_FOLDER'], filename) print('Saved image file for inference : ' + filepath) file.save(filepath) saved_files.append(filepath) async_result = queue_inference.apply_async(queue='queue_inference', args=[request.form['PID'], request.form['Category'], None, saved_files]) result = async_result.get(interval=0.005) if not app.config['LOG_DETAIL']: shutil.rmtree(uplod_dir) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time log_misc = {} log_misc["ImagesFilePath"] = saved_files train_mode = controller.get_training_mode(request.form['PID'], request.form['Category']) if train_mode is not None and 'NetworkModel' in train_mode: log_misc["NetworkModel"] = train_mode["NetworkModel"] if train_mode is not None and 'TrainingMode' in train_mode: log_misc["TrainingMode"] = train_mode["TrainingMode"] if train_mode is not None and 'GlobalStepCount' in train_mode: log_misc["GlobalStepCount"] = train_mode["GlobalStepCount"] log_result = {} for key in result: encode_key = key.replace("\\", "\\\\").replace("\$", "\\u0024").replace(".", "\\u002e") log_result[encode_key] = result[key] controller.insert_log_flask_api(request.path, request.form, time_elapsed, response=log_result, misc=log_misc) if result is not None: return make_response(jsonify(result)) else: raise exc.InvalidData('No model available for the specified data.', status_code=404)
def send_model(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'PID' not in request.form or 'Category' not in request.form: raise exc.InvalidData('Missing Data for training', status_code=404) output = controller.get_model_path(request.form['PID'], request.form['Category']) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed, response=output) if output: return make_response(jsonify(output)) else: raise exc.InvalidData('No model available for the specified data.', status_code=404)
def get_training_status(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if 'PID' not in request.form or 'Category' not in request.form: raise exc.InvalidData('Missing Data for training status', status_code=404) training_status = controller.get_training_status(request.form['PID'], request.form['Category']) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed, response=training_status) if training_status is None: raise exc.InvalidData('No model trained for this data', status_code=404) else: print('training status : ' + str(training_status)) return make_response(jsonify(training_status))
def delete_label(): start_time = time.time() print('API called ' + str(request.path) + ' : ' + str(request.form)) if app.config['LOG_DETAIL']: # keep deleting image if detail log option is set keep_deleted_image_dirpath = utils.create_dirpath(request.form, app.config['DELETED_IMAGE_FOLDER']) status = controller.delete_label(request.form['PID'], request.form['Category'], request.form['Label'], keep_deleted_image_directory=keep_deleted_image_dirpath) else: status = controller.delete_label(request.form['PID'], request.form['Category'], request.form['Label']) if app.config['LOG_DETAIL']: time_elapsed = time.time() - start_time controller.insert_log_flask_api(request.path, request.form, time_elapsed, response=status) if status: return "Label Deleted" else: raise exc.InvalidData('Error deleting label. Please check input data.', status_code=404)