ビデオソースからエッジインテリジェンスまで: エンドツーエンドの AI ソリューションを実現するための技術的課題と実践

ビデオソースからエッジインテリジェンスまで: エンドツーエンドの AI ソリューションを実現するための技術的課題と実践

序章

人工知能技術の急速な発展に伴い、エンドツーエンドの AI ソリューションはさまざまな分野でますます広く使用されています。これらのソリューションは、データ収集から結果出力までの完全なプロセスを実現し、人工知能アルゴリズムと物理機器、ネットワーク通信、クラウドサービスなどのテクノロジーを有機的に組み合わせ、包括的かつ効率的なインテリジェントエクスペリエンスをユーザーに提供します。

エッジ コンピューティングを使用する利点は、データ処理と分析をデータ ソースに近づけることができるため、データ送信と遅延が削減され、応答速度とリアルタイム パフォーマンスが向上することです。特にビデオ監視などのリアルタイム アプリケーション シナリオでは、エッジ コンピューティングはクラウドの負荷を効果的に軽減し、より高速なデータ処理と応答機能を提供します。さらに、エッジ コンピューティングはオフラインで実行する機能も備えており、ネットワークが不安定な場合やネットワーク接続がない場合でも、ローカルでのデータ処理と分析を実行して、システムの安定性と信頼性を確保できます。

一般的なソリューションのフローチャートは次のとおりです。

A[视频源头采集] --> B[选择合适的摄像机设备]
B --> C[配置摄像机参数(分辨率、帧率等)]
C --> D[视频数据采集]
D --> E[视频编码(H.264、H.265等)]
E --> F[视频传输]
F --> G[选择合适的传输协议]
G --> H[网络带宽评估和调整]
H --> I[选择合适的存储介质]
I --> J[存储容量规划]
J --> K[边缘计算和盒子设备]
K --> L[选择合适的边缘盒子设备]
L --> M[盒子硬件要求和选择]
M --> N[盒子操作系统选择]
N --> O[配置盒子依赖项和运行环境]
O --> P[安装和配置SDK]
P --> Q[SDK初始化]
Q --> R[设置SDK参数]
R --> S[调用SDK接口]

エンドツーエンドの AI ソリューションを開く

NVR (ネットワーク ビデオ レコーダー) と DVR (デジタル ビデオ レコーダー) という既知の機器のボックスに加えて、ビデオ カメラの監視にどのようなタイプの機器が搭載されているかを知る必要もあります。

  1. カメラ: カメラは、ビデオ監視システムの最も基本的かつ中核的なデバイスの 1 つです。ビデオ画像をキャプチャし、その画像を処理および送信するために電子信号に変換するために使用されます。カメラは、固定カメラ、ドームカメラ、バレットカメラ、赤外線カメラなど、さまざまなアプリケーションシナリオや要件に応じてさまざまなタイプに分類できます。カメラは通常、有線または無線の手段を介して他のデバイスに接続されます。
  2. PTZ カメラ (パン・チルト・ズーム・カメラ) : PTZ カメラにはパンチルト、ピッチ、ズームの機能があり、リモコンで方向、角度、焦点距離の調整を実現できます。これらのカメラは、移動するターゲットのリアルタイム監視と追跡に使用でき、セキュリティ、交通監視などの分野で広く使用されています。
  3. 高解像度カメラ (高解像度カメラ) : 高解像度カメラは高解像度および高品質の画像キャプチャ機能を備えており、より鮮明で詳細なビデオ画像を提供できます。銀行やショッピングモール、公共の場所など、高画質が求められるシーンに適したカメラです。
  4. ネットワーク カメラ: ネットワーク カメラは、ネットワークを通じてビデオ信号を送信できるカメラであり、IP カメラとも呼ばれます。イーサネット経由でネットワークに接続し、ビデオを NVR、DVR、またはコンピュータに直接ストリーミングして、保存、処理、監視することができます。ネットワーク カメラには、大規模な監視システムやリモート監視のための柔軟な設置および構成オプションがあります。
  5. ストレージデバイス: ストレージデバイスは、カメラでキャプチャされたビデオデータを保存および保存するために使用されます。監視システムでは、NVR (ネットワーク ビデオ レコーダー) と DVR (デジタル ビデオ レコーダー) が一般的なストレージ デバイスです。カメラからビデオ信号を受信して​​処理し、その後の検索、再生、分析のためにデータをハードドライブまたはその他の記憶媒体に保存します。
  6. スイッチ (スイッチ) : スイッチは、監視システム内の接続とネットワークの役割を果たします。ローカル エリア ネットワーク (LAN) を確立し、カメラ、ストレージ デバイス、サーバーなどのさまざまなデバイスを接続するために使用されます。スイッチは通常、安定した情報伝送を保証するために高帯域幅と高速データ伝送をサポートします。

ビデオソースコレクション

エンドツーエンドの AI ソリューションでは、ビデオ ソースの取得はインテリジェントなビデオ分析を実現するための重要なステップです。ビデオ ソースを収集するときは、カメラのタイプと構成パラメータ、およびビデオ エンコード規格とパラメータの選択という 2 つの側面を考慮する必要があります。

カメラの種類と設定パラメータ

ビデオ ソースのキャプチャには、適切なカメラ機器を選択することが重要です。特定のアプリケーション要件に応じて、ネットワーク カメラ (IP カメラ)、アナログ カメラ、高解像度カメラなど、さまざまなタイプのカメラを選択できます。各カメラの種類には、固有の特性と適用可能なシナリオがあります。

設定パラメータには、解像度、フレーム レート、露出、コントラストなどが含まれますが、これらに限定されません。これらのパラメーターは、特定のシナリオと要件に従って設定する必要があります。たとえば、詳細をキャプチャする必要がある状況では、より高い解像度とフレーム レートを選択できますが、暗い環境では、より鮮明な画像を得るために露出調整とコントラスト比を調整する必要がある場合があります。

ビデオコーディング規格とパラメータの選択

ビデオコーディング規格は、ビデオデータの圧縮方法と送信方法を決定します。一般的に使用されるビデオ コーディング標準には、H.264、H.265 などが含まれます。適切なビデオ符号化規格を選択すると、ビデオ品質を確保しながらデータ量を削減し、伝送効率を向上させることができます。

エンコード規格に加えて、適切なエンコードパラメータも選択する必要があります。エンコードパラメータには、ビットレート、GOPサイズ、エンコード品質などが含まれます。これらのパラメータの選択では、ビデオ品質と伝送効率のバランスを取る必要があります。たとえば、ビット レートとエンコード品質が高いほどビデオ品質は向上しますが、データ量が増加し、帯域幅とストレージに対する要求が高くなります。

カメラのタイプと構成パラメータ、およびビデオコーディング標準とパラメータを合理的に選択することで、高品質かつ高効率のビデオソース収集が達成され、その後のビデオ分析と処理のための高品質のデータ基盤が提供されます。

ビデオの送信と保存

エンドツーエンドの AI ソリューションでは、ビデオの送信とストレージが重要なリンクであり、これには適切なネットワーク送信プロトコルとストレージ メディアの選択、容量計画が含まれます。

ネットワーク伝送プロトコル
適切なネットワーク伝送プロトコルを選択することは、ビデオ伝送の安定性と効率性にとって非常に重要です。一般的に使用されるネットワーク トランスポート プロトコルの一部を次に示します。

  1. RTSP (リアルタイム ストリーミング プロトコル) :
    • 特徴: RTSP は、マルチメディア データ送信の制御に使用されるアプリケーション層プロトコルです。リアルタイムのストリーミングメディア伝送を実現し、再生、一時停止、早送りなどの柔軟な制御機構を提供します。RTSP は、遅延が少なく、リアルタイム パフォーマンスが優れているため、ビデオ監視の分野でよく使用されます。
    • 適用可能なシナリオ:ビデオ会議、ライブビデオブロードキャスト、リアルタイム監視システムなど、リアルタイムの監視と制御が必要なシナリオに適しています。
  2. RTMP (リアルタイム メッセージング プロトコル) :
    • 特徴: RTMP は、オーディオ、ビデオ、およびデータ送信用のプロトコルです。送信プロセスにリアルタイムメッセージ通信メカニズムを使用し、リアルタイムのデータ送信と対話を実現します。RTMP はストリーミングと再生をサポートしており、リアルタイム マルチメディア アプリケーションに適しています。
    • 適用可能なシナリオ: オンライン ライブ ブロードキャスト、ビデオ オン デマンド、リアルタイムのオーディオおよびビデオ通信などのリアルタイム マルチメディア アプリケーションに適しています。
  3. SRT (安全で信頼性の高いトランスポート) :
    • 特徴: SRT は、安全で信頼性の高いストリーミング メディア伝送を提供するために設計されたオープンソース伝送プロトコルです。前方誤り訂正、再送信、暗号化などのメカニズムを使用して、送信の安定性とセキュリティを確保します。SRT は、不安定なネットワーク環境でのビデオ伝送に適しており、パケット損失や帯域幅ジッターが発生した場合でもスムーズな再生を維持できます。
    • 適用シナリオ:遠隔監視、モバイルアプリケーション、クラウドビデオ送信など、ネットワーク環境が不安定でパケットロス率が高いシナリオに適しています。
  4. 国家標準プロトコル ONVIF (Open Network Video Interface)
    • 特徴: ONVIF は、異なるメーカーのネットワーク ビデオ機器間の相互運用性を促進することを目的とした業界連合組織によって作成された標準プロトコルです。標準インターフェイスとプロトコルのセットを定義することで、さまざまなメーカーのデバイスを相互接続して相互運用できるようになり、デバイスの統合と管理が容易になります。
    • 適用可能なシナリオ: ONVIF はビデオ監視システムで広く使用されており、ネットワーク カメラ、NVR (ネットワーク ビデオ レコーダー)、VMS (ビデオ管理ソフトウェア) などのさまざまなデバイスの連携と統合を実現できます。ONVIF プロトコルを使用することで、デバイスの検出、ビデオ ストリームの送信、イベントのトリガー、デバイスの構成などの機能を実現できます。

国家標準プロトコルを使用する手順は次のとおりです。

  1. 国家標準プロトコルをサポートするビデオ キャプチャ デバイスまたはカメラをインストールして構成します。
  2. 受信側のボックスデバイスでは、対応するSDKまたはライブラリを使用して、国家標準プロトコルの解析と受信を実現します(この部分は後で紹介します)。
  3. 送信されるコード ストリーム タイプ、解像度、フレーム レート、その他のパラメーターを指定するなど、必要に応じてプロトコルを構成します。
  4. URLまたはプロトコルのアドレスを指定して映像データの送受信を実現します。

帯域幅要件

ネットワーク トランスポート プロトコルを選択するときは、必要な帯域幅も考慮する必要があります。帯域幅要件は、ビデオ解像度、フレーム レート、エンコード パラメータによって異なります。解像度とフレーム レートが高く、エンコード品質が高いほど、スムーズで安定したビデオ伝送を保証するためにより大きな帯域幅が必要になる場合があります。したがって、ネットワーク伝送を実行する場合は、ビデオ伝送の要件を満たす帯域幅を評価し、計画する必要があります。

ストレージメディアと容量計画

ビデオストレージとは、収集したビデオデータを、その後の分析と再生のために適切なストレージメディアに保存することです。ストレージ メディアを選択するときは、容量、安定性、拡張性などの要素を考慮する必要があります。

一般的なストレージ メディアには、ハードディスク、ソリッド ステート ドライブ (SSD)、クラウド ストレージなどがあります。ハードディスクは大容量で比較的安価という利点があり、大量の動画データの保存に適しています。SSD は読み取りおよび書き込み速度が高く、耐震性能が優れているため、リアルタイム要件の高いアプリケーション シナリオに適しています。クラウド ストレージは、バックアップおよび災害復旧機能を提供しながら、拡張性の高いストレージ ソリューションを提供できます。

ストレージ容量を計画するときは、ビデオ データの継続的な生成と保存サイクルを考慮する必要があります。具体的な容量計画は、ビデオ取得頻度、解像度、フレーム レート、ストレージ サイクルの要件によって異なります。ストレージ容量計画の一般的な手順は次のとおりです。

  1. ビデオ データの生成速度を推定する: ビデオの解像度、フレーム レート、エンコード パラメーターに基づいて、1 秒あたりに生成されるデータの量を推定します。
  2. ストレージ要件の計算: ストレージ サイクルの要件と組み合わせた、1 秒あたりに生成されるデータ量に基づいて、必要な合計ストレージ容量を計算します。たとえば、1 週間分のビデオ データを保存する必要がある場合、1 秒あたりのデータ量と 1 週間の秒数に基づいて総容量を計算できます。
  3. データの圧縮と最適化を検討する: ビデオ コーディング技術を使用してデータを圧縮し、ストレージ要件を削減します。エンコード標準とパラメータが異なると、ストレージ容量に影響します。
  4. 適切な記憶媒体の選択: 記憶要件と実際の状況に応じて、適切な記憶媒体を選択します。通常、ハード ドライブと SSD が一般的な選択肢であり、必要に応じて拡張したりバックアップしたりできます。
  5. ストレージ管理戦略を実装します。ストレージ領域を解放するために、不要になったビデオ データを定期的にクリーンアップしてアーカイブします。ストレージ容量の実際の使用状況に応じて、ストレージの管理と最適化が行われます。

適切なネットワーク送信およびストレージ戦略により、ビデオ データの安定した送信と信頼性の高いストレージが確保され、その後のデータ分析と処理のための高品質のデータ基盤が提供されます。

エッジ コンピューティングとボックス デバイス

エッジ コンピューティングは、エンドツーエンド AI ソリューションを実装する際の重要なリンクです。エッジ コンピューティングでは、データ ソースに近いエッジ デバイス (ボックスなど) を使用してデータの処理と分析を行い、データの送信と応答時間を短縮します。

ボックスのハードウェア要件とオプション

効率的なエッジ コンピューティングを実現するには、適切なボックス ハードウェアを選択することが重要です。キー ボックスのハードウェア要件と選択ポイントをいくつか示します。

  1. プロセッサとメモリ: 複雑なアルゴリズムとモデル推論をサポートするのに十分な計算能力とメモリ容量を備えたプロセッサを選択します。一般的なプロセッサには、ARM、Intel Core、AMD Ryzen などが含まれます。メモリ容量は実際のニーズに応じて決定する必要があります。
  2. ストレージ デバイス: データを保存してアクセスするために、十分な容量と高速の読み取りおよび書き込みパフォーマンスを備えたストレージ デバイスを選択します。ハードディスクとSSDが一般的で、ニーズに応じて適切な容量と種類を選択できます。
  3. ネットワーク接続: 他のデバイスとの通信やデータ転送のために、ボックスに安定したネットワーク接続があることを確認してください。イーサネット、Wi-Fi、携帯電話ネットワークなどの接続方法をサポートするボックスが一般的な選択肢です。
  4. 温度および環境要件: ボックスの環境および用途シナリオに従って、その温度範囲、耐震性能、およびその他の要件を考慮します。

ボックス ハードウェアを選択するときは、実際のエッジ コンピューティングのニーズを満たすために、コンピューティング能力、ストレージ要件、ネットワーク接続、環境要件などの要素を包括的に考慮する必要があります。

Box OS と依存関係

適切なオペレーティング システムを選択し、必要な依存関係をインストールすることは、ボックスが適切に機能し、アプリケーションを展開するために重要です。

  1. オペレーティング システム: 一般的なボックス オペレーティング システムには、Linux (Ubuntu、CentOS など) や Windows IoT などが含まれます。アプリケーション プログラムの要件とハードウェア プラットフォームの互換性に従って、適切なオペレーティング システムを選択します。
  2. 依存関係とライブラリ: アプリケーションのニーズに応じて、必要な依存関係とライブラリをインストールして構成します。これには、画像処理ライブラリ、機械学習フレームワーク、ネットワーク トランスポート ライブラリなどが含まれる場合があります。パッケージ管理ツール (apt、yum など) を使用するか、手動でインストールしてアプリケーションの依存関係を満たすようにします。

ボックス オペレーティング システムの安定性とセキュリティを確保し、アプリケーションのニーズに応じて必要な依存関係とライブラリをインストールして、エッジ コンピューティングのスムーズな進行を保証します。

実際、デバイスからボックスまでのデータ収集情報の流れは下図のように単純化できますが、違いは記憶媒体の有無、記憶媒体とは何か、どこにあるかの違いです。

ここに画像の説明を挿入
ビデオ キャプチャ デバイスとストレージ デバイス間の接続には、スイッチを使用してストレージ デバイスに接続することが目的で、NVR にスイッチを追加するなど、複雑なデバイスの組み合わせが存在する場合があります。

ストレージ デバイスがない場合は、キャプチャ ビデオ デバイスとエッジ ボックス間の直接通信になります。

ストレージ デバイスがある場合、ストレージ デバイスはボックスと通信します (このプロセスはより簡単です)。

記憶媒体には方法があります。この方法では、ビデオ カメラ デバイスが収集したビデオ データを媒体 (ハードディスク、SSD など) に保存し、ボックスが特定の方法で記憶媒体にアクセスして、後続の処理のためにビデオ データを取得します。一般的なストレージ メディアの方法には次のものがあります

  • ローカル ストレージ: カメラ デバイスはビデオ データをローカル ストレージ メディアに保存し、ボックスはネットワークまたはその他の方法を介してデバイス上のストレージ メディアにアクセスしてビデオ データを取得します。この方法はエッジ コンピューティングのシナリオでよく使用され、ボックスはネットワーク送信またはストレージ デバイスへの直接アクセスを通じてデータを取得できます。
  • 中央ストレージ: ビデオ カメラ デバイスはビデオ データを中央サーバーまたはネットワーク ストレージ デバイスに保存し、ボックスはネットワークを介して中央ストレージ デバイスに接続してビデオ データを取得します。この方法は、Alibaba Cloud の OSS など、多数のカメラ デバイスのビデオ データを一元管理および保存するためによく使用されます。

記憶媒体を使用しない方法: この方法では、ビデオ カメラ デバイスは、記憶媒体の中間ステップを経由せずに、収集したビデオ データをボックスに直接送信します。記憶メディアを使用しない一般的な方法は次のとおりです

  • リアルタイム伝送プロトコル: ビデオ カメラ デバイスは、リアルタイム伝送プロトコル (RTSP、RTMP など) を通じてリアルタイム ビデオ ストリームをボックスに伝送します。このボックスは、リアルタイムのビデオ データを直接受信して処理できます。この方法は、ビデオ監視やビデオ会議など、高いリアルタイム パフォーマンスが必要なシナリオに適しています。
  • ストリーミングメディアサーバー:ビデオカメラデバイスはストリーミングメディアサーバーに映像データを送信し、ボックスはストリーミングメディアサーバーにアクセスして映像データを取得します。ストリーミング メディア サーバーはビデオ データの受信、保存、配信を担当し、ボックスはストリーミング メディア プロトコル (HTTP、HLS など) を通じてサーバーにアクセスしてデータを取得できます。

ストレージ メディアがない場合、デバイスとエッジ ボックス間の通信は、デバイスのタイプ、プロトコル、通信インターフェイスに応じてさまざまな方法で実現できます。一般的にデバイスがボックスと通信する一般的な方法をいくつか示します。

  1. デバイス ドライバー: 一部の標準化されたデバイスについては、通常、オペレーティング システムが対応するデバイス ドライバーを提供します。エッジ ボックスは、適切なデバイス ドライバーを使用してデバイスと通信し、デバイスから送信されたデータを取得できます。ドライバーは、ボックスでデバイス データを認識して処理できるように、統一されたインターフェイスを提供できます。
  2. インターフェイス プロトコルと API : 特定のデバイスは、他のデバイスまたはアプリケーションがそれらと通信できるようにする特定のインターフェイス プロトコルと API を提供します。エッジ ボックスは、対応するプロトコルと API を使用してデバイスと対話できます。たとえば、カメラ デバイスは RTSP (Real-Time Streaming Protocol) プロトコルをサポートする場合があり、これを通じてデバイスのビデオ ストリーム データをボックスで取得できます。
  3. SDK : 一部のデバイス メーカーは、デバイスの通信と制御のための特定の SDK を提供しています。これらの SDK には通常、デバイスと対話するために必要な関数、メソッド、プロトコルが含まれています。SDKを利用することで、エッジボックスはデバイスメーカーが提供するAPIを利用してデバイスとの通信を実現できます。SDK を使用するための具体的な手順はデバイスのメーカーや SDK によって異なる場合があり、通常は次の手順が含まれます。
    • SDK をダウンロードしてインストールする: デバイスの製造元の公式 Web サイトまたはその他の信頼できるソースからデバイスとオペレーティング システム用の SDK をダウンロードし、提供されるインストール手順に従います。
    • SDK ライブラリとヘッダー ファイルをインポートする: プロジェクトで、SDK によって提供されるライブラリ ファイルとヘッダー ファイルを開発環境にインポートします。通常、これは、コンパイルおよびリンク時に SDK の機能が正しく使用できるようにするために、プロジェクト構成で設定する必要があります。
    • デバイス接続の初期化: SDK が提供する関数またはメソッドを使用して、デバイス接続を初期化します。これには、デバイスの IP アドレス、ポート番号、ユーザー名、パスワードなどの接続パラメーターの指定が含まれる場合があります。
    • SDKの関数を呼び出す:SDKが提供する関数やメソッドを呼び出すことで、デバイスとの通信を実現します。これには、コマンドの送信、データの受信、イベントのサブスクライブなどの操作が含まれます。通常、SDK ドキュメントには、デバイス通信に SDK を使用する際に役立つ詳細な API リファレンスとサンプル コードが記載されています。
    • デバイス データの処理: デバイス接続が確立されたら、SDK が提供する関数を使用して、デバイスから送信されたデータを取得できます。SDK のドキュメントと例に従って、エッジ ボックスでの後続の処理と分析のためにデバイス データを解析および処理する方法を学びます。

SDK

デバイス ネットワーク SDK は、デバイスのプライベート ネットワーク通信プロトコルに基づいて開発されており、組み込みネットワーク ハードディスク レコーダー、NVR、ビデオ サーバー、ネットワーク カメラ、ネットワーク ボール カメラ、デコーダ、アラーム ホストなどのネットワーク製品のサポート モジュールであり、リモート アクセスおよび制御デバイス ソフトウェアの二次開発に使用されます。

デバイスネットワークSDKを使用すると、提供される機能やインターフェースを利用して、デバイスとの通信、データ送信、制御を実現できます。

デバイスと対応する Web SDK を特定する: まず、使用しているデバイスと関連する Web SDK を特定する必要があります。デバイスのタイプとメーカーに応じて、対応する SDK とドキュメントを見つけることができます。

一般的に、デバイスの SDK インターフェイス機能はすべて C または C++ で書かれていますが、一部の Raspberry Pi では、取得デバイスからストレージ デバイス、コンピューティング パワー デバイスに至るすべてを Python 言語で提供しています

パフォーマンスと効率のため: C および C++ は、マシンコードに直接コンパイルされるコンパイル言語であるため、パフォーマンスと効率の点で利点があります。高いコンピューティング パフォーマンスとリソース利用効率を必要とする一部のアプリケーション シナリオでは、C または C++ を使用することで要件をより適切に満たすことができます。対照的に、Python はインタープリタ言語であり、実行時に 1 行ずつ解釈して実行する必要があるため、比較的低速です。

SDK開発は通常、C/Sアーキテクチャ(クライアント/サーバー)とB/Sアーキテクチャ(ブラウザ/サーバー)に分けられます。

  • C/S アーキテクチャ: C/S アーキテクチャでは、クライアントとサーバーの間に直接通信接続が確立されます。SDK は通常、クライアント アプリケーションの開発に使用され、サーバーと通信するためのインターフェイスと機能を提供します。クライアント アプリケーションは SDK を使用して、サーバーとのデータ交換、リクエスト処理、およびその他の操作を実行します。このアーキテクチャは、デスクトップ アプリケーション、モバイル アプリケーションなど、クライアント側でのデータ処理と対話を必要とするアプリケーションに適しています。
  • B/S アーキテクチャ: B/S アーキテクチャでは、クライアントに追加のソフトウェアや SDK をインストールすることなく、クライアントはブラウザを通じてサーバーと通信します。サーバーは Web サービスを提供し、クライアントはブラウザーを介して Web ページにアクセスすることでサーバーと対話します。B/S アーキテクチャでは、通常、SDK はサーバー側の開発に使用され、サーバーの機能とデータを管理するためのインターフェイスを提供します。このアーキテクチャは、Web アプリケーションやクラウド サービスなどのシナリオに適しています。

C/S アーキテクチャと B/S アーキテクチャに加えて、SDK を使用して開発できるアーキテクチャ モデルには、分散アーキテクチャ、マイクロサービス アーキテクチャなどがあります。これらのアーキテクチャ パターンは、特定の要件やアプリケーション シナリオに従ってシステムを複数のコンポーネントまたはサービスに分割し、SDK を使用してこれらのコンポーネントまたはサービスのインターフェイスと機能を開発し、コンポーネントまたはサービス間の通信とコラボレーションを実現できます。

サーバーは、データ、機能を提供する、またはリクエストを処理するデバイスのサーバー側を指す場合があります。たとえば、ビデオ監視システムの場合、サーバーは NVR (ネットワーク ビデオ レコーダー) またはビデオ ストリーミング サーバーであり、SDK はこれらのサーバーと通信するクライアント アプリケーションの開発に使用されます。

以下の図は、Hikvision の SDK の基本的な呼び出しプロセスを示しています。
ここに画像の説明を挿入
破線のボックス内のプロセスはオプションの部分であり、他のプロセスやモジュールの機能の使用には影響しません。

Hikvision NVR の基本的な呼び出しプロセスには、主に次のモジュールが含まれています。

  1. SDK の初期化: NET_DVR_Init 関数を呼び出して、メモリの事前割り当てなどの操作を含む SDK を初期化します。
  2. 接続タイムアウト時間を設定する: NET_DVR_SetConnectTime 関数を呼び出して、SDK でネットワーク接続タイムアウト時間を設定します。
  3. 例外メッセージを受信するためのコールバック関数を設定する: NET_DVR_SetDVRMessage または NET_DVR_SetExceptionCallBack_V30 関数を使用して、プレビュー、アラーム、再生、トランスペアレント チャネル、音声インターコムなどのモジュールから例外情報を受信するためのコールバック関数を設定します。
  4. 解決サーバーからデバイスの IP アドレスを取得する: NET_DVR_GetDVRIPByResolveSvr_EX 関数を呼び出して、解決サーバーからデバイスの IP アドレスを取得します。この関数は、デバイス名、DDNS ドメイン名、またはシリアル番号を通じてクエリできます。
  5. ユーザー登録デバイス: NET_DVR_Login_V30 関数を呼び出してユーザーを登録します。返されたユーザー ID は、他の機能操作の一意の識別子として使用されます。
  6. プレビューモジュール: プレビュー関連関数を呼び出すことで、デバイスからリアルタイムコードストリームを取得し、デコードして表示し、プレビュー機能を実現します。
  7. 再生およびダウンロード モジュール: 時間またはファイル名に基づいてデバイスのビデオ ファイルをリモートで再生またはダウンロードし、ブレークポイント レジューム機能をサポートします。
  8. パラメータ設定モジュール: デバイスパラメータ、ネットワークパラメータ、チャネル圧縮パラメータ、シリアルポートパラメータ、アラームパラメータ、異常パラメータ、トランザクション情報、ユーザー設定など、デバイスのさまざまなパラメータを設定および取得します。
  9. リモートデバイスメンテナンスモジュール:デバイスのシャットダウン、デバイスの再起動、デフォルト値の復元、リモートハードディスクのフォーマット、リモートアップグレード、設定ファイルのインポート/エクスポートなどのメンテナンス機能を実現します。
  10. 音声インターコム転送モジュール: デバイスで音声インターコムと音声データの取得を実現します。
  11. アラームモジュール: デバイスによってアップロードされたさまざまなアラーム信号を処理します。
  12. 透過チャネルモジュール: IP データグラムを解析し、シリアルポートに直接送信することでシリアルデバイスの制御を実現します。
  13. PTZ 制御モジュール: PTZ の基本操作、プリセット ポイント、クルーズ、パターン スキャン、透明 PTZ の制御を実現します。

示列

以下は、SDK のダウンロード、インポート、IP チャネル リソースの構成、再生およびダウンロード モジュールのサンプル コードの呼び出しを含む、Hikvision NVR SDK を使用する展開プロセスです。スペースの制限のため、次の例ではプロセスとコードの一部のみを示しており、CentOS システムと C/C++ 開発環境の基礎がすでにあることを前提としていることに注意してください。

  1. SDK をダウンロードする:
    a. Hikvision 公式 Web サイト (https://www.hikvision.com/) にアクセスし、SDK ダウンロード ページを見つけます。
    b. ニーズに応じて適切な SDK バージョンを選択し、ローカル コンピューターにダウンロードします。
  2. SDK をインポートします:
    a. ダウンロードした SDK を作業ディレクトリに解凍します。
    b. ターミナルを開き、SDK が解凍されたディレクトリを入力します。
  3. 新しい C/C++ プロジェクトを作成します:
    a. ターミナルで次のコマンドを使用して、新しい C/C++ プロジェクトを作成します。
mkdir my_nvr_project
cd my_nvr_project
  1. プロジェクトを構成します:
    a. プロジェクトが存在するディレクトリを開き、ターミナルで次のコマンドを実行します。
cmake path_to_sdk_directory
make
  1. コードを記述するには:
    a. プロジェクト ディレクトリに新しいソース コード ファイル (例: main.cpp) を作成し、編集します。
    b. 必要なヘッダー ファイルと関数呼び出しを含めて、main.cpp にコードを記述します。以下は、Hikvision NVR SDK を使用して IP チャネル リソースを構成し、再生モジュールとダウンロード モジュールを呼び出す方法を示すサンプル コード スニペットです。
vi main.cpp
#include <iostream>
#include "HCNetSDK.h"

int main() {
    
    
    // 初始化SDK
    NET_DVR_Init();

    // 设置连接超时时间
    NET_DVR_SetConnectTime(2000, 1);

    // 用户登录设备
    NET_DVR_USER_LOGIN_INFO loginInfo = {
    
    0};
    NET_DVR_DEVICEINFO_V40 deviceInfo = {
    
    0};
    loginInfo.bUseAsynLogin = 0;
    strncpy(loginInfo.sDeviceAddress, "192.168.1.100", NET_DVR_DEV_ADDRESS_MAX_LEN);
    strncpy(loginInfo.sUserName, "admin", NAME_LEN);
    strncpy(loginInfo.sPassword, "password", NAME_LEN);

    LONG userID = NET_DVR_Login_V40(&loginInfo, &deviceInfo);
    if (userID < 0) {
    
    
        std::cout << "Failed to login. Error code: " << NET_DVR_GetLastError() << std::endl;
        NET_DVR_Cleanup();
        return -1;
    }

    // 登录成功,可以进行其他操作

    // IP通道资源配置
    NET_DVR_IPPARACFG_V40 ipParaCfg = {
    
    0};
    DWORD dwReturned = 0;
    if (!NET_DVR_GetDVRConfig(userID, NET_DVR_GET_IPPARACFG_V40, 0, &ipParaCfg, sizeof(ipParaCfg), &dwReturned)) {
    
    
        std::cout << "Failed to get IP channel configuration. Error code: " << NET_DVR_GetLastError() << std::endl;
        NET_DVR_Logout(userID);
        NET_DVR_Cleanup();
        return -1;
    }

    // 在这里对IP通道配置进行修改

    if (!NET_DVR_SetDVRConfig(userID, NET_DVR_SET_IPPARACFG_V40, 0, &ipParaCfg, sizeof(ipParaCfg))) {
    
    
        std::cout << "Failed to set IP channel configuration. Error code: " << NET_DVR_GetLastError() << std::endl;
        NET_DVR_Logout(userID);
        NET_DVR_Cleanup();
        return -1;
    }

    // 回放和下载模块调用
    NET_DVR_FIND_DATA_V30 findData = {
    
    0};
    LONG findHandle = NET_DVR_FindFile_V30(userID, &findData);
    if (findHandle < 0) {
    
    
        std::cout << "Failed to find file for playback. Error code: " << NET_DVR_GetLastError() << std::endl;
        NET_DVR_Logout(userID);
        NET_DVR_Cleanup();
        return -1;
    }

    // 在这里对回放和下载进行操作

    if (!NET_DVR_StopFindFile(findHandle)) {
    
    
        std::cout << "Failed to stop file finding. Error code: " << NET_DVR_GetLastError() << std::endl;
    }

    // 注销设备
    NET_DVR_Logout(userID);

    // 释放SDK资源
    NET_DVR_Cleanup();

    return 0;
}
  1. プロジェクトをビルドして実行します:
    a. ターミナルで次のコマンドを使用してプロジェクトをビルドします:
    b. プロジェクトを実行します:
make
./my_nvr_project

上記のコード例は、Hikvision NVR SDK を使用して SDK の初期化、接続タイムアウトの設定、デバイスへのログイン、IP チャネル リソースの構成、再生およびダウンロード モジュールの呼び出し、デバイスからのログアウト、SDK リソースの解放を行うプロセスを示しています。

実際のプロジェクトのコードと機能は要件に応じて異なることに注意してください。特定のニーズに合わせて、SDK が提供するドキュメントと関数に従って、対応する関数を呼び出して実装できます。

おすすめ

転載: blog.csdn.net/weixin_42010722/article/details/131574666