PTZカメラをコントロールしてみた Python × VAPIX
皆さん、こんにちは!はじめまして。
2024年2月よりLAplustに入社しました中村です。
今回は私の入社時の研修課題について紹介したいと思います。
研修課題は「PTZカメラをコントロールする」でした。
社内にあったAXIS社のPTZネットワークカメラを制御するために、「VAPIX」というAPIを使用し、実際にPythonでプログラミングを行いました。
弊社はIT系の会社で、社内でプログラミングを行っていますが、私はPythonを使ったことがありません。
学生の頃に授業でC言語を習った程度で、前職での経験も無いため、実に11年振りにプログラミングをすることになりました(笑)
今後の業務では、プログラムコードと睨めっこする機会が減りますが、開発の流れを知るという目的で簡単な実装をすることになりました。
この記事は、私と同じくPython初心者やPTZカメラの制御に興味のある方向けとなります。Python中級者、上級者の方は温かい目で見守って下さい!
※一部の文章を生成AIによって生成しています。内容の誤り等がないよう細心の注意を払っていますが、万が一お気づきの場合はご指摘いただけますと幸いです。
目次
1. PTZカメラについて
2. Python × VAPIX
3. Pythonについて
■Pythonの基本と環境設定
■Pythonのインストール
■開発環境の設定
■Pythonプログラミングの基礎
4. VAPIXについて
■VAPIXとの連携
■requestsライブラリの使用
5. PTZコントロールスクリプトの作成
6. まとめと次のステップ
1. PTZカメラについて
PTZ(パン・チルト・ズーム)カメラは、広範囲をカバーし、遠隔操作で画角を調整できるため、セキュリティ、イベントの撮影、会議のライブストリーミングなど、多岐にわたる用途で重宝されています。しかし、その機能をフルに活用するためには、カメラを正確にコントロールする技術が不可欠です。また、PTZカメラを使用する上では、GDPR(一般データ保護規則)などのデータ保護法規制の遵守が求められます。カメラを通じて収集されるデータが個人を特定可能な情報を含む場合、その取り扱いには細心の注意が必要です。
実際に使用したPTZカメラ
この記事では、特にAXIS Communicationsのカメラ向けに開発されたAPIであるVAPIXの使用方法に焦点を当て、PTZカメラをどのように制御するかを紹介します。
2. Python × VAPIX
Pythonはそのシンプルさで初心者にとっても学びやすく、また豊富なライブラリが利用可能なため、様々なプロジェクトに応用でき、幅広いアプリケーション開発に利用されている非常に汎用性の高い言語です。一方、VAPIXはAXIS Communicationsによって提供されるAPIで、HTTPリクエストを通じてカメラの設定を読み書きしたり、PTZ操作を行ったりできます。この強力な組み合わせにより、カメラの動作を細かく制御し、カスタマイズされた監視システムや自動化された撮影ソリューションを実現することが可能になります。
この記事を通じて、PTZカメラとVAPIXの基礎から始め、Pythonを使って実際にカメラをコントロールする方法までを学んでいきます。
PCとPTZカメラ
3. Pythonについて
■Pythonの基本と環境設定
Pythonは、その読みやすさと柔軟性で知られるプログラミング言語です。初心者からプロフェッショナルまで幅広い開発者に愛用されており、ウェブ開発、データ分析、人工知能など、多岐にわたる分野で活用されています。このセクションでは、Pythonの基本的な環境設定から、プログラミングの基礎概念までを簡単に紹介します。これは、後にPTZカメラを制御するためのスクリプトを書く際の基盤となります。
■Pythonのインストール
Pythonを使用するためには、まずPythonをコンピュータにインストールする必要があります。Pythonの公式ウェブサイト(python.org)から最新バージョンのインストーラーをダウンロードし、指示に従ってインストールしてください。インストールが完了すると、コマンドラインやターミナルからpythonまたはpython3コマンドを実行して、インストールが正しく行われたかを確認できます。
■開発環境の設定
Pythonのコードを書くためには、テキストエディタや統合開発環境(IDE)が必要です。初心者には、シンタックスハイライトやコード補完など、プログラミングを容易にする機能を備えたIDEの使用をお勧めします。人気のある選択肢には、Visual Studio Code、PyCharm、Jupyter Notebookなどがあります。これらのツールは、Pythonコードの編集、実行、デバッグを直感的に行うことができます。今回私は、Visual Studio Codeを使用しました。
■Pythonプログラミングの基礎
Pythonでのプログラミングを始める前に、いくつかの基本概念に慣れておくことが重要です。
- 変数: データを格納するためのコンテナ。例えば、camera_ip = “...“は、カメラのIPアドレスを表す文字列を変数camera_ipに割り当てています。
- ループ: コードのブロックを繰り返し実行するための構造。forループやwhileループがあります。
- 関数: 一連の命令をグループ化し、再利用可能なコードのブロックを作成します。例えば、def zoom_in():はズームイン操作を行う関数の始まりを示します。
これらの概念は、PTZカメラを制御するスクリプトを作成する際の基礎となります。続いて、VAPIXについて詳しく見ていきましょう。
4. VAPIXについて
■VAPIXとの連携
VAPIXは、AXIS Communicationsによって提供されるオープンAPIで、これを利用することで、ネットワーク経由でAXIS製品を制御できます。PythonとVAPIXを使用してPTZカメラを制御するためには、HTTPリクエストを送信し、カメラからのレスポンスを処理する方法を理解する必要があります。このセクションでは、VAPIXの基本的な使用方法と、PythonでHTTPリクエストを送信するためのrequestsライブラリの基本について説明します。
■VAPIX APIの基本
VAPIX APIは、カメラの設定を読み取り、変更するためのHTTPベースのインターフェースを提供します。例えば、PTZカメラのズームやパン操作、カメラの設定情報の取得などが可能です。APIの詳細なドキュメントはAXISの公式ウェブサイト(axis.com/vapix-library)で提供されており、APIを使用する前に一度目を通しておくことをお勧めします。
■requestsライブラリの使用
PythonでHTTPリクエストを送信するには、requestsライブラリが最も一般的です。このライブラリはPythonの標準ライブラリではないため、pipを使用してインストールする必要があります。ターミナルまたはコマンドプロンプトで以下のコマンドを実行してください。
pip install requests
インストールが完了したら、Pythonスクリプト内でrequestsライブラリをインポートし、カメラに対してHTTPリクエストを送信できます。以下は、カメラの情報を取得する簡単な例です。
import requests
from requests.auth import HTTPDigestAuth
# カメラのIPアドレスと認証情報
camera_ip = "***.***.*.*"
username = " username "
password = " password "
# VAPIX APIを使用してカメラ情報を取得するURL
url = f"http://{camera_ip}/axis-cgi/admin/param.cgi?action=list"
# requestsを使用してHTTP GETリクエストを送信
response = requests.get(url, auth=HTTPDigestAuth(username, password))
# レスポンスの内容を表示
print(response.text)
このコードは、指定したカメラの設定パラメータをリストアップします。requests.get関数はHTTP GETリクエストを送信し、カメラからのレスポンスをresponseオブジェクトに格納します。その後、response.textを使用してレスポンスボディを表示します。
☆重要なポイント
- カメラのIPアドレスや認証情報は、セキュリティのため、スクリプト内にハードコードすることは推奨されません。実際のアプリケーションでは、環境変数や設定ファイルからこれらの情報を読み込む方法を検討してください。
- requestsライブラリは、HTTPリクエストの送信だけでなく、レスポンスのステータスコードやヘッダーの検査、JSONレスポンスのパースなど、HTTPクライアントとしての幅広い機能を提供します。
- AXISのPTZカメラはDigest認証を導入しています
私はここでつまづきました、、汗 Basic認証だと思ってプログラミングし、「何故動かない?」となり解決に時間を費やしました。
Digest認証とは、HTTPで定義される認証方式の一つであり、Basic認証の平文で「ユーザーID」と「パスワード」を送信してしまう欠点を改善し、ハッシュ化して送信するため、Basic認証よりもセキュリティー性が高くなっています。
これで、PythonとVAPIXを使用してPTZカメラと通信する基本が理解できました。次に、これらの知識を活かして、実際にカメラを制御するPythonスクリプトを作成していきましょう。
5. PTZコントロールスクリプトの作成
これまでのセクションで学んだPythonとVAPIXの基礎を活かして、実際にPTZカメラを制御するPythonスクリプトを作成してみましょう。このセクションでは、カメラをパン(水平移動)、チルト(垂直移動)、ズームする基本的なスクリプトの作成方法を説明します。
■PTZコントロールの基本
PTZカメラのパン、チルト、ズーム機能を制御するためには、VAPIX APIを介して特定のHTTPリクエストをカメラに送信します。これらのリクエストは、カメラのIPアドレス、認証情報、および適切なAPIエンドポイントとパラメータを指定することによって構成されます。
■スクリプトの例
以下は、PTZ機能を制御するためのシンプルなPythonスクリプトの例です。この例では、カメラを現在の位置から右に10°パンさせる操作を行います。
import requests
from requests.auth import HTTPDigestAuth
camera_ip = "***.***.*.*"
url = f"http://{camera_ip}/axis-cgi/com/ptz.cgi"
username = " username "
password = " password "
r_params = {"rpan": "10"}
response = requests.get(url, params = r_params, auth = HTTPDigestAuth(username, password))
print("カメラが右に10°パンしました。")
■スクリプトの解説
- このスクリプトでは、requestsライブラリを使用して、VAPIX APIエンドポイントにHTTP GETリクエストを送信しています。
- チルトとズームの操作については、VAPIXの公式サイトを参考にしてパラメータ部を変更することで各動作が行われます。
6. まとめと次のステップ
PythonとVAPIXを使用してPTZカメラを制御する基本的な方法について学びました。この記事を読むことで、PTZカメラの基本、Pythonの環境設定、VAPIXとの連携、基本的なPTZコントロールスクリプトの作成の参考になれば幸いです。これらの知識を基に、さらに複雑なカメラ制御システムの開発や、自動化された監視システムの構築に挑戦することが可能です。
次のステップ
- 実践:自分のPTZカメラを制御するスクリプトの作成。異なるパラメータや条件で実験を行い、カメラの動作を理解することが重要です。
- セキュリティの強化:カメラシステムのセキュリティを常に意識し、認証情報の管理や通信の暗号化、セキュリティパッチの適用、アクセス制御の強化等セキュリティ対策を講じる。
この記事がPython初心者とPTZカメラ制御の入門として役立ち、皆さんがこの分野でのさらなる探求と発展を遂げるきっかけになれば幸いです。
ここまで読み進めていただいた皆様はカメラを用いた課題解決にご興味が少なからずあるかと思います。弊社の物体検出サービス『LAplust Eye』は、目で見て判断する機能を”部品”として提供します。様々なユースケースに対応するサービスとなっており、短納期・低コスト・高品質な物体検出タスクの実現が可能です。ご興味がおありでしたら、ぜひお問い合わせくださいませ。
長くなってしまいましたが、最後までお読みいただきありがとうございました。