Пример #1
0
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!"
Пример #2
0
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"
Пример #3
0
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)
Пример #4
0
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!"
Пример #5
0
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))
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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))
Пример #9
0
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)