MediaPipe 프레임워크를 사용하기 전에 다음 개념을 숙지하세요.
기본사항
패킷
기본 데이터 흐름 단위입니다. 패킷은 숫자 타임스탬프와 변경 불가능한 페이로드에 대한 공유 포인터로 구성됩니다. 페이로드는 모든 C++ 유형일 수 있으며 페이로드의 유형은 패킷 유형이라고도 합니다. 패킷은 가치 클래스이며 저렴하게 복사할 수 있습니다. 각 사본은 참조 계산 시맨틱스와 함께 페이로드의 소유권을 공유합니다. 사본마다 타임스탬프가 있습니다. 패킷도 참고하세요.
그래프
MediaPipe 처리는 노드 간의 패킷 흐름 경로를 정의하는 그래프 내에서 발생합니다. 그래프에는 원하는 수의 입력과 출력이 있을 수 있으며 데이터 흐름은 분기되거나 병합될 수 있습니다. 일반적으로 데이터는 정방향으로 흐르지만 역방향 루프도 가능합니다. 자세한 내용은 그래프를 참고하세요.
노드
노드는 패킷을 생성하거나 소비하며, 그래프의 작업이 대부분 여기에서 발생합니다. 역사적인 이유로 '계산기'라고도 합니다. 각 노드의 인터페이스는 태그 또는 색인으로 식별되는 여러 입력 및 출력 ports를 정의합니다. 자세한 내용은 계산기를 참고하세요.
스트림
스트림은 일련의 패킷을 전달하는 두 노드 간의 연결로, 타임스탬프는 단조 증가해야 합니다.
사이드 패킷
노드 간의 부가 패킷 연결은 단일 패킷 (타임스탬프가 지정되지 않음)을 전달합니다. 일정하게 유지되는 데이터를 제공하는 데 사용할 수 있는 반면 스트림은 시간이 지남에 따라 변하는 데이터 흐름을 나타냅니다.
패킷 포트
포트에는 연관된 유형이 있습니다. 포트를 통해 전달되는 패킷은 해당 유형이어야 합니다. 출력 스트림 포트는 동일한 유형의 입력 스트림 포트 여러 개에 연결할 수 있습니다. 각 소비자는 출력 패킷의 별도 사본을 수신하고 자체 대기열을 가지므로 자체 속도로 소비할 수 있습니다. 마찬가지로, 부차 패킷 출력 포트는 부차 패킷 입력 포트에 원하는 만큼 연결할 수 있습니다.
포트가 필수일 수 있습니다. 즉, 그래프가 유효하려면 연결이 이루어져야 하며, 선택사항이면 연결되지 않은 상태로 유지될 수 있습니다.
입력 및 출력
데이터 흐름은 입력 스트림이 없고 자발적으로 (예: 파일에서 읽는 방식) 패킷을 생성하는 소스 노드에서 시작되거나 애플리케이션이 패킷을 그래프에 피드하도록 하는 그래프 입력 스트림에서 발생할 수 있습니다.
마찬가지로 데이터를 수신하고 다양한 대상 (예: 파일, 메모리 버퍼 등)에 쓰는 싱크 노드가 있으며 애플리케이션은 콜백을 사용하여 그래프에서 출력을 수신할 수도 있습니다.
런타임 동작
그래프 전체 기간
그래프가 초기화되면 시작하여 데이터 처리를 시작하고 각 스트림이 닫히거나 그래프가 취소될 때까지 패킷 스트림을 처리할 수 있습니다. 그런 다음 그래프를 폐기하거나 다시 시작할 수 있습니다.
노드 수명
프레임워크가 노드에서 호출하는 전체 기간 메서드에는 세 가지가 있습니다.
- Open(열기): 다른 메서드보다 먼저 한 번 호출됩니다. 호출 시 노드에 필요한 모든 입력 측 패킷을 사용할 수 있습니다.
- 프로세스: 노드의 입력 정책에 따라 새 입력 집합을 사용할 수 있을 때 여러 번 호출됩니다.
- 닫기: 마지막에 한 번 호출됩니다.
또한 각 계산기는 처리된 데이터와 독립적인 리소스를 만들고 할당 해제하는 데 유용한 생성자와 소멸자를 정의할 수 있습니다.
입력 정책
기본 입력 정책은 타임스탬프별 패킷의 확정적인 대조입니다. 노드는 Process 메서드 호출 시 동일한 타임스탬프의 모든 입력을 동시에 수신합니다. 연속된 입력 집합은 타임스탬프 순서대로 수신됩니다. 이 경우 타임스탬프가 동일한 패킷이 모든 입력 스트림에서 수신될 때까지 또는 해당 타임스탬프가 있는 패킷이 수신되지 않은 스트림에 도착하지 않음을 보장할 수 있을 때까지 일부 패킷 처리를 지연해야 할 수 있습니다.
InputStreamHandler라고 하는 별도의 구성요소를 사용하여 구현하는 다른 정책도 사용할 수 있습니다.
자세한 내용은 동기화를 참조하세요.
실시간 스트림
MediaPipe 계산기 그래프는 대화형 애플리케이션의 동영상 또는 오디오 프레임 스트림을 처리하는 데 자주 사용됩니다. 일반적으로 각 계산기는 지정된 타임스탬프에 대한 모든 입력 패킷을 사용할 수 있게 되는 즉시 실행됩니다. 실시간 그래프에 사용되는 계산기는 다운스트림 계산기를 즉시 예약할 수 있도록 입력 타임스탬프 경계를 기반으로 출력 타임스탬프 경계를 정의해야 합니다. 자세한 내용은 실시간 스트림을 참조하세요.