camera module

class camera.Camera

Bases: object

カメラ撮影を行うためのクラス

save_images()

デバイスに応じたカメラ撮影を行うメソッド.ポート番号,PinodeのデバイスID,時刻をファイル名としてSPRESENSEとUSBカメラで撮影した画像を保存する

devices

(port,identify,name)

port

USB接続している機器のポート番号

Type:

int

identify

ポート番号に対するデバイス名(SPRESENSE or USB Camera)

Type:

str

name

(SPRESENSEの場合)接続ポート番号ごとのデバイスファイルパス (str): (USB Cameraの場合)デバイスID

Type:

int

class camera.SPRESENSE(port_num)

Bases: object

SPRESENSEに関する設定値,メソッドをまとめたクラス

Parameters:

port_num (str) -- 接続ポート番号ごとのデバイスファイルパス

Notes

BAUD_RATE(int): SPRESENSE Main Boardとの通信のためのボーレート

BUFF_SIZE(int): 一回の通信で送られてくるメインデータのデータサイズ(パケットサイズ)

TYPE_INFO(int): SPRESENSEから送られてきたパケットのタイプ(情報データ)

TYPE_IMAGE(int): SPRESENSEから送られてきたパケットのタイプ(画像データ)

TYPE_FINISH(int): SPRESENSEから送られてきたパケットのタイプ(送信終了データ)

TYPE_ERROR(int): SPRESENSEから送られてきたパケットのタイプ(エラーデータ)

BAUD_RATE = 115200
BUFF_SIZE = 100
TYPE_ERROR = 3
TYPE_FINISH = 2
TYPE_IMAGE = 1
TYPE_INFO = 0
_check_packet(data)

パケットデータのサイズが正しいかどうかの確認を行う

Parameters:

data (bytearray) -- 受信した1パケット分のバイナリデータ

Returns:
  • True (bool) -- データの取得が成功

  • False (bool) -- データの取得に失敗

_get_image_data(ser)

SPRESENSEから画像データを受け取り,バイナリの画像データを作成する.通信時間が50秒を超えた場合タイムアウト

Parameters:

ser (serial.Serial) -- 接続しているシリアル

Returns:

img (bytearray) -- すべての画像データ

img

送信されたバイナリ画像データ. size = 最大index値 * BUFF_SIZE(100)

Type:

bytearray

resend_index_list

再送してほしいインデックスのリスト

Type:

list[int]

finish_flag

データ受信完了時にSPRESENSEに終了信号を送信するために使用

Type:

list[bool]

send_flg

正常に受信できたかを管理するリスト,すべてFalseとして初期化され,正常受信でTrueに変更

Type:

list[bool]

Notes

各信号とその信号を受け取った際の実施事項

TYPE_INFO: 画像が撮影時に一番最初に送られる信号

この信号を受け取った後,以下の要素を初期化: img,max_index,sendflg

TYPE_IMAGE: データが画像であった場合に送られる信号

正常な受信が行われたため,imgにデータを追加し,send_flgを書き換える

TYPE_FINISH: 最後の画像データの場合に送られる信号

正常な受信が行われたため,imgにデータを追加し,finish_flgを書き換える

TYPE_ERROR: データ受信に問題があった場合に送られる信号

finish_flagがTrueの場合: send_flagがFalseであるもの,resend_index_listに含まれているものに対して再送命令. すべてのデータが完全に送られるまでWhile分のループを実行

_get_packet(ser)

Function 接続しているシリアルポートから1パケット分データの受信を行う

Parameters:

ser (serial.Serial)

Returns:

[decoded[0],index,decoded[5 -- ]] :list (int,int,bytearray)

index

decodedは最初の4桁がインデックス番号.4桁の数値をint型に変換し画像インデックスとして使用

Type:

int

decoded[]

SPRESENSEから送られてきたパケットのタイプ(画像データ)

Type:

int

decoded[5

](bytearray): 画像データ本体

Notes

1バイトずつシリアル通信で画像を取得しパケット終了文字x00が来るまでデータを受け取る. その後,cobs.decodeで終了文字列を画像に対応するものに戻す

[参考]シリアル通信で受け取る正常な画像データは以下のような構造を持つ

decoded[0]:TYPE_IMAGE(int: 1)

decoded[1]:index 4桁目

decoded[2]:index 3桁目

decoded[3]:index 2桁目

decoded[4]:index 1桁目

decoded[5]:画像データ内容1

decoded[6]:画像データ内容2

...

decoded[X]:画像データ内容X

_reboot()

Function USB機器の電源供給を一度切り再び入れる

_send_complete_image(ser)

画像データをすべて受信したことを伝えるパケットをSPRESENSEに送信する

Parameters:

ser (serial.Serial) -- 接続しているシリアル

Notes

SPRESENSEの待機状態を解除

_send_request_image(ser)

画像の送信を要求するパケットをSPRESENSEに送信する

Parameters:

ser (serial.Serial) -- 接続しているシリアル

Notes

”S” がSPRESENSEに送信されると画像撮影が行われる

_send_request_resend(ser, index)

画像の再送を要求するパケットをSPRESENSEに送信する

Parameters:
  • ser (serial.Serial) -- 接続しているシリアル

  • index (int) -- 再送するインデックス番号

Notes

"R"+index番号をSPRESENSEに送信するとインデックス番号に対応するデータを再送してくれる

save(file_name)

SPRESENSEから受け取ったバイナリ画像を保存する

Parameters:

file_name (str) -- 保存するファイル名

Returns:
  • True (bool) -- データ保存が正常に終了

  • False (bool) -- データ保存に失敗

Notes

・3回実行を行いエラーが発生した場合は終了する

・シリアル通信の接続に時間がかかるため2秒間sleep

・エラーが発生した場合再起動

class camera.UsbCamera(device_name)

Bases: object

USBカメラで撮影した写真保存のためのクラス

Parameters:

device_name (int) -- デバイスID(カメラインデックス)

save(file_name)

USBカメラで撮影した写真の保存. 20秒のタイムアウト設定

Parameters:

filename (str) -- 保存ファイル名

Returns:
  • True (bool)

  • False (bool)

Notes

カメラ読み込みを50回実行

(理由)撮影が始まってすぐの段階ではカメラ補正がうまく働かず適切な写真を取得できない. 回数を繰り返すことで適切な画像取得が可能. (Timeoutも試したがうまく動作せず)