Beispiel #1
0
def img_upload():
    group = database.db_find_group(db)
    result = {'file_num': 0, 'file_success': [], 'file_fail': [], 'image_group': group}
    if request.method == 'POST':
        '''
        input
        upload 에서는 {group: 그룹이름, group_comment: 그룹 설명, gen_user: 만든사람ID} + file_list 를 보내주면 된다.

        해당 정보들을 DB에 저장함

        output
        {file_fail: [업로드 실패한 파일 이름], file_num: 업로드 시도하는 파일 갯수 int, 
        file_success: [업로드 성공한 파일이름], image_group: {이미지그룹이름:그룹설명}}
        '''
        # 이미지 여러장 가져오는 것은 files.getlist 파일 하나만 가져오는 것은 files 만 해주면 된다.
        file_list = request.files.getlist('')
        # request.files [파일 여러개] -> 이거는 S3 에 이미지 파일 여러개 업로드하는 용
        if len(file_list) > 0:
            try:
                group_name = request.values['group']
                group_comment = request.values['group_comment']
                gen_user = session['username']
                count = len(file_list)
                file_fail = []
                file_success = []
                for file in file_list:
                    filename, H, W = storage.upload_img(s3, file)
                    if filename:
                        database.db_insert_dataset(db, filename, group_name, H, W)
                        file_success.append(filename)
                    else:
                        file_fail.append(file.filename)
                if len(file_success) > 0:
                    database.db_insert_group(db, group_name, group_comment, gen_user)
                # 등록에 성공한 그룹 return
                group = database.db_find_group(db)
                result = {'file_num': count, 'file_success': file_success, 'file_fail': file_fail,
                          'image_group': group}
            except KeyError:
                return error_handler('이미지 업로드', '이미지 그룹에 대해서 이미지 그룹명과 설명을 적어주세요')
        else:
            return error_handler('이미지 업로드', '업로드할 이미지 파일이 없습니다.\n확장자를 확인해주세요.')
    return result
Beispiel #2
0
def task_create():
    # task 생성 함수인데 task 수정, 조건에 맞지 않는 task 수정 요청 무시 
    # 3가지 기능을 모두 가지고 있다...
    """
    input
    선택된 그룹 이름, 라벨링 타입(ocr, seg,...), Task 이름, Task 설명, 설명 첨부 이미지(example 이라는 이름으로 되어있음)

    사용자가 새로운 task 를 만들었다면 database에 해당 정보들을 저장

    output
    선택된 그룹 이름, 라벨링 타입(ocr, seg,...), Task 이름, Task 설명
    """
    # {선택된 그룹, 라벨링 타입, Task 이름, Task 설명, 설명 이름 }
    result = {'choose_group': '', 'kind': '', 'name': '', 'comment': '',
              'img_group': database.db_find_group(db),
              'task_group': database.db_find_task(db)}
    # 선택된 이미지 그룹 group , 라벨링 kind, Task 이름 name
    result = utils.request_mapping(request.values, result)
    try:
        # 프론트엔드에서 이미지가 1장만 오도록 되어있어서 file.getlist 를 안해도 된다.
        label_example = request.files['']
    except KeyError:
        # 예시 이미지가 없으면 무시한다.
        label_example = None
    filename_list = database.db_find_dataset_filenames(db, result['choose_group'])
    # 선택된 이미지 그룹(dataset)이 존재 하면 새로운 Task 등록
    if len(filename_list) > 0:
        # test_task_group 에 이름이 중복되는 것이랑 수정 명령인지 구분하는 코드
        task_status = database.db_check_taskgroup(db, result['name'], result['choose_group'], result['kind'])
        session_name = session['username']
        # task_status 설명은 database.db_check_taskgroup 에
        if task_status == 'create':
            insert_task_group(result, label_example, session_name)
        elif task_status == 'update':
            # task 그룹을 수정할때 과거에 저장된 예시 이미지들을 지우는 작업
            # create 함수에 수정하는 코드도 함께들어가 있네
            example = database.db_find_example_img(db, result['name'])
            # 기존에 있던 예시 이미지 파일을 지우고
            if label_example:
                storage.delete_img(s3, example, 'example/')
            # 새로 바뀐 예시 이미지로 업데이트
            insert_task_group(result, label_example, session_name)
        else:
            # task_status == drop
            return error_handler('task 생성', "task 이름이 중복되었습니다. 이름을 변경하거나" +
                                 "수정을 원한다면 라벨링타입, 이미지 그룹을 동일하게 해주세요")
    else:
        return error_handler('task 생성', '선택된 이미지 그룹이 존재하지 않습니다. 데이터베이스를 확인해주세요')
    return ''
Beispiel #3
0
def img_upload():
    # 이미지를 여러장 업로드하여 이미지 그룹을 만드는 api이다.
    # file_num(총 이미지 개수) file_success(업로드 성공한 파일 이름), file_fail(실패개수)은 사용하지 않지만 추후 사용 가능하다
    group = database.db_find_group(db)
    result = {'file_num': 0, 'file_success': [], 'file_fail': [], 'image_group': group}
    # 이미지 여러장 가져오는 것은 files.getlist 파일 하나만 가져오는 것은 files 만 해주면 된다.
    file_list = request.files.getlist('')
    # request.files [파일 여러개] -> 이거는 S3 에 이미지 파일 여러개 업로드하는 용
    if len(file_list) > 0:
        try:
            group_name = request.values['group']
            group_comment = request.values['group_comment']
            gen_user = session['username']
            count = len(file_list)
            file_fail = []
            file_success = []
            for file in file_list:
                # s3에 파일을 업로드하면 이름이 고유한 값으로 바뀐다.
                filename, H, W = storage.upload_img(s3, file)
                if filename:
                    # 바뀐 이름으로 mondoDB에 이미지 관련 정보 저장
                    database.db_insert_dataset(db, filename, group_name, H, W)
                    file_success.append(filename)
                else:
                    file_fail.append(file.filename)
            if len(file_success) > 0:
                database.db_insert_group(db, group_name, group_comment, gen_user)
            # 등록에 성공한 그룹 return
            group = database.db_find_group(db)
            result = {'file_num': count, 'file_success': file_success, 'file_fail': file_fail,
                      'image_group': group}
            return result
        except KeyError:
            return error_handler('이미지 업로드', '이미지 그룹에 대해서 이미지 그룹명과 설명을 적어주세요')
    else:
        return error_handler('이미지 업로드', '업로드할 이미지 파일이 없습니다.확장자를 확인해주세요.')
Beispiel #4
0
def img_list():
    img_group = database.db_find_group(db)
    if request.args:
        img_check = []
        result = database.db_find_task(db, {'name': request.args['task_name']})
        for img in img_group:
            try:
                if result[0]['group'] == img['group']:
                    img['is_checked'] = 1
                else:
                    img['is_checked'] = 0
            except IndexError:
                img['is_checked'] = 0
            img_check.append(img)
        img_group = img_check
    return jsonify(img_group)
Beispiel #5
0
def img_list():
    # 현재 생성되어있는 이미지 그룹 중에서 GET 으로 들어온 task_name을 
    # task_group collection 에서 검색해서 어떤 task 그룹에 활성화 되어있는지 알려준다.
    img_group = database.db_find_group(db)
    if request.args:
        img_check = []
        result = database.db_find_task(db, {'name': request.args['task_name']})
        for img in img_group:
            try:
                if result[0]['group'] == img['group']:
                    img['is_checked'] = 1
                else:
                    img['is_checked'] = 0
            except IndexError:
                img['is_checked'] = 0
            img_check.append(img)
        img_group = img_check
    return jsonify(img_group)