2

python-onvif を使用してカメラの URI を検索し、静的スナップショットを取得しています。スナップショットを取得できます。

しかし、解像度は、私のカメラが達成できる「完全な」720 ではありません。そして、ストリーミング時に取得します。スナップショットは 640x352 か何かのようなものです。

ONVIF にフル解像度でスナップショットを取得するように指示するにはどうすればよいですか?

getSnapshotUri(token) を使用して URI を生成し、メイン プロファイルのトークンを最高の解像度で入れてみましたが、同じ URI と同じ解像度が得られます。

フル解像度のスナップショットを取得する方法はありますか?

ドキュメントには、「プロファイルから」jpeg設定を使用すると書かれていますが、どのプロファイルを使用するか、どの解像度設定を使用するかを伝える方法がわかりません。

この場合、コードが本当に必要かどうかはわかりませんが、とにかく私がやっていることは次のとおりです。誰かの役に立てば

 from onvif import ONVIFCamera

 # Set up the camera object using the ONVIF port.
 mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass', '/etc/onvif/wsdl/')


 #access media service
 media = mycam.create_media_service()                

 allProfiles = media.GetProfiles()
 mainProfile = media.GetProfile({'ProfileToken' : allProfiles[0]._token})

 snapshot = media.GetSnapshotUri({'ProfileToken' : mainProfile._token})

 print 'My Cam: ' + str(snapshot)

*****更新 20160412

リクエストされた追加情報を次に示します。

私は以下を実行しました

for p in media.GetVideoEncoderConfigurations():
    print p

そして、長いので次のように出力されたので、ペーストビンに入れました。

http://pastebin.com/Wfe4CPLy

JPEGについては何もありません。H264 解像度があるので、カメラがより高い解像度でビデオを撮影できることはわかっています。しかし、getsnapshot uri の解像度はまだ低いままです。

4

1 に答える 1

1

スナップショットの解像度は、JPEG ビデオ エンコーダーによって設定されます。media.wsdl埋め込みドキュメントには
、次のように書かれています。

GetSnapshotUri
説明: クライアントは GetSnapshotUri コマンドを使用して、デバイスから JPEG スナップショットを取得します。[...]。URI は、HTTP GET 操作を介して JPEG 画像を取得するために使用できます。画像のエンコードは、メディア プロファイルのエンコード設定に関係なく、常に JPEG になります。JPEG 設定 (解像度や品質など) は、必要に応じてプロファイルから取得できます。提供されたイメージは、GetSnapshotUri の呼び出しとは無関係に自動的に更新されます。

JPEG エンコーダーの解像度を変更するには、次のように進めます。

from onvif import ONVIFCamera

# Set up the camera object using the ONVIF port.
mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass')

#access media service
media = mycam.create_media_service()                

# iterate on encoder configurations
for p in media.GetVideoEncoderConfigurations():
    if p.Encoding == "JPEG":
        print 'JPEG Encoder:' + p._token

        # get encoder options    
        options = media.GetVideoEncoderConfigurationOptions({'ConfigurationToken':p._token})
        print options.JPEG.ResolutionsAvailable

        # get encoder configuration
        cfg = media.GetVideoEncoderConfiguration({'ConfigurationToken':p._token})

        # select the resolution  
        cfg.Resolution = options.JPEG.ResolutionsAvailable[0]

        # update the encoder configuration
        request = media.create_type('SetVideoEncoderConfiguration')
        request.Configuration = cfg
        request.ForcePersistence = True
        media.SetVideoEncoderConfiguration(request)

カメラの容量によっては、エンコーダ構成間の組み合わせができない場合があります。

于 2016-04-07T18:48:58.660 に答える