質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Q&A

解決済

2回答

3959閲覧

シリアル通信にてPC-ラズパイ間の画像転送に伴うバイト文字列の取り扱い方について

suhsuu

総合スコア15

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

0グッド

1クリップ

投稿2018/08/27 12:17

前提・実現したいこと

ラズパイとPCをシリアル通信で結び、
Python3にて画像をラズパイからPCに転送することを試みていますが、
以下のようなエラーが発生しています。

発生している問題・エラーメッセージ

File "C:~\bytes_receive_1.py", line 16, in bytes_receive img_bytes = "".join(img_bytes_list) #リスト → 文字列 TypeError: sequence item 0: expected str instance, bytes found

該当のソースコード

Python3 PC側 server_main_0_1.py # -*- coding: utf-8 -*- from bytes_receive_1 import bytes_receive from bytes_convert_img_0_2 import convert_img img_bytes = bytes_receive() img = convert_img(img_bytes) img.save('./images/decoded_img.jpg', quality=75) bytes_receive_1.py # -*- coding: utf-8 -*- import serial def bytes_receive(): ser = serial.Serial( port = "COM6", baudrate=115200, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, timeout = 5 ) img_bytes_list = ser.readlines() print(img_bytes_list) img_bytes = "".join(img_bytes_list) #リスト → 文字列 print(img_bytes) ser.close() print("End") return img_bytes ラズパイ側 client_main_1.py # -*- coding: utf-8 -*- from img_convert_string_1_1 import convert_string from string_transfer_0 import transfer_to_pc img_gray = "../images/smile_img.jpg" img_string = convert_string(img_gray) transfer_to_pc(img_string) img_convert_string_1_1.py # -*- coding: utf-8 -*- #import numpy as np from PIL import Image def convert_string(img_gray = "../images/smile_img.jpg"): #img = np.array(Image.open(img_gray)) #画像をndarray化 img = Image.open(img_gray) (width, height) = img.size print((width, height) ) #img_string = img.tobytes() + b"\n" img_string = img.tobytes() #バイト配列へ変換 return img_string string_transfer_0.py # -*- coding: utf-8 -*- import serial def transfer_to_pc(string): port = serial.Serial( port = "/dev/ttyS0", baudrate=115200, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, timeout = 3.0 ) port.write(string) port.close()

試したこと

PC側にてserver_main_0_1.pyを
ラズパイ側にてclient_main_1.pyを実行させる。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tachikoma

2018/08/27 13:06

"".join(..)をb"".join(..)にすればいいかも。
suhsuu

2018/08/28 11:10

tachikomaさんのアドバイスの通りにするとうまく行きました。ありがとうございます。大感謝!
guest

回答2

0

自己解決

tachikomaさんのアドバイスの通りにするとうまく行きました。
具体的には、
PC側 bytes_receive_1.py 中にて以下のように変更しました。

img_bytes = "".join(img_bytes_list) #リスト → 文字列


img_bytes = b"".join(img_bytes_list) #リスト → 文字列

投稿2018/08/28 11:24

suhsuu

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

img_string = img.tobytes() #バイト配列へ変換

バイト文字列、ではなく、バイト列では?

投稿2018/08/27 12:31

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suhsuu

2018/08/27 12:41

すみません。バイト文字列とバイト列の区別ができておりません。 シリアル通信にて画像を転送する際、画像をどちらに変換させた方が都合よいでしょうか?
y_waiwai

2018/08/27 12:59

エラーメッセージはまさにその区別ついてないところを言ってますね どちらが都合がいいより前に、文字列を扱うことしかできないなら、素直に文字列に変換しましょう
y_waiwai

2018/08/28 11:28

バイナリで行くとなったら、文字列系の関数は使えない。 readline やjoin はダメダメ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問