Exemplo n.º 1
0
    def get(self, request):
        try:
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            res = []
            user_id = request.GET['userId']
            group_name = request.GET['groupName']
            groups = GroupInfo.objects.values('group_id').distinct().filter(
                display_name__contains=group_name, user_id=user_id)
            for group_id in groups:
                group_id = group_id['group_id']
                files = FaceInfo.objects.values('file_id').distinct().filter(
                    group_id=group_id, user_id=user_id)

                for file in files:
                    file_id = file['file_id']
                    item = File.objects.get(file_id=file_id, user_id=user_id)
                    res.append(item)
            serializer = FileSerializer(res, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
        except Exception as e:
            msg = {'msg': str(e)}
            print(e)
            return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 2
0
    def put(self, request, folder_id=None):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'],
                              user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 폴더 불러오기
        folder = self.get_object(folder_id)

        # S3 내의 폴더 이름 변경
        # S3 Client 생성
        s3_client = get_s3_client(
            request.headers['Access-Key-Id'],
            request.headers['Secret-Key'],
            request.headers['Session-Token'],
        )
        # S3 Key 이름 변경
        rename_move_folder(
            s3_client, '{0}/{1}{2}/'.format(folder.user_id.user_id,
                                            folder.path, folder.name),
            '{0}/{1}{2}/'.format(folder.user_id.user_id, folder.path,
                                 request.data['new_name']))

        # Serializer와 매칭
        serializers = FolderNameSerializer(folder,
                                           {'name': request.data['new_name']})
        if serializers.is_valid():
            serializers.save()
            return Response("OK",
                            content_type="application/json",
                            status=status.HTTP_202_ACCEPTED)
        return Response(serializers.errors,
                        content_type="application/json",
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 3
0
    def post(self, request):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'],
                              user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 폴더 DB에 생성
        serializers = FolderSerializer(data=request.data)
        if not serializers.is_valid():
            return Response(serializers.errors,
                            content_type="application/json",
                            status=status.HTTP_400_BAD_REQUEST)
        serializers.save()

        # S3 Client 생성
        s3_client = get_s3_client(
            request.headers['Access-Key-Id'],
            request.headers['Secret-Key'],
            request.headers['Session-Token'],
        )

        # S3에 폴더에 해당하는 Key 생성
        upload_folder(
            s3_client,
            '{0}/{1}{2}/'.format(request.data['user_id'], request.data['path'],
                                 request.data['name']))

        return Response(serializers.data,
                        content_type="application/json",
                        status=status.HTTP_201_CREATED)
Exemplo n.º 4
0
    def delete(self, request):
        if request.method == "DELETE":
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            try:
                data = request.data
                user_id = data['userId']
                client = boto3.client('rekognition')
                collection_id = User.objects.values(
                    'collection_id').distinct().filter(user_id=user_id)
                collection_id = collection_id[0]['collection_id']
                print('Attempting to delete collection ' + collection_id)
                status_code = 0
                response = client.delete_collection(CollectionId=collection_id)
                status_code = response['StatusCode']
                FaceInfo.objects.filter(user_id='user_test').delete()
                GroupInfo.objects.filter(user_id='user_test').delete()
                msg = {'msg': ' Delete collection ' + str(collection_id)}
                return Response(msg, status=status.HTTP_200_OK)
            except Exception as e:
                msg = {'msg': str(e)}
                print(msg)
                return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 5
0
    def get(self, request):
        if request.method == 'GET':
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            try:
                user_id = request.GET['user_id']
                group_id = request.GET['group_id']
                files = FaceInfo.objects.values('file_id').distinct().filter(
                    group_id=group_id, user_id=user_id)
                print(files)
                res = []
                for file in files:
                    file_id = file['file_id']
                    item = File.objects.filter(
                        file_id=file_id, user_id=user_id)
                    res.append(item[0])
                print(res)
                serializer = FileGroupSerializer(res, many=True)
                return Response(serializer.data, status=status.HTTP_200_OK)
            except Exception as e:
                msg = {'msg': str(e)}
                print(e)
                return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 6
0
    def post(self, request):
        if request.method == 'POST':
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            try:
                data = request.data
                user_id = data['user_id']
                client = boto3.client('rekognition', aws_access_key_id=AWS_ACCESS_KEY_ID,
                                      aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=DEFAULT_REGION_NAME)
                collection_id = User.objects.values(
                    'collection_id').distinct().filter(user_id=user_id)
                collection_id = collection_id[0]['collection_id']
                print('Creating collection:' + collection_id)
                response = client.create_collection(CollectionId=collection_id)
                print('Collection ARN: ' + response['CollectionArn'])
                print('Status code: ' + str(response['StatusCode']))
                print('Done...')
                msg = {'msg': ' Create collection '+str(collection_id)}
                return Response(msg, status=status.HTTP_200_OK)
            except Exception as e:
                msg = {'msg': str(e)}
                print(msg)
                return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 7
0
    def delete(self, request, folder_id=None):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'],
                              user_id=request.DELETE['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 사용자의 휴지통 정보 가져오기
        trash = request.DELETE['trash']

        # 휴지통으로 옮기려는 폴더 찾기
        folder = self.get_object(folder_id)

        # S3 내의 폴더 Trash 폴더로 이동
        # S3 Client 생성
        s3_client = get_s3_client(
            request.headers['Access-Key-Id'],
            request.headers['Secret-Key'],
            request.headers['Session-Token'],
        )
        # S3 Key 이름 변경
        rename_move_folder(
            s3_client, '{0}/{1}{2}/'.format(folder.user_id.user_id,
                                            folder.path, folder.name),
            '{0}/{1}/{2}/'.format('trash', folder.user_id.user_id,
                                  folder.name))

        # Serializer와 매칭
        serializers = FolderMoveSerializer(
            folder, {
                'parent_id': trash,
                'path': '{0}/{1}/'.format('trash', folder.user_id.user_id)
            })

        if serializers.is_valid():
            serializers.save()

        # 휴지통 이동 기록 생성
        trash_serializer = TrashFolderSerializer(
            data={
                'folder_id':
                folder_id,
                'trashed_at':
                datetime.datetime.now(),
                'expired_at':
                datetime.datetime.now() + datetime.timedelta(days=30),
            })

        if trash_serializer.is_valid():
            trash_serializer.save()

            return Response("OK",
                            content_type="application/json",
                            status=status.HTTP_202_ACCEPTED)
        return Response(serializers.errors,
                        content_type="application/json",
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 8
0
    def get(self, request, folder_id):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'],
                              user_id=request.GET['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 폴더 불러오기
        folder = self.get_object(folder_id)
        serializers = FolderSerializer(folder)
        return Response(serializers.data,
                        content_type="application/json",
                        status=status.HTTP_200_OK)
Exemplo n.º 9
0
    def get(self, request):
        if request.method == 'GET':
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            try:
                user_id = request.GET['user_id']
                res = GroupInfo.objects.filter(user_id=user_id)
                serializer = GroupListSerializer(res, many=True)
                return Response(serializer.data, status=status.HTTP_200_OK)
            except Exception as e:
                msg = {'msg':  str(e)}
                print(e)
                return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 10
0
    def get(self, request, format=None):
        try:
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            keyword = request.GET['keyword']
            userId = request.GET['userId']
            res = File.objects.filter(
                name__contains=keyword, user_id=userId
            )
            serializer = FileSerializer(res, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
        except Exception as e:
            msg = {'error': str(e)}
            # print(e)
            return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 11
0
    def put(self, request):
        if request.method == 'PUT':
            # Permission 확인
            if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
                return Response(status=status.HTTP_403_FORBIDDEN)

            try:
                data = request.data
                group_id = data['group_id']
                user_id = data['user_id']
                display_name = data['display_name']
                item = GroupInfo.objects.filter(
                    user_id=user_id, group_id=group_id)
                item.update(display_name=display_name)
                return Response({'msg': 'complete'}, status=status.HTTP_200_OK)
            except Exception as e:
                msg = {'msg': str(e)}
                print(e)
                return Response(msg, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 12
0
    def get(self, request, folder_id):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'],
                              user_id=request.GET['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 1. 폴더 목록 조회
        folders = Folder.objects.filter(parent_id=folder_id)
        folder_serializers = FolderSerializer(folders, many=True)

        # 2. 파일 목록 조회
        files = File.objects.filter(folder_id=folder_id)
        files_serializers = FileSerializer(files, many=True)

        # 3. 결과 응답
        return Response(
            {
                'folders': folder_serializers.data,
                'files': files_serializers.data,
            },
            content_type="application/json",
            status=status.HTTP_202_ACCEPTED)
Exemplo n.º 13
0
    def post(self, request):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 복원할 위치 확인
        location = request.data['loc']
        restore_loc = self.get_object_folder(request.data['loc'])
        new_path = ''
        if restore_loc.parent_id:
            new_path = '{0}{1}/'.format(
                restore_loc.path, restore_loc.name
            )

        # S3 Client 생성
        s3_client = get_s3_client(
            request.headers['Access-Key-Id'],
            request.headers['Secret-Key'],
            request.headers['Session-Token'],
        )

        # 휴지통 복원
        # 1. 파일 복원
        files = []
        self.validate_ids(id_list=request.data['files'], type='file')
        for file_id in request.data['files']:
            # 파일 불러오기
            file = self.get_object_file(file_id=file_id)
            files.append(file)

            rename_move_file(s3_client, '{0}{1}'.format(
                file.path, file.name
            ), '{0}/{1}{2}'.format(
                file.user_id.user_id, new_path, file.name
            ))

            # S3 Address 처리
            s3_url = get_s3_url('{0}/{1}{2}'.format(
                file.user_id.user_id, new_path, file.name
            ))

            # DB 처리
            obj = FileMoveSerializer(
                file, {
                    'folder_id': restore_loc.folder_id,
                    'path': new_path,
                    's3_url': s3_url,
                }
            )
            if obj.is_valid():
                obj.save()
            files.append(obj.data)

        # 휴지통 이동 기록 삭제
        TrashFile.objects.filter(file_id__in=request.data['files']).delete()

        # 2. 폴더 복원
        folders = []
        self.validate_ids(id_list=request.data['folders'], type='folder')
        for folder_id in request.data['folders']:
            # 폴더 불러오기
            folder = self.get_object_folder(folder_id=folder_id)

            print('{0}{1}/'.format(
                folder.path, folder.name
            ))

            # S3 Key 이름 변경
            rename_move_folder(s3_client, '{0}{1}/'.format(
                folder.path, folder.name
            ), '{0}/{1}{2}/'.format(
                folder.user_id.user_id, new_path, folder.name
            ))

            # DB 처리
            folder_serializer = FolderMoveSerializer(
                folder,
                {'parent_id': location, 'path': new_path},
            )
            if folder_serializer.is_valid():
                folder_serializer.save()
            folders.append(folder_serializer.data)

        # 휴지통 이동 기록 삭제
        TrashFolder.objects.filter(
            folder_id__in=request.data['folders']).delete()

        return Response({
            "files": files,
            "folders": folder_serializer.data,
        }, content_type="application/json", status=status.HTTP_202_ACCEPTED)
Exemplo n.º 14
0
    def delete(self, request):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        # 휴지통 ID 확인
        trash_id = request.data['trash']

        # 삭제 방식 확인
        target = request.data['target']

        # S3 Client 생성
        s3_client = get_s3_client(
            request.headers['Access-Key-Id'],
            request.headers['Secret-Key'],
            request.headers['Session-Token'],
        )

        # 휴지통 전체 삭제
        if target == 'all':
            # 1. 파일 삭제
            # 휴지통에 있는 파일 선택
            files = File.objects.filter(folder_id=trash_id)

            # 파일 삭제
            if files:
                files.delete()

            # 휴지통 이동 기록 삭제
            TrashFile.objects.all().delete()

            # 2. 폴더 삭제
            # 휴지통에 있는 폴더 선택
            folders = Folder.objects.filter(parent_id=trash_id)

            # 폴더 삭제
            if folders:
                folders.delete()

            # 휴지통 이동 기록 삭제
            TrashFolder.objects.all().delete()

            # S3 휴지통 밀어버리기!
            clear_folder(
                s3_client, 'trash/{0}/'.format(request.data['user_id'])
            )

            return Response("OK", content_type="application/json", status=status.HTTP_200_OK)

        # 휴지통에서 선택 항목 삭제
        elif target == 'select':

            # 1. 파일 삭제
            for file_id in request.data['files']:
                file = self.get_object_file(file_id=file_id)

                delete_folder_file(
                    s3_client, 'trash/{0}/{1}'.format(
                        request.data['user_id'], file.name
                    )
                )

                file.delete(s3_client)
            # 휴지통 이동 기록 삭제
            TrashFile.objects.filter(
                file_id__in=request.data['files']).delete()

            # 2. 폴더 삭제
            for folder_id in request.data['folders']:
                folder = self.get_object_folder(folder_id=folder_id)

                delete_folder_file(
                    s3_client, 'trash/{0}/{1}/'.format(
                        request.data['user_id'], folder.name
                    )
                )

                folder.delete()
            # 휴지통 이동 기록 삭제
            TrashFolder.objects.filter(
                folder_id__in=request.data['folders']).delete()

            return Response("OK", content_type="application/json", status=status.HTTP_200_OK)
Exemplo n.º 15
0
    def post(self, request):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        try:
            data = request.data
            print(data)
            file_id = data['file_id']
            user_id = data['user_id']
            client = boto3.client('rekognition', aws_access_key_id=AWS_ACCESS_KEY_ID,
                                  aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=DEFAULT_REGION_NAME)

            print(file_id, user_id)

            # get file address using file id
            file_address = File.objects.values(
                's3_url').distinct().filter(file_id=file_id, user_id=user_id)
            file_address = file_address[0]['s3_url']

            # Check if it is an image file
            im = requests.get(file_address)
            im = Image.open(BytesIO(im.content))

            # filename not an image file
            # file_address format : object URL
            proc = file_address[8:]
            bucket = proc[:proc.find('.')]
            file_path = proc[proc.find('/') + 1:]

            print(bucket, file_path)
            if file_path.find('/') != -1:
                file_name = file_path
                while (file_name.find('/') != -1):
                    file_name = file_name[file_name.find('/') + 1:]
            else:
                file_name = file_path

            if file_name.find('/') != -1:
                file_name = file_name[file_name.find('/') + 1:]

            # get collection id using user id
            collection_id = User.objects.values(
                'collection_id').distinct().filter(user_id=user_id)
            collection_id = collection_id[0]['collection_id']

            # set max number of face to add
            add_max_faces = 3
            # add faces to collection
            response = client.index_faces(CollectionId=collection_id,
                                          Image={'S3Object': {
                                              'Bucket': bucket, 'Name': file_path}},
                                          ExternalImageId='FIX',  # For Korean
                                          MaxFaces=add_max_faces,
                                          QualityFilter="AUTO",
                                          DetectionAttributes=['ALL'])
            print('Complete Add Face')
            # process result
            face_records = response['FaceRecords']
            unindex_faces = response['UnindexedFaces']

            if (len(face_records) == 0):
                # case1 : There is no person in this image
                print('No Person in Photo')
                msg = {'msg': 'No Person in Photo'}
            else:
                print('Faces indexed:')
                for faceRecord in face_records:
                    # case2 : There is people in this image

                    print('  Face ID: ' + faceRecord['Face']['FaceId'])
                    print('  Location: {}'.format(
                        faceRecord['Face']['BoundingBox']))

                    # Check if there is already the same person

                    # Set threshold for similarity
                    threshold = 95

                    # Set max result number to find in a collection
                    max_faces = 1
                    client = boto3.client('rekognition', aws_access_key_id=AWS_ACCESS_KEY_ID,
                                          aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=DEFAULT_REGION_NAME)

                    face_id = faceRecord['Face']['FaceId']
                    location = faceRecord['Face']['BoundingBox']
                    response = client.search_faces(CollectionId=collection_id,
                                                   FaceId=face_id,
                                                   FaceMatchThreshold=threshold,
                                                   MaxFaces=max_faces)

                    face_matches = response['FaceMatches']

                    # Even if input face id is in the collection, results do not include input face id
                    group_id = FaceInfo.objects.values(
                        'group_id').distinct().filter(face_id=face_id)
                    if(len(group_id) != 0):
                        # case 1 : There is the same face id
                        group_id = group_id[0]['group_id']
                        print()
                        print('group_id : ', group_id)
                        print()
                        face_serializers = FaceInfoSerializer(data={
                            'user_id': user_id,
                            'face_id': face_id,
                            'group_id': group_id,
                            'file_id': file_id,
                        })
                        if face_serializers.is_valid():
                            face_serializers.save()
                        else:
                            print(' DB에 저장 안됨')
                            print(face_serializers.errors)

                        msg = {'msg': 'Add to group '+str(group_id)}
                    elif (len(face_matches) == 0):
                        # case2-1 : There is no same person in collection
                        print('New Person')
                        s3_client = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY_ID,
                                                 aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=DEFAULT_REGION_NAME)

                        # group info bucket
                        group_bucket = 'f4cloud-facegroup'

                        # set initial name of new group
                        timestamp = datetime.now().strftime('%y%m%d%H%M%S%f')
                        group_name_prefix = user_id
                        new_group_id = group_name_prefix + timestamp

                        print(file_address)
                        img_response = requests.get(file_address)
                        img = Image.open(BytesIO(img_response.content))
                        width, height = img.size
                        left = width * location['Left']
                        top = height * location['Top']
                        crop_loc = (
                            left, top, left + (width * location['Width']), top + (height * location['Height']))
                        crop_img = img.crop(crop_loc)
                        crop_img = crop_img.convert("RGB")
                        # crop_img.show()
                        # save crop image
                        rep_img = io.BytesIO()
                        img_format = "JPEG"
                        crop_img.save(rep_img, img_format)
                        rep_img.seek(0)

                        url_gen = new_group_id + file_id + '.' + img_format

                        s3_prefix = 'https://'+group_bucket+'.s3.amazonaws.com/'
                        s3_client.upload_fileobj(
                            rep_img,
                            group_bucket,
                            url_gen,
                            ExtraArgs={
                                "ContentType": 'image/jpeg'
                            }
                        )
                        rep_faceaddress = s3_prefix + url_gen
                        rep_fileid = file_id
                        rep_faceid = face_id

                        print()
                        print('group_id : ', new_group_id)
                        print()
                        group_serializers = GroupListSerializer(data={
                            'group_id': new_group_id,
                            'user_id': user_id,
                            'rep_faceid': rep_faceid,
                            'rep_faceaddress': rep_faceaddress,
                            'rep_fileid': rep_fileid,
                        })
                        if group_serializers.is_valid():
                            group_serializers.save()
                        else:
                            print(' DB에 저장 안됨')
                            print(group_serializers.errors)

                        face_serializers = FaceInfoSerializer(data={
                            'user_id': user_id,
                            'face_id': face_id,
                            'group_id': new_group_id,
                            'file_id': file_id,
                        })
                        if face_serializers.is_valid():
                            face_serializers.save()
                        else:
                            print(' DB에 저장 안됨')
                            print(face_serializers.errors)

                        msg = {'msg': 'Create new group'}
                    else:
                        # case2-2 : There is same person in collection
                        print('add into existing group')
                        for match in face_matches:
                            print('FaceId:' + match['Face']['FaceId'])
                            print('Similarity: ' +
                                  "{:.2f}".format(match['Similarity']) + "%")
                            match_face_id = match['Face']['FaceId']

                            get_group_id = GroupInfo.objects.values('group_id').distinct().filter(
                                rep_faceid=match_face_id, user_id=user_id)
                            print(get_group_id)
                            group_id = get_group_id[0]['group_id']
                            print()
                            print('group_id : ', group_id)
                            print()
                            face_serializers = FaceInfoSerializer(data={
                                'user_id': user_id,
                                'face_id': face_id,
                                'group_id': group_id,
                                'file_id': file_id,
                            })
                            if face_serializers.is_valid():
                                face_serializers.save()
                            else:
                                print(' DB에 저장 안됨')
                                print(face_serializers.errors)

                        del_faces = list()
                        del_faces.append(face_id)
                        print(del_faces)
                        print('face_id:' + face_id)
                        response = client.delete_faces(CollectionId=collection_id,
                                                       FaceIds=del_faces)
                        print(
                            str(len(response['DeletedFaces'])) + ' faces deleted:')

                        msg = {'msg': 'Add to group ' + str(group_id)}

            '''if (len(unindex_faces) != 0):
                print('Faces not indexed:')
                for unindexedFace in unindex_faces:
                    print(' Location: {}'.format(unindexedFace['FaceDetail']['BoundingBox']))
                    print(' Reasons:')
                    for reason in unindexedFace['Reasons']:
                        print('   ' + reason)'''
            ''' except IOError as e:
            print(e)
            return Response({'msg':'Not Image File'})
        except IndexError as e:
            print(e)
            return Response({'msg':'parameter error'})'''
        except Exception as e:
            msg = {'msg': str(e)}
            print(msg)
            return Response(msg, status=status.HTTP_400_BAD_REQUEST)
        return Response(msg, status=status.HTTP_200_OK)
Exemplo n.º 16
0
    def delete(self, request):
        # Permission 확인
        if not is_token_valid(token=request.headers['ID-Token'], user_id=request.data['user_id']):
            return Response(status=status.HTTP_403_FORBIDDEN)

        try:
            data = request.data
            file_id = data['file_id']
            user_id = data['user_id']
            client = boto3.client('rekognition', aws_access_key_id=AWS_ACCESS_KEY_ID,
                                  aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=DEFAULT_REGION_NAME)
            collection_id = User.objects.values(
                'collection_id').distinct().filter(user_id=user_id)
            collection_id = collection_id[0]['collection_id']
            #print('Creating collection:' + collection_id)
            faces = FaceInfo.objects.values('face_id').distinct().filter(
                user_id=user_id, file_id=file_id)
            #print('faces : ' + str(faces))
            if len(faces) == 0:
                msg = {'msg': 'There is no face id about this file '}
                return Response(msg, status=status.HTTP_200_OK)
            for faceId in faces:
                face_id = faceId['face_id']
                # check if this face id is rep_face id
                group_id = FaceInfo.objects.values('group_id').distinct().filter(
                    user_id=user_id, face_id=face_id)
                group_id = group_id[0]['group_id']
                print(group_id)

                check = GroupInfo.objects.filter(
                    user_id=user_id, group_id=group_id)
                item = FaceInfo.objects.filter(
                    user_id=user_id, file_id=file_id, face_id=face_id)
                item.delete()
                other_mem = FaceInfo.objects.values(
                    'file_id').distinct().filter(group_id=group_id)
                if len(other_mem) == 0:
                    # There is no member
                    del_faces = []
                    del_faces.append(face_id)
                    response = client.delete_faces(CollectionId=collection_id,
                                                   FaceIds=del_faces)
                    item = FaceInfo.objects.filter(
                        user_id=user_id, file_id=file_id, face_id=face_id)
                    item.delete()
                    check.delete()
                    print(
                        str(len(response['DeletedFaces'])) + ' faces deleted:')
                    for faceId in response['DeletedFaces']:
                        print(faceId)
                else:
                    '''new_rep_fileid = new_rep_fileid[0]['file_id']
                    new_rep_fileaddress = FileInfo.objects.values('file_address').distict().filter(file_id=file_id)
                    new_rep_fileaddress= new_rep_fileaddress[0]['file_address']'''
                    del_faces = []
                    del_faces.append(face_id)
                    response = client.delete_faces(CollectionId=collection_id,
                                                   FaceIds=del_faces)
                    item = FaceInfo.objects.filter(
                        user_id=user_id, file_id=file_id, face_id=face_id)
                    item.delete()
                    print(
                        str(len(response['DeletedFaces'])) + ' faces deleted:')
                    for faceId in response['DeletedFaces']:
                        print(faceId)

            return Response({'msg': 'complete'}, status=status.HTTP_200_OK)
        except Exception as e:
            msg = {'msg': str(e)}
            # print(msg)
            return Response(msg, status=status.HTTP_400_BAD_REQUEST)