はじめに
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のファイルを利用します。
コピーが済んだらPowerShellで
(CameraTestEnv) PS C:\github\CameraTestEnv> pip install .\pytelicam-1.0.1-cp38-cp38-win_amd64.whl
と入力でインストールできます
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に親切に書かれていました。
(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で画像を取り込んでみる
以下のようなコードで試してみました。
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という名前のウィンドウに取り込み画像が表示されるはずです。
今回のテスト機は大きな画素数のカメラだったので途方もなく大きなウィンドウが表示されてきました。
テレセントリックレンズ装備な上にスマフォのカメラで適当に照明を当てたので露光オーバーで真っ白でした。
しかし、カメラが動いたのが確認できたので作業を進められそうです。
参考文献
whlファイルの導入でハマったとき参考にさせていただきました。
最後に
この先tkinterでUIを作りつつ連続的に取り込みと画像処理をできるアプリケーションを作成したいと思います。
なにかおかしなところがあればコメントお願いします!