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
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 ''
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('이미지 업로드', '업로드할 이미지 파일이 없습니다.확장자를 확인해주세요.')
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)
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)