[Google Cloud Vision] python 3.5 でリクエストした時のエラー対処 (is not JSON serializable)

以前こちら↓の記事でGoogle Cloud Visionの記事を紹介したのですが、掲載したコードはpython2.7での挙動を確認したものでした。

今回ちょっとした用でpython3.5で動かしてみたところエラーがでて動かなくなっていのでそこんところをちょっとメモしときます。

凄すぎ!Google Cloud Vision APIをつかって簡単高精度にOCR

 

まず、どういったエラーが出たかというと

Cloud VisionにPOST リクエストを行うためのリクエストデータをこんな感じで書いていたのですが、

 

<br />
bin_captcha = open(str_image_path, 'rb').read()</p>
<p>        str_encode_file = base64.b64encode(bin_captcha)</p>
<p>        str_url = &quot;https://vision.googleapis.com/v1/images:annotate?key=&quot;</p>
<p>        str_api_key = &quot;your key&quot;</p>
<p>        str_headers = {'Content-Type': 'application/json'}</p>
<p>        str_json_data = {<br />
            'requests': [<br />
                {<br />
                    'image': {<br />
                        'content': str_encode_file<br />
                    },<br />
                    'features': [<br />
                        {<br />
                            'type': &quot;TEXT_DETECTION&quot;,<br />
                            # 'maxResults': 10<br />
                        }<br />
                    ]<br />
                }<br />
            ]<br />
        }<br />

このリクエストで実行してみると
“image”のcontentに指定したbase64エンコードされた画像データがシリアライズできない!と言われました。

なんでだろうと思って、いろいろ見たところバグやらなんやらあるみたいで、いろいろ調べてみると
こちらに、解決策が提示されていました。

 

 

ありがたい!!

つまり、何をすればいいかというと、

JSON Serializeのバージョン依存の問題があったみたいなので、それをくぐれるようにcontentの画像データ形式をカスタマイズしてあげます。

こんな感じ↓

これで実行してみるとうまくいきましたー。