キーワードから探す

※スペースで区切って複数検索が可能です。

カテゴリで絞り込む

よく検索されるキーワード

ID:461
作成日: 2024/07/23

【AcaPy】GigEカメラの使用方法

カテゴリ AcaPy


AcaPy Ver.1.2.0以降(AcapLib2 Ver.8.3.1以降)より、アバールデータ製のGigEカメラが使用可能です。
※GigEカメラを使用する際は、ファイアウォールを無効にするか、ファイアウォールによるアプリケーションの許可を行ってください。

AcaPyを用い、GigEカメラの画像を撮影する最小限のプログラムを以下に示します。

import sys

import cv2      # OpenCV
import acapy    # AcaPy

# AcaPyクラスのインスタンス
# 最初に見つけたGigEカメラを使用
capture = acapy.AcaPy("GigE")

if capture.is_opened == False:
    # カメラがみつからなかったとき
    print("No Camera")
    sys.exit(0)

# 画像を1枚取得(取得した画像データ(frame)形式はOpenCVと同じ)
ret, frame = capture.snap()
# 画像表示
cv2.imshow("Image", frame)
cv2.waitKey()

# 解放
capture.release()
cv2.destroyAllWindows()

◆ GigEカメラを使用するためのAcaPyクラスのインスタンス方法

AcaPyでGigEカメラを使用するには、"GigE"の文字列を指定して、AcaPyクラスをインスタンスします。

capture = acapy.AcaPy("GigE")

複数台のGigEカメラを使用する場合は、"GigE"の文字列の次にIndex番号(1, 2, 3・・・)を指定します。

capture1 = acapy.AcaPy("GigE", 1)
capture2 = acapy.AcaPy("GigE", 2)

Index番号を指定する方法は、プログラムの起動後、毎回、同じカメラを使用するとは限りません。
使用するカメラを固定する場合は、IPアドレスの文字列を指定してインスタンスします。

capture = acapy.AcaPy('169.254.7.40')

事前に接続されているカメラ一覧のリストを取得し、リストのアイテムを指定して、インスタンスすることも可能です。

# GigEカメラ一覧の取得
cameras = acapy.AcaPy.get_camera_list()
print(cameras) 
# [('169.254.7.40', 1, 'ABA-001IR-GE', 1234568790), ('169.254.7.41', 2, 'ABA-001IR-GE', 1234568791)]

# AcaPyクラスのインスタンス capture = acapy.AcaPy(cameras[0]) # GigEカメラを見つけた最初のカメラ

get_camera_list()メソッドで取得されるリストは、
 (GigEカメラのIPアドレス、Ch番号、カメラ名、カメラのシリアル番号)
のタプルのリストです。

GigEカメラを指定してAcaPyクラスをインスタンスした場合、AcaPyクラスのwidth, height, camera_bit の各プロパティの値は、カメラより取得します。

◆ カメラ接続確認

AcaPyクラスのインスタンス後、is_openedプロパティを参照し、カメラが認識されたか確認を行います。
is_openedプロパティの値が True のとき、カメラは認識しています。

if capture.is_opened == False:
    # カメラがみつからなかったとき
    print("No Camera")
    sys.exit(0)

PCの起動直後や、カメラの電源投入直後は、カメラが認識されない場合がありますので、ご注意ください。

◆ カメラ画像の取得

カメラ画像を1枚取得するには、snap()メソッドを用います。

ret, frame = capture.snap()

取得した画像(frame)は、OpenCVと同じnumpyのndarray形式となります。

画像を連続的に撮影する場合は、grab()メソッドを用いますが、詳細は下記のページを参照ください。

連続画像取込(Grab)サンプルプログラム

◆ 解放

使用が終わったAcaPyクラスオブジェクト(capture)は、release()メソッドにより、解放処理を行います。

capture.release()

この内容は参考になりましたか?
ご回答いただきまして、ありがとうございます。
今後の参考にさせていただきます。
ご意見・ご感想、ありがとうございます。

関連するご質問

Now Loading...

Now Loading...