3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで東芝テリーのカメラをつかってみた

Posted at

はじめに

Python初学者です。
仕事ではC#を使っているのですが、Pythonでプロダクトを作ってみたい!と下手の横好きで提案してみたところ実際に作ることに。

そうして、テスト用に東芝テリー製産業用カメラを使うことになったのでPythonでカメラが撮影した画像を扱える環境を作るための備忘録として記しました。

対象者

この記事は下記のような方を対象にしています

  • Python初学者
  • Windows上でPythonを利用してUSB接続の東芝テリー製カメラを扱いたい方

環境

  • Windows 10 Pro 21H2
  • Python 3.8.10
  • OpenCV 4.6.0.66
  • 東芝テリー BU2409M(USB3インターフェイス)

前提

  • Pythonの開発環境が構築済みであること

本題

デバイスドライバ導入

Windowsにデバイスドライバが導入されていない場合は、TeliCamSDKをダウンロードしインストールします。
東芝テリーのWebサイトの、サポート→ソフトウェアダウンロードと進みます(※要登録)

ソフトウェアダウンロードページへ辿り着くと、カメラSDK開発ツールTeliCamSDKとクリックするとダウンロードが始まります。

ダウンロードが完了したらSDKをインストールしてください。

Pythonの準備

pytelicamライブラリを上記ダウンロードページより予めダウンロードします。
Python用ライブラリWindows 64bit win_amd64とクリックしダウンロードします。

zipファイルがダウンロードできますので、ファイルを解凍するとwheel_filesというフォルダがあるので、
自分の環境に適合するファイルを自分の環境下にコピーしておきます。
※予めCameraTestEnvという仮想環境を作成済みです。

今回はこのためにPython3.8を導入したのでcp38のファイルを利用します。

teli4.PNG

コピーが済んだらPowerShellで

PowerShell
(CameraTestEnv) PS C:\github\CameraTestEnv> pip install .\pytelicam-1.0.1-cp38-cp38-win_amd64.whl

と入力でインストールできます

PowerShell
Processing c:\github\cameratestenv\pytelicam-1.0.1-cp38-cp38-win_amd64.whl
Installing collected packages: pytelicam
Successfully installed pytelicam-1.0.1

問題無ければSuccessfullyと返してきます。

余談:whlファイルの導入で躓いたときは

尚、Pythonの環境のバージョンと合っていないと以下のように怒られます。
こうなったら、現在導入されているPythonに適合するライブラリをチェックした上で
正しいバージョンのライブラリを探すか最悪Pythonのバージョンの変更を検討しなければなりません。
(実はここでハマりました。)

whlファイルの適合チェックはこちらのnoteに親切に書かれていました。

PowerShell
(CameraTestEnv) PS C:\github\CameraTestEnv> pip install .\pytelicam-1.0.1-cp37-cp37m-win_amd64.whl
ERROR: pytelicam-1.0.1-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.

ひとまず、環境の準備は完了です。

Pythonで画像を取り込んでみる

以下のようなコードで試してみました。

Python
import pytelicam #pytelicamのインポート
import cv2

cam_system = pytelicam.get_camera_system() #camera_systemオブジェクトを取得
cam_num = cam_system.get_num_of_cameras() #接続カメラ台数チェック
if  cam_num == 0: #接続台数が0台なら終了
    print("Camera not found")
    exit()
cam_device = cam_system.create_device_object() #camera_deviceオブジェクトを取得
cam_device.open() #カメラオープン
cam_device.cam_stream.open() #ストリームオープン
cam_device.cam_stream.start() #ストリーム開始
image_data = cam_device.cam_stream.get_next_image() #カメラのバッファに次に到着した画像をimage_dataに取得
np_arr = image_data.get_ndarray(pytelicam.OutputImageType.Bgr24) #画像をnumpy配列に
cv2.imshow("image", np_arr) #画像の表示
cv2.waitKey(0)
image_data.release() #image_dataオブジェクトの解放
cam_device.cam_stream.stop() #以下カメラの終了処理
cam_device.cam_stream.close()
cam_device.close()
cam_system.terminate()
exit()

何事もなく動いていればimageという名前のウィンドウに取り込み画像が表示されるはずです。

teli5.PNG

今回のテスト機は大きな画素数のカメラだったので途方もなく大きなウィンドウが表示されてきました。
テレセントリックレンズ装備な上にスマフォのカメラで適当に照明を当てたので露光オーバーで真っ白でした。

しかし、カメラが動いたのが確認できたので作業を進められそうです。

参考文献

whlファイルの導入でハマったとき参考にさせていただきました。

最後に

この先tkinterでUIを作りつつ連続的に取り込みと画像処理をできるアプリケーションを作成したいと思います。
なにかおかしなところがあればコメントお願いします!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?