1

質問

ストリーミングされたフレームの小さなサンプルを取得し、Python を使用してそれらを操作するにはどうすればよいですか? 使用できるライブラリはありますか? それとも、プロジェクト全体を単独でコーディングする必要がありますか?

技術仕様

OS: リナックス

接続: CAT-5 イーサネット

カメラ: dlink DCS-930L

序章

私は最近質問をしました、明確さの問題によりクローズされました。

より多くの詳細を再投稿していますが、それでも明確でない場合は、自由に編集またはコメントを追加してください.

バックグラウンド

私は dlink DCS-930L カメラを持っています。これは直接cat5接続で Linux コンピューターに直接接続されています。私はそれを静的 IP アドレスに割り当てましたが、すべてうまくいきました。

Web ブラウザーを開いて、この静的 IP アドレスに接続すると (たとえば、192.168.0.20 にログイン)、カメラはリアルタイムで正しく動作します。

これは、カメラが機能していること、およびイーサネット接続を正しく確立できることを確認するためでした。

次に、イーサネット経由でカメラから受信したビデオ フレームに対して画像処理を行う必要があります。

表示手段として Web ブラウザーを使用したくありません。代わりに、Python を使用してフレームを読み取ります。

つまり、カメラが毎秒 30 フレームを生成し、各フレームが特定のサイズ (1920x1080 ピクセルなど) であるとします。

私がやりたいことは、これらのフレームを Python で読み始めることだけです。フレームが欠落していても、処理が遅くてもかまいません。1 フレームを数秒で処理できたとしても、それで問題ありません。

ビデオは画像 (この場合は 1 秒あたり 30 枚の画像) のコレクションであるため、Python を使用してこれらの画像を読み取り、これらの画像に対して必要な処理を実行できるようにしたいと考えています。

これらの画像をコンピューターに保存していたら、これらの画像を Python で開き、操作を開始します。しかし、この場合、画像は実際にストリーミングされているため、それらをサンプリングする方法 (おそらく数秒ごとに 1 つ) を知りたいだけで、Python を使用して何らかの操作を行うことができますか?

私の質問がまだ不明な場合はお知らせください。できる限り明確にするよう努めます。

ありがとう、 -- ルディ

4

2 に答える 2

0

マニュアルによると、カメラはJavaアプレットを介してビデオを提供するため、サーバープロトコルを理解せずにPythonを介してアクセスすることは困難です。

ただし、ftpサーバー(34ページ)に画像をプッシュするオプションがあるため、Linuxボックスにvsftpdをインストールすると、カメラに4fpsまでの画像をプッシュするように指示できます。ここにubuntuでvsftpdを設定する手順があります。他のバージョンのLinuxも同様です(fedoraの設定が少し少ないことを覚えているようですが、それは何年も前のことです)。

write_enable=YESの行でアップロードを有効にする必要があります/etc/vsftpd.conf。アップロードを処理するにはさまざまな方法がありますが、最も簡単な方法は、ユーザーアカウントでログインして、ホームディレクトリ(またはカメラ設定で指定したパス)に画像をダンプすることです。

これで、通常どおり、つまりPILを使用して画像を開くことができるはずです。

ファイルサーバーを設定したくない場合は、urllib2を使用して直接データを取得してみてください。ログインの処理方法については、このページを参照してください。データを取得することで、ビデオストリームを抽出できる可能性がありますが、ftpオプションの方がはるかに簡単だと思います。

于 2013-02-20T01:10:15.507 に答える
0

私は dlink DCS-30 がどのように機能するか正確にはよく知りませんが、以前の世代のモデルである dlink DCS-20 を持っていて、同じ目的を持っていたので、私の DCS-20 ソリューションまたはその一部を活用できるかもしれません。 、DCS-30 についても同じ問題を解決します。

重要なのは、組み込みの Web ブラウザー アクセスによって提供される HTML を解析することだけでした。

外部モジュール リクエスト、PIL、および BeautifulSoup により、ソリューションが簡素化されます。

カメラの IP が 192.168.0.20 であり、webadmin を介して user1/pw1 のカメラへのユーザー ログインを設定したと仮定すると、ソリューションの要点は次のとおりです。

from StringIO import StringIO

import requests
from PIL import Image
from bs4 import BeautifulSoup

DCS_IP = "192.168.0.20"
userauth = ('user1', 'pw1')

snapurl = "http://" + DCS_IP + "/top.htm"

r = requests.get(snapurl, auth=userauth)
soup = BeautifulSoup(r.content)

# There are several <img> tags in page, so use border=0 attribute of 
# objective <img> to distinguish it
imgtag = soup.find_all("img", attrs={'border':0})
imgsrc = BeautifulSoup(str(imgtag[0])).img['src']
imgurl = "http://" + DCS_IP + "/" + imgsrc

img = requests.get(imgurl, auth=userauth)
i = Image.open(StringIO(img.content))
i.save("snapshot.png")

画像を取得したら (i)、PIL を使用してさらに操作したり、後で ffmpeg を使用して、結果の画像セットをタイムラプス ビデオにステッチしたりできます。

HTH

于 2014-01-13T01:49:30.590 に答える