gstreamer opencv 스트림 수신 및 편집

Arnagath

내 현재 프로젝트 :

USB 카메라가있는 장치에서 서버로 비디오를 보내고, 서버에서 비디오 처리를 수행 한 다음 표시되는 다른 클라이언트로 보냅니다.

터미널에서 작동하도록 gstreamer를 얻었습니다.

수신 서버에서 :

gst-launch-1.0 udpsrc port=5000 ! \
application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! \
rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! \
timeoverlay shaded-background=true text="host" deltay=20 ! \
ximagesink async=true sync=false

캡처 클라이언트에서 :

gst-launch-1.0 -v v4l2src ! \
timeoverlay shaded-background=true text="pi" ! \
video/x-raw,height=480,width=640,framerate=30/1 ! \
videoconvert ! omxh264enc ! rtph264pay ! \
udpsink host=136.225.61.68 port=5000

이것은 매우 잘 작동하며 비디오가 전송되고 있습니다. 이제 (수신 측에서) opencv로 얼굴 감지 요법을 수행 하고이 스트림을 다른 클라이언트로 보낼 수 있도록 c 코드로 스트림을 캡처해야합니다. 이것은 opencv를 지원하는 gstreamer 나쁜 플러그인으로 수행되거나 스트림을 매트로 변환하고 opencv를 사용하여 수행됩니다. 누구든지 어느 것이 더 쉬운 지 알고 있으며 예가 있습니까? (저는 gstreamer 1.0을 사용하고 있습니다).

미리 감사드립니다

Arnagath

마침내 첫 번째 단계에 대한 해결책을 찾았습니다. 이제 gst_parse_launch를 사용하여 C 코드로 스트림을 수신 할 수 있습니다.

서버 측의 코드는 이제 다음과 같습니다.

#include <gst/gst.h>

int main(int argc, char *argv[]) {
  GstElement *pipeline;
  GstBus *bus;
  GstMessage *msg;

  /* Initialize GStreamer */
  gst_init (&argc, &argv);

  /* Build the pipeline */
  pipeline = gst_parse_launch ("udpsrc port=5000 ! \
  application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! \
  rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! \
  timeoverlay shaded-background=true deltay=20 ! \
  ximagesink async=true sync=false", NULL);

  /* Start playing */
  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  /* Wait until error or EOS */
  bus = gst_element_get_bus (pipeline);
  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

  /* Free resources */
  if (msg != NULL)
    gst_message_unref (msg);
  gst_object_unref (bus);
  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);
  return 0;
}

이제 다음 단계는 이것을 OpenCV 또는 OpenCV 플러그인에 연결하여 facedetect 등을 수행 할 수 있도록하는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관