<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gstreamer on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/gstreamer/</link><description>Recent content in Gstreamer on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Wed, 17 Nov 2021 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/gstreamer/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenCV + Gstreamer を使う</title><link>https://blog-0847c6.gitlab.io/posts/2021/11/17/opencv-gstreamer/</link><pubDate>Wed, 17 Nov 2021 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2021/11/17/opencv-gstreamer/</guid><description>&lt;p&gt;OpenCV で GStreamer を使うための Docker コンテナを作成したので、GStreamer を使ってカメラの画像を取得するところまで試してみました。&lt;/p&gt;
&lt;p&gt;Docker コンテナの作成については以下の記事に書いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2021/11/opencv-gstreamer.html" target="_blank" rel="noopener"
 &gt;OpenCV + GStreamer の Docker コンテナを作成&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gstreamer-の基本"&gt;&lt;a href="#gstreamer-%e3%81%ae%e5%9f%ba%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;GStreamer の基本
&lt;/h2&gt;&lt;p&gt;私は Gstreamer を今回初めて使いました。&lt;br&gt;
最初、GStreamer のことが全然分からず困っていたのですが、以下の記事がとても参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/saxxos/items/e5b452502ad9aca3c997" target="_blank" rel="noopener"
 &gt;https://qiita.com/saxxos/items/e5b452502ad9aca3c997&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gstreamer-の動作確認"&gt;&lt;a href="#gstreamer-%e3%81%ae%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d" class="header-anchor"&gt;&lt;/a&gt;GStreamer の動作確認
&lt;/h2&gt;&lt;p&gt;OpenCV を使う前に、まずは GStreamer が使えるかどうか単体で試します。&lt;/p&gt;
&lt;p&gt;ネットワークカメラから RTSP で画像を取得して表示します。&lt;br&gt;
今回は Panasonic のカメラを使いました。&lt;/p&gt;
&lt;p&gt;Docker コンテナ内で以下のコマンドを実行するとウィンドウが立ち上がり、カメラの画像が表示されれば OK です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gst-launch-1.0 rtspsrc location=rtsp://username:password@host/MediaInput/h265 ! decodebin ! autovideosink
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;decodebin&lt;/code&gt; でデコードし、&lt;code&gt;autovideosink&lt;/code&gt; 自動表示（画面上にウィンドウで表示）する感じみたいです。&lt;/p&gt;
&lt;h2 id="opencv-を使う"&gt;&lt;a href="#opencv-%e3%82%92%e4%bd%bf%e3%81%86" class="header-anchor"&gt;&lt;/a&gt;OpenCV を使う
&lt;/h2&gt;&lt;p&gt;上記を踏まえ、OpenCV で GStreamer のクエリを指定する場合は、以下のように記述します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rtspsrc location=rtsp://username:password@host/MediaInput/h265 ! decodebin ! videoconvert ! appsink&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CAP_GSTREAMER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;autovideosink&lt;/code&gt; を &lt;code&gt;videoconvert ! appsink&lt;/code&gt; に変更しています。&lt;br&gt;
GStreamer の出力を OpenCV に入力するためには &lt;code&gt;appsink&lt;/code&gt; が必要みたいです。&lt;br&gt;
んで、&lt;code&gt;appsink&lt;/code&gt; に送るためには &lt;code&gt;videoconvert&lt;/code&gt; が必要みたいです。&lt;br&gt;
これで &lt;code&gt;cap.read()&lt;/code&gt; をコールすれば、フレームデータを取得できます。&lt;/p&gt;
&lt;p&gt;ただし、このままだと遅延が酷かったので、&lt;code&gt;latency=0&lt;/code&gt; を追加しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rtspsrc location=rtsp://username:password@host/MediaInput/h265 latency=0 ! decodebin ! videoconvert ! appsink&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CAP_GSTREAMER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;とりあえずはこれで動作確認できました。&lt;/p&gt;
&lt;p&gt;ちなみに、OpenCV を使わずにコンソールで &lt;code&gt;gst-launch-1.0&lt;/code&gt; で直接実行する際に &lt;code&gt;latency=0&lt;/code&gt; を指定すると、画像が乱れてまともに表示されませんでした。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/saxxos/items/e5b452502ad9aca3c997" target="_blank" rel="noopener"
 &gt;https://qiita.com/saxxos/items/e5b452502ad9aca3c997&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/maueki/items/b54cbe5207bb16869756" target="_blank" rel="noopener"
 &gt;https://qiita.com/maueki/items/b54cbe5207bb16869756&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/gstreamer-on-macos-video/" target="_blank" rel="noopener"
 &gt;https://dev.classmethod.jp/articles/gstreamer-on-macos-video/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://lifestyletransfer.com/how-to-install-gstreamer-vaapi-plugins-on-ubuntu/" target="_blank" rel="noopener"
 &gt;http://lifestyletransfer.com/how-to-install-gstreamer-vaapi-plugins-on-ubuntu/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>