Interpreter

공개 최종 클래스 통역사

TensorFlow Lite로 모델 추론을 구동하는 드라이버 클래스입니다.

참고: 아래 API 기능에 대한 자세한 내용은 InterpreterApi와 InterpreterFactory의 인스턴스를 만듭니다.

Interpreter는 선행 학습된 TensorFlow Lite 모델을 캡슐화합니다. 이 모델에서 연산은 모델 추론을 위해 실행됩니다

예를 들어 모델이 하나의 입력만 취하고 하나의 출력만 반환하는 경우:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

모델이 여러 입력 또는 출력을 사용하는 경우:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

모델이 문자열 텐서를 취하거나 생성하는 경우:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[][] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

셰이프 [] 와 셰이프[1] 사이에는 차이가 있습니다. 스칼라 문자열 텐서의 경우 출력:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

TensorFlow 모델을 TensorFlowLite로 변환할 때 입력 및 출력의 순서가 결정됩니다. 입력의 기본 모양과 마찬가지로

입력이 다차원 배열로 제공되면 해당 입력 텐서는 해당 배열의 모양에 따라 암시적으로 크기가 조정됩니다. 입력이 Buffer로 제공되는 경우 암시적 크기 조절이 수행되지 않습니다. 호출자는 Buffer 바이트 크기가 해당 텐서의 값과 일치하거나 먼저 resizeInput(int, int[])를 통해 텐서의 크기를 조절합니다. 텐서 형태 및 유형 정보는 getInputTensor(int)getOutputTensor(int)를 통해 제공되는 Tensor 클래스를 통해 얻을 수 있습니다.

경고:Interpreter 인스턴스는 스레드로부터 안전하지 않습니다. Interpreter close()를 호출하여 명시적으로 해제해야 하는 리소스를 소유합니다.

TFLite 라이브러리는 NDK API 19에 대해 빌드됩니다. Android API 수준 19 미만에서도 작동할 수 있지만 보장되지는 않습니다.

중첩된 클래스

클래스 Interpreter.Options 런타임 인터프리터 동작을 제어하기 위한 옵션 클래스입니다.

공개 생성자

Interpreter(File modelFile)
Interpreter를 초기화합니다.
인터프리터(File modelFile, Interpreter.Options options)
Interpreter를 초기화하고 인터프리터 동작을 맞춤설정하는 옵션을 지정합니다.
인터프리터(ByteBuffer byteBuffer)
모델 파일의 ByteBufferInterpreter를 초기화합니다.
Interpreter(ByteBuffer byteBuffer, Interpreter.Options 옵션)
모델 파일의 ByteBufferInterpreter 맞춤 Interpreter.Options입니다.

공개 메서드

void
allocateTensors()
필요한 경우 모든 텐서의 할당을 명시적으로 업데이트합니다.
void
close()
InterpreterApi 인스턴스와 연결된 리소스를 해제합니다.
int
getInputIndex(String opName)
입력의 작업 이름이 주어진 입력의 색인을 가져옵니다.
Tensor
getInputTensor(int inputIndex)
제공된 입력 색인과 연결된 텐서를 가져옵니다.
int
getInputTensorCount()
입력 텐서의 수를 가져옵니다.
Tensor
getInputTensorFromSignature(String inputName, String signatureKey)
제공된 입력 이름 및 서명 메서드 이름과 연결된 텐서를 가져옵니다.
긴 버전
getLastNativeInferenceDurationNanoseconds()
네이티브 추론 타이밍을 반환합니다.
int
getOutputIndex(String opName)
출력의 작업 이름이 주어진 출력의 색인을 가져옵니다.
Tensor
getOutputTensor(int outputIndex)
제공된 출력 색인과 연결된 텐서를 가져옵니다.
int
getOutputTensorCount()
출력 텐서 수를 가져옵니다.
Tensor
getOutputTensorFromSignature(String outputName, String signatureKey)
특정 서명 메서드에서 제공된 출력 이름과 연결된 텐서를 가져옵니다.
String[]
getSignatureInputs(String signatureKey)
signatureKey 메서드의 SignatureDefs 입력 목록을 가져옵니다.
String[]
getSignatureKeys()
모델에서 사용할 수 있는 SignatureDef의 내보낸 메서드 이름의 목록을 가져옵니다.
String[]
getSignatureOutputs(String signatureKey)
signatureKey 메서드의 SignatureDefs 출력 목록을 가져옵니다.
void
resetVariableTensors()
고급: 모든 변수 텐서를 기본값으로 재설정합니다.
void
resizeInput(int idx, int[] dims, boolean strict)
네이티브 모델의 idx번째 입력을 지정된 어둡게로 조절합니다.
void
resizeInput(int idx, int[] dims)
네이티브 모델의 idx번째 입력을 지정된 어둡게로 조절합니다.
void
run(객체 입력, 객체 출력)
모델이 하나의 입력만 취하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.
void
runForMultipleInputsOutputs(Object[] input, Map<IntegerObject> 출력)
모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.
void
runSignature(Map<StringObject> input, Map<StringObject> 출력)
runSignature(Map, Map, String)와 동일하지만 signatureKey를 전달할 필요가 없습니다. 모델에 SignatureDef가 하나 있다고 가정합니다.
void
runSignature(Map<StringObject> input, Map<StringObject> output, String signatureKey)
signatureKey를 통해 제공된 SignatureDef를 기반으로 모델 추론을 실행합니다.
void
setCancelled(불리언 취소됨)
고급: run(Object, Object) 호출 도중에 추론을 중단합니다.

상속된 메서드

공개 생성자

<ph type="x-smartling-placeholder"></ph> 공개 를 통해 개인정보처리방침을 정의할 수 있습니다. 인터프리터 (파일 modelFile)

Interpreter를 초기화합니다.

매개변수
modelFile 선행 학습된 TF Lite 모델의 파일입니다.
생성 값
IllegalArgumentException modelFile가 유효한 TensorFlow Lite를 인코딩하지 않는 경우 있습니다.

<ph type="x-smartling-placeholder"></ph> 공개 를 통해 개인정보처리방침을 정의할 수 있습니다. 인터프리터 (File modelFile, Interpreter.Options options)

Interpreter를 초기화하고 인터프리터 동작을 맞춤설정하는 옵션을 지정합니다.

매개변수
modelFile 선행 학습된 TF Lite 모델의 파일
옵션 인터프리터 동작을 맞춤설정하는 옵션 모음
생성 값
IllegalArgumentException modelFile가 유효한 TensorFlow Lite를 인코딩하지 않는 경우 있습니다.

<ph type="x-smartling-placeholder"></ph> 공개 를 통해 개인정보처리방침을 정의할 수 있습니다. 인터프리터 (ByteBuffer byteBuffer)

모델 파일의 ByteBufferInterpreter를 초기화합니다.

ByteBuffer는 Interpreter 생성 후 수정해서는 안 됩니다. 이 ByteBuffer는 모델 파일을 메모리 매핑하는 MappedByteBuffer 또는 모델의 바이트 콘텐츠를 포함하는 nativeOrder()의 직접 ByteBuffer입니다.

매개변수
byteBuffer
생성 값
IllegalArgumentException byteBufferMappedByteBuffer도 아니고 nativeOrder의 직접 ByteBuffer입니다.

<ph type="x-smartling-placeholder"></ph> 공개 를 통해 개인정보처리방침을 정의할 수 있습니다. 인터프리터 (ByteBuffer byteBuffer, Interpreter.Options 옵션)

모델 파일의 ByteBufferInterpreter 맞춤 Interpreter.Options입니다.

ByteBufferInterpreter 생성 후 수정해서는 안 됩니다. ByteBuffer는 메모리 매핑되는 MappedByteBuffer일 수 있습니다. 모델 파일 또는 바이트 콘텐츠가 포함된 nativeOrder()의 직접적인 ByteBuffer 인코더-디코더 아키텍처를

매개변수
byteBuffer
옵션
생성 값
IllegalArgumentException byteBufferMappedByteBuffer도 아니고 nativeOrder의 직접 ByteBuffer입니다.

공개 메서드

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. allocateTensors ()

필요한 경우 모든 텐서의 할당을 명시적으로 업데이트합니다.

이렇게 하면 입력을 사용하여 종속 텐서의 형태와 메모리 할당을 전파합니다. 텐서 형태를 정의합니다.

참고: 이 호출은 *순전히 선택 사항*입니다. 텐서 할당은 (입력 텐서의 크기가 조정된 경우) 이 호출은 그래프를 실행하기 전에 출력 텐서의 형태. 예:

 interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...

참고: 일부 그래프에는 동적으로 형태의 출력이 있으며, 이 경우 출력 형태가 완전히 전파됩니다

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. 닫기 ()

InterpreterApi 인스턴스와 연결된 리소스를 해제합니다.

<ph type="x-smartling-placeholder"></ph> 공개 정수 를 통해 개인정보처리방침을 정의할 수 있습니다. getInputIndex (문자열 opName)

입력의 작업 이름이 주어진 입력의 색인을 가져옵니다.

매개변수
opName

<ph type="x-smartling-placeholder"></ph> 공개 Tensor getInputTensor (int inputIndex)

제공된 입력 색인과 연결된 텐서를 가져옵니다.

매개변수
inputIndex

<ph type="x-smartling-placeholder"></ph> 공개 정수 를 통해 개인정보처리방침을 정의할 수 있습니다. getInputTensorCount ()

입력 텐서의 수를 가져옵니다.

<ph type="x-smartling-placeholder"></ph> 공개 Tensor getInputTensorFromSignature (문자열 inputName, String signatureKey)

제공된 입력 이름 및 서명 메서드 이름과 연결된 텐서를 가져옵니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
inputName 서명에 이름을 입력합니다.
signatureKey SignatureDef를 식별하는 서명 키로, 모델에 서명이 1개 있습니다
생성 값
IllegalArgumentException inputName 또는 signatureKey가 null이거나 비어 있는 경우 잘못된 이름이 있을 수 있습니다.

<ph type="x-smartling-placeholder"></ph> 공개 긴 형식 getLastNativeInferenceDurationNanoseconds ()

네이티브 추론 타이밍을 반환합니다.

<ph type="x-smartling-placeholder"></ph> 공개 정수 를 통해 개인정보처리방침을 정의할 수 있습니다. getOutputIndex (문자열 opName)

출력의 작업 이름이 주어진 출력의 색인을 가져옵니다.

매개변수
opName

<ph type="x-smartling-placeholder"></ph> 공개 Tensor getOutputTensor (int outputIndex)

제공된 출력 색인과 연결된 텐서를 가져옵니다.

참고: 추론이 끝날 때까지 출력 텐서 세부정보 (예: 셰이프)가 완전히 채워지지 않을 수 있습니다. 실행됩니다 추론을 실행하기 *전에* 업데이트된 세부정보가 필요한 경우 (예: 출력 텐서 형태를 무효화할 수 있는 입력 텐서)에 대해 allocateTensors() 사용 명시적으로 할당 및 셰이프 전파를 트리거합니다. 출력 모양이 있는 그래프의 경우 출력 셰이프는 입력 *값*에 종속되어 있고 살펴보겠습니다

매개변수
outputIndex

<ph type="x-smartling-placeholder"></ph> 공개 정수 를 통해 개인정보처리방침을 정의할 수 있습니다. getOutputTensorCount ()

출력 텐서 수를 가져옵니다.

<ph type="x-smartling-placeholder"></ph> 공개 Tensor getOutputTensorFromSignature (문자열 outputName, 문자열 signatureKey)

특정 서명 메서드에서 제공된 출력 이름과 연결된 텐서를 가져옵니다.

참고: 추론이 끝날 때까지 출력 텐서 세부정보 (예: 셰이프)가 완전히 채워지지 않을 수 있습니다. 실행됩니다 추론을 실행하기 *전에* 업데이트된 세부정보가 필요한 경우 (예: 출력 텐서 형태를 무효화할 수 있는 입력 텐서)에 대해 allocateTensors() 사용 명시적으로 할당 및 셰이프 전파를 트리거합니다. 출력 모양이 있는 그래프의 경우 출력 셰이프는 입력 *값*에 종속되어 있고 살펴보겠습니다

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
outputName 서명의 출력 이름입니다.
signatureKey SignatureDef를 식별하는 서명 키로, 모델에 서명이 1개 있습니다
생성 값
IllegalArgumentException outputName 또는 signatureKey이 null이거나 비어 있거나 제공된 이름이 잘못되었습니다.

<ph type="x-smartling-placeholder"></ph> 공개 String[] getSignatureInputs (문자열 signatureKey)

signatureKey 메서드의 SignatureDefs 입력 목록을 가져옵니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
signatureKey

<ph type="x-smartling-placeholder"></ph> 공개 String[] getSignatureKeys ()

모델에서 사용할 수 있는 SignatureDef의 내보낸 메서드 이름의 목록을 가져옵니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

<ph type="x-smartling-placeholder"></ph> 공개 String[] getSignatureOutputs (문자열 signatureKey)

signatureKey 메서드의 SignatureDefs 출력 목록을 가져옵니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
signatureKey

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. resetVariableTensors ()

고급: 모든 변수 텐서를 기본값으로 재설정합니다.

변수 텐서에 연결된 버퍼가 없으면 0으로 재설정됩니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. resizeInput (int idx, int[] dims, boolean strict)

네이티브 모델의 idx번째 입력을 지정된 어둡게로 조절합니다.

`strict` 가 True인 경우 알 수 없는 크기만 크기를 조절할 수 있습니다. 알 수 없는 측정기준은 `Tensor.shapeSignature()`에 의해 반환된 배열에 `-1`로 표시됩니다.

매개변수
IDX
어둡게
엄격

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. resizeInput (int idx, int[] dims)

네이티브 모델의 idx번째 입력을 지정된 어둡게로 조절합니다.

매개변수
IDX
어둡게

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. 실행 (객체 입력, 객체 출력)

모델이 하나의 입력만 취하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.

경고: Buffer인 경우 (직접적이고 필수는 아님) API가 더 효율적입니다. 입력/출력 데이터 유형으로 사용됩니다. Buffer를 사용하여 피드하고 가져오기를 고려해 보세요. 원시 데이터를 사용하여 성능을 향상시킬 수 있습니다 다음과 같은 구체적인 Buffer 유형은 다음과 같습니다. 지원됨:

  • ByteBuffer - 모든 기본 원시 텐서 유형과 호환됩니다.
  • FloatBuffer - 부동 텐서와 호환됩니다.
  • IntBuffer - int32 텐서와 호환됩니다.
  • LongBuffer - int64 텐서와 호환됩니다.
를 통해 개인정보처리방침을 정의할 수 있습니다. 불리언 유형은 Buffer가 아닌 배열이나 스칼라 입력으로만 지원됩니다.

매개변수
입력 배열이나 다차원 배열 또는 기본 유형의 Buffer int, float, long 및 byte가 있습니다. Buffer는 큰 값을 전달하는 데 선호되는 방법입니다. 기본 유형의 경우 입력 데이터를 사용하고 문자열 유형은 다차원 배열 입력 경로입니다. Buffer가 사용되면 다음 날짜까지 콘텐츠가 변경되지 않아야 합니다. 모델 추론이 완료되며 호출자는 Buffer가 위치를 지정합니다. null 값은 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate이며 이러한 버퍼는 Tensor를 입력합니다.
output 출력 데이터의 다차원 배열 또는 기본 유형의 Buffer int, float, long, byte가 있습니다 Buffer를 사용하는 경우 호출자는 적절한 쓰기 위치를 설정해야 합니다. null 값이 허용되며 특정 사례(예: 호출자가 버퍼 핸들을 허용하는 Delegate를 사용하는 경우) 상호 운용성을 구현하고 이러한 버퍼가 출력 Tensor에 바인딩되었습니다 (Interpreter.Options#setAllowBufferHandleOutput(boolean) 참조). 또는 그래프에 동적으로 도형 출력이 있고 호출자가 추론이 호출된 후 출력 Tensor 도형을 쿼리하여 출력에서 직접 데이터를 가져와야 하는 경우 텐서 (Tensor.asReadOnlyBuffer()를 통해)

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. runForMultipleInputsOutputs (객체[] 입력, <정수객체> 출력)

모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.

경고: Buffer가 가능하면 직접 사용하는 것이 좋지만 필수는 아닌 경우 API가 더 효율적입니다. 입력/출력 데이터 유형으로 사용됩니다. Buffer를 사용하여 피드하고 가져오기를 고려해 보세요. 원시 데이터를 사용하여 성능을 향상시킬 수 있습니다 다음과 같은 구체적인 Buffer 유형은 다음과 같습니다. 지원됨:

  • ByteBuffer - 모든 기본 원시 텐서 유형과 호환됩니다.
  • FloatBuffer - 부동 텐서와 호환됩니다.
  • IntBuffer - int32 텐서와 호환됩니다.
  • LongBuffer - int64 텐서와 호환됩니다.
를 통해 개인정보처리방침을 정의할 수 있습니다. 불리언 유형은 Buffer가 아닌 배열이나 스칼라 입력으로만 지원됩니다.

참고: inputsoutputs의 개별 요소에 대한 null 값은 다음과 같습니다. 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate를 사용 중인 경우에만 허용됩니다. 이러한 버퍼는 상응하는 입력 또는 출력 Tensor에 바인딩되었습니다.

매개변수
입력 입력 데이터의 배열입니다. 입력은 있습니다. 각 입력은 배열 또는 다차원 배열 또는 Buffer의 int, float, long 및 byte를 포함하는 기본형을 참조하세요. Buffer를 사용하는 것이 좋습니다. 는 다차원 배열을 사용해야 하는 반면, 문자열 유형은 입력 경로 Buffer를 사용하면 모델이 완료될 때까지 콘텐츠가 변경되지 않아야 합니다. 추론이 완료되며 호출자는 Buffer가 적절한 시점에 있는지 확인해야 합니다. 읽기 위치를 지정해야 합니다.
출력 출력 색인을 출력 데이터의 다차원 배열이나 기본형(int, float, long, byte)의 Buffer에 매핑하는 맵입니다. 필요한 만큼만 사용할 출력 항목입니다. Buffer를 사용하는 경우 호출자는 적절한 쓰기 위치를 설정해야 합니다. 다음 중 하나에 해당하는 경우 지도가 비어 있을 수 있습니다. 버퍼 핸들은 출력 텐서 데이터에 사용되거나 출력이 동적으로인 경우에 사용 추론이 완료된 후 호출자는 출력 Tensor 도형을 쿼리해야 합니다. 호출하여 출력 텐서에서 직접 데이터를 가져옵니다 (Tensor.asReadOnlyBuffer()를 통해).

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. runSignature (매핑<문자열객체> 입력, <문자열객체> 출력)

runSignature(Map, Map, String)와 동일하지만 signatureKey를 전달할 필요가 없습니다. 모델에 SignatureDef가 하나 있다고 가정합니다. 모델에 SignatureDef가 두 개 이상 있으면 예외가 발생합니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
입력
출력

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. runSignature (Map<StringObject> input, Map<StringObject> output, String signatureKey)

signatureKey를 통해 제공된 SignatureDef를 기반으로 모델 추론을 실행합니다.

허용되는 입력 및 출력에 관한 자세한 내용은 run(Object, Object)를 참고하세요. 데이터 유형입니다.

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
입력 SignatureDef의 입력 이름과 입력 객체 매핑입니다.
출력 SignatureDef의 출력 이름과 출력 데이터의 맵입니다. 다음과 같은 경우 비어 있을 수 있습니다. 호출자는 추론 후 직접 Tensor 데이터를 쿼리하려고 합니다 (예: 출력 셰이프가 동적이거나 출력 버퍼 핸들이 사용되는 경우)
signatureKey SignatureDef를 식별하는 서명 키입니다.
생성 값
IllegalArgumentException inputs가 null이거나 비어 있는 경우, outputs인 경우 또는 signatureKey가 null이거나 추론을 실행할 때 오류가 발생하는 경우입니다.

<ph type="x-smartling-placeholder"></ph> 공개 무효 를 통해 개인정보처리방침을 정의할 수 있습니다. setCancelled (불리언 취소됨)

고급: run(Object, Object) 호출 도중에 추론을 중단합니다.

이 함수가 호출되면 취소 플래그가 true로 설정됩니다. 통역사가 작업 호출 간의 플래그를 확인합니다. true인 경우 인터프리터가 중지됩니다. 실행할 수 있습니다 인터프리터는 명시적으로 '취소되지 않음'이 될 때까지 취소됨 상태로 유지됩니다. 작성자: setCancelled(false)

경고: 이 API는 실험용이며 변경될 수 있습니다.

매개변수
취소됨 true는 최선의 방식으로 추론을 취소합니다. false부터 재개하세요.
생성 값
IllegalStateException 인터프리터가 취소 가능한 메서드로 초기화되지 않은 경우 이 기능은 기본적으로 사용 중지되어 있습니다.