다음을 통해 공유


Azure AI Video Indexer API를 사용하여 얼굴을 편집하세요.

비디오에서 얼굴을 감지하고 식별하기 위해 Azure AI Video Indexer를 사용할 수 있습니다. 특정 개인의 얼굴을 흐리게(삭제) 처리하기 위해 비디오를 수정하려면, API를 사용할 수 있습니다.

여러 얼굴이 포함된 몇 분 분량의 영상은 수동으로 편집하는 데 몇 시간이 걸릴 수 있지만, Video Indexer API의 프리셋을 사용하면 얼굴 편집 과정이 몇 가지 간단한 단계로 줄어듭니다.

이 기사에서는 API를 사용하여 얼굴을 검열하는 방법을 설명합니다. Video Indexer API는 클라우드에서 확장 가능한 얼굴 감지 및 블러링을 통한 얼굴 흐림 처리를 제공하는 Face Redaction 프리셋을 포함하고 있습니다. 이 글은 API를 사용하여 얼굴을 수정하는 각 단계를 자세히 설명합니다.

다음 동영상은 Azure AI Video Indexer API를 사용하여 동영상을 편집하는 방법을 보여줍니다.

준수, 개인정보 보호, 보안

중요한 알림으로, Video Indexer를 사용하여 얻은 분석 또는 인사이트를 사용하는 경우 모든 관련 법률을 준수해야 합니다.

얼굴 서비스 접근은 Microsoft의 책임 있는 AI 원칙을 지원하기 위해 적격성과 사용 기준에 따라 제한됩니다. 얼굴 서비스는 Microsoft에서 관리하는 고객 및 파트너에게만 제공됩니다. 액세스를 신청하려면 얼굴 인식 입력 양식을 사용하세요. 자세한 내용은 Face 제한된 액세스 페이지를 참조하세요.

얼굴 편집 용어 및 계층 구조

Video Indexer의 얼굴 편집은 비디오 표준 및 고급 분석 사전 설정에서 제공하는 기존 Video Indexer 얼굴 감지 결과의 출력에 의존합니다.

비디오를 수정하려면 먼저 Video Indexer에 비디오를 업로드하고 표준 또는 고급 비디오 사전 설정을 사용하여 분석을 완료해야 합니다. Azure AI Video Indexer 웹 사이트 또는 API를 사용하여 수행할 수 있습니다. 그런 다음 얼굴 익명화 API를 사용하여 videoId 값을 사용하여 이 비디오를 참조할 수 있습니다. 우리는 표시된 얼굴이 수정된 새로운 비디오를 만듭니다. 비디오 분석과 얼굴 편집은 모두 별도의 청구 가능 작업입니다. 자세한 내용은 가격 책정 페이지를 참조하세요.

흐림 유형

다양한 유형의 흐림 효과를 얼굴 모자이크 처리에 사용할 수 있습니다. 유형을 선택하려면 요청 본문에서 blurringKind 매개변수에 대해 이름 또는 대표 번호를 사용하세요.

블러링 유형 번호 블러링 유형 이름 예시
0 MediumBlur Azure AI 비디오 인덱서 중간 블러 사진.
1 HighBlur 고화질로 흐릿하게 처리된 Azure AI 비디오 인덱서 사진.
2 LowBlur Azure AI 비디오 인덱서의 저해상도 사진.
3 BoundingBox Azure AI Video Indexer의 바운딩 박스 사진.
4 검정 Azure AI 비디오 인덱서 검은 상자 종류의 사진.

요청 본문에서 blurringKind 매개변수를 사용하여 블러링 유형을 지정할 수 있습니다.

예제는 다음과 같습니다.

{
    "faces": {
        "blurringKind": "HighBlur"
    }
}

또는 앞의 표에 설명된 대로 흐리게 표시 형식을 나타내는 숫자를 사용합니다.

{
    "faces": {
        "blurringKind": 1
    }
}

필터

필터를 적용하여 흐리게 할 얼굴 ID를 설정할 수 있습니다. JSON 파일의 본문에 쉼표로 구분된 배열에 얼굴 ID를 지정할 수 있습니다. scope 매개변수를 사용하여 이 얼굴들을 보안 처리에서 제외하거나 포함하십시오. ID를 지정하면 지정한 ID를 제외하고 모든 얼굴을 삭제하거나 해당 ID만 삭제할 수 있습니다. 다음 섹션에서 예제를 확인하십시오.

범위를 제외하다

다음 예제에서는 얼굴 ID 1001 및 1016을 제외한 모든 얼굴을 가리려면 Exclude 범위를 사용합니다.

{
    "faces": {
        "blurringKind": "HighBlur",
        "filter": {
            "ids": [1001, 1016],
            "scope": "Exclude"
        }
    }
}

범위를 포함하다

다음 예에서는 얼굴 ID 1001과 1016만 삭제하려면 Include 범위를 사용하십시오.

{
    "faces": {
        "blurringKind": "HighBlur",
        "filter": {
            "ids": [1001, 1016],
            "scope": "Include"
        }
    }
}

모든 얼굴을 지우다

모든 얼굴을 편집하려면 범위 필터를 제거하세요.

{
    "faces": {
        "blurringKind": "HighBlur",
    }
}

얼굴 ID를 가져오려면 인덱싱된 비디오로 이동하여 artifact file을 가져올 수 있습니다. 인공물에는 faces.json 파일과 비디오에서 감지된 모든 얼굴이 포함된 썸네일 .zip 파일이 있습니다. 얼굴을 ID와 일치시키고 숨길 얼굴 ID를 결정할 수 있습니다.

적출 작업 생성

편집 작업을 생성하려면 다음 API 호출을 사용하세요.

POST https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos/{videoId}/redact[?name][&priority][&privacy][&externalId][&streamingPreset][&callbackUrl][&accessToken]

다음 값이 필요합니다:

이름 가치 설명
Accountid {accountId} Video Indexer 계정의 ID.
Location {location} 귀하의 비디오 인덱서 계정이 위치한 Azure 지역. 예를 들어 westus입니다.
AccessToken {token} Azure Resource Manager REST API를 통해 생성된 계정 기여자 권한이 있는 토큰.
Videoid {videoId} 수정할 원본 비디오의 비디오 ID. List Video API를 사용하여 비디오 ID를 검색할 수 있습니다.
Name {name} 수정된 새 비디오의 이름입니다.

여기에 요청의 예가 있습니다:

https://api.videoindexer.ai/westeurope/Accounts/{id}/Videos/{id}/redact?priority=Low&name=testredaction&privacy=Private&streamingPreset=Default 

토큰을 키 값 형식 bearertoken:{token}이 있는 권한 부여 헤더로 지정하거나 을 사용하여 ?token={token}쿼리 매개 변수로 제공할 수 있습니다.

적용할 편집 작업 옵션이 포함된 JSON 형식의 요청 본문을 추가해야 합니다. 예제는 다음과 같습니다.

{
    "faces": {
        "blurringKind": "HighBlur"
    }
}

요청이 성공하면 응답 HTTP 202 ACCEPTED을(를) 받습니다.

작업 상태 모니터링

직업 생성 요청에 대한 응답에서, 작업의 URL을 포함한 HTTP 헤더 Location를 받습니다. 같은 토큰을 사용하여 이 URL에 GET 요청을 보내면 수정 작업의 상태를 확인할 수 있습니다.

예제 URL은 다음과 같습니다.

https://api.videoindexer.ai/westeurope/Accounts/<id>/Jobs/<id>

예제 응답은 다음과 같습니다.

{
    "creationTime": "2023-05-11T11:22:57.6114155Z",
    "lastUpdateTime": "2023-05-11T11:23:01.7993563Z",
    "progress": 20,
    "jobType": "Redaction",
    "state": "Processing"
}

동일한 URL을 교정 작업이 완료된 후 호출하면, Location 헤더에서 교정된 비디오에 대한 저장소 액세스 서명(SAS) URL을 받게 됩니다. 다음은 그 예입니다.

https://api.videoindexer.ai/westeurope/Accounts/<id>/Videos/<id>/SourceFile/DownloadUrl 

이 URL은 Azure Storage 계정에 저장되는 .mp4 파일로 리디렉션됩니다.

자주 묻는 질문 (FAQ)

질문 답변
비디오를 업로드하고 한 번의 작업으로 수정할 수 있나요? 아니요. 먼저 Video Indexer API를 사용하여 비디오를 업로드하고 분석해야 합니다. 그런 다음 편집 작업에서 인덱싱된 비디오를 참조합니다.
Azure AI Video Indexer 웹사이트를 사용하여 비디오를 편집할 수 있나요? 아니요. 현재로서는 API를 사용하여 교정 작업을 생성할 수만 있습니다.
Video Indexer 웹 사이트를 사용하여 수정된 비디오를 재생할 수 있나요? 예. 수정된 비디오는 다른 인덱싱된 비디오처럼 Video Indexer 웹사이트에서 볼 수 있지만, 그 안에 어떤 인사이트도 포함되어 있지 않습니다.
검열된 비디오를 삭제하려면 어떻게 해야 하나요? 비디오 삭제 API 요청을 사용하고 익명 처리된 비디오에 대한 Videoid 값을 제공할 수 있습니다.
얼굴 식별 게이트를 통과해야 얼굴 삭제 기능을 사용할 수 있나요? 당신이 미국의 경찰서를 대표하지 않는 한, 아니요. 비록 제약이 있더라도, 저희는 계속해서 얼굴 인식을 제공합니다. 게이트가 설치된 상태에서는 얼굴 인식을 제공하지 않습니다. 하지만 얼굴 인식만을 사용하여 비디오의 모든 얼굴을 가릴 수 있습니다.
얼굴 비식별 처리가 내 원본 비디오를 덮어쓰나요? 아니요. 얼굴 편집 작업은 새 비디오 출력 파일을 만듭니다.
모든 얼굴이 제대로 편집되지는 않습니다. 제가 할 수 있는 게 뭐죠? 분석 파이프라인의 초기 얼굴 감지 및 감지 출력에 의존하여 검열이 수행됩니다. 대부분의 경우 모든 얼굴을 감지하지만 얼굴을 감지할 수 없는 상황이 있습니다. 얼굴 각도, 얼굴이 있는 프레임 수 및 소스 비디오의 품질과 같은 요소는 얼굴 편집 품질에 영향을 줍니다. 자세한 내용은 Face insights를 참조하세요.
얼굴 외에 다른 객체도 가릴 수 있나요? 아니요. 현재 우리는 얼굴 편집만을 제공합니다. 다른 개체를 수정해야 하는 경우 Azure User Voice 채널에서 제품에 대한 피드백을 제공할 수 있습니다.
수정된 비디오를 다운로드하는 데 SAS URL이 유효한 기간은 얼마인가요? SAS URL이 만료된 후 수정된 비디오를 다운로드하려면 초기 작업 상태 URL을 호출해야 합니다. 나중에 참조할 수 있도록 이러한 Jobstatus URL을 백 엔드의 데이터베이스에 유지하는 것이 가장 좋습니다.

오류 코드

다음 섹션에서는 얼굴 편집을 사용할 때 발생할 수 있는 오류에 대해 설명합니다.

응답: 404 Not Found (찾을 수 없음)

계정을 찾을 수 없거나 비디오를 찾을 수 없습니다.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID(Globally Unique Identifier)는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

응답 본문

이름 필수 유형
ErrorType 거짓 ErrorType
Message 거짓 문자열

기본 JSON

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

응답: 400 잘못된 요청

유효하지 않은 입력이거나 원본 업로드 실패로 인해 비디오를 수정할 수 없습니다. 비디오를 다시 업로드하세요.

잘못된 입력이거나 원래 업로드가 실패하여 비디오를 수정할 수 없습니다. 비디오를 다시 업로드하세요.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

응답 본문

이름 필수 유형
ErrorType 거짓 ErrorType
Message 거짓 문자열

기본 JSON

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

응답: 409 상충

비디오가 이미 인덱싱되고 있습니다.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

응답 본문

이름 필수 유형
ErrorType 거짓 ErrorType
Message 거짓 문자열

기본 JSON

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

응답: 401 인증 실패

액세스 토큰은 계정에 액세스할 권한이 없습니다.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

응답 본문

이름 필수 유형
ErrorType 거짓 ErrorType
Message 거짓 문자열

기본 JSON

{
    "ErrorType": "USER_NOT_ALLOWED",
    "Message": "Access token is not authorized to access account 'SampleAccountId'."
}

응답: 500 내부 서버 오류

서버에서 오류가 발생했습니다.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

응답 본문

이름 필수 유형
ErrorType 거짓 ErrorType
Message 거짓 문자열

기본 JSON

{
    "ErrorType": "GENERAL",
    "Message": "There was an error."
}

응답: 429 요청이 너무 많습니다

너무 많은 요청이 전송되었습니다. 다음 요청을 보낼 시점을 결정하기 위해 Retry-After 응답 헤더를 사용하세요.

응답 헤더

이름 필수 유형 설명
Retry-After 거짓 정수 응답을 받은 후 지연할 초 수를 나타내는 비음수 소수 정수입니다.

응답: 504 Gateway Timeout

서버가 예상 시간 내에 게이트웨이에 응답하지 않았습니다.

응답 헤더

이름 필수 유형 설명
x-ms-request-id 거짓 문자열 요청에 대한 GUID는 계측을 위해 서버에서 할당됩니다. 서버는 요청 처리와 연결된 모든 로그를 서버 요청 ID에 연결할 수 있는지 확인합니다. 클라이언트는 지원 티켓에 이 요청 ID를 제공하여 지원 엔지니어가 이 특정 요청에 연결된 로그를 찾을 수 있도록 할 수 있습니다. 서버는 요청 ID가 각 작업에 대해 고유한지 확인합니다.

기본 JSON

{
    "ErrorType": "SERVER_TIMEOUT",
    "Message": "Server did not respond to gateway within expected time"
}