camera module¶
- class camera.Camera¶
Bases:
object
カメラ撮影を行うためのクラス
- 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も試したがうまく動作せず)