🐶
バイナリデータをjson.dumpsする【python】
概要
opencvで取得した画像情報をバイナリにし、dictに入れたあと、json.dumpsしようとしたらエラーが出た。jsonにはバイナリ型なんてないのでエラーが出た模様。Cloud Pub/Subにて、どうしてもjsonで受け渡ししたかったので、そのための備忘録。
※追記
現行自分は以下の処理は必要なくなりました。ただもしかすると必要なタイミングがあるかもしれないので、残します。
サンプル
以下のコードは動かしていませんが、変換の所は動作確認済みです。
import cv2
import base64
import json
image = cv2.imread("<file_name>") # 仮にjpegファイルを読み込んでいるものとします
_, image = cv2.imencode(".jepg", image)
image = image.tobytes() # ここでbytes型になる
image = base64.b64encode(image).decode() # base64でエンコード後utf-8でデコード
image_dict = {
"image": image
}
# ここでエラーが出て困ってた
image_dict = json.dumps(image_dict) # 確かここでstr型になる
# 今回はサンプルなので、すぐにdict型に戻します。
image_dict = json.load(image_dict)
image_bynary = base64.b64decode(image_dict["image"].encode()) # ここで画像データがbytes型に戻ります
おわりに
これが賢い方法かは分かりませんが、とりあえずスニペット的に残します。意外にバイナリで扱いたい場面が多いので、扱いに困りますね。
Discussion