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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

356閲覧

Google apiののことについて質問です

runo101

総合スコア18

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/06/24 14:09

編集2019/06/24 23:25

pyボールドテキスト### 前提・実現したいこと

Google apiを用いたpythonのプログラムで、認識した数字を変数に変え、それを別の答えに計算したい。

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

画像を、数字認識させるとこまではできたが、その検出された数字を変数や、そこから別の数をかけたりして別の数字に変えることができない。

該当のソースコード

python

1#!/usr/bin/python 2#coding:utf-8 3import base64 4import json 5import cv2 6from requests import Request, Session 7from bs4 import BeautifulSoup 8 9if __name__ == '__main__': 10 11 im = cv2.imread('/Users/yamamotoyuuki/Desktop/python/ aiu.png',0) 12 13 dat = im[200] 14 15 16 17path = "/Users/yamamotoyuuki/Desktop/python/ aiu.png" 18 19def recognize_captcha(str_image_path): 20 bin_captcha = open(str_image_path, 'rb').read() 21 22 #str_encode_file = base64.b64encode(bin_captcha) 23 str_encode_file = base64.b64encode(bin_captcha).decode("utf-8") 24 25 26 str_url = "https://vision.googleapis.com/v1/images:annotate?key=" 27 28 str_api_key = "ここは鍵です" 29 30 str_headers = {'Content-Type': 'application/json'} 31 32 str_json_data = { 33 'requests': [ 34 { 35 'image': { 36 'content': str_encode_file 37 }, 38 'features': [ 39 { 40 'type': "TEXT_DETECTION", 41 'maxResults': 10 42 } 43 ] 44 } 45 ] 46 } 47 48 print("begin request") 49 obj_session = Session() 50 obj_request = Request("POST", 51 str_url + str_api_key, 52 data=json.dumps(str_json_data), 53 headers=str_headers 54 ) 55 obj_prepped = obj_session.prepare_request(obj_request) 56 obj_response = obj_session.send(obj_prepped, 57 verify=True, 58 timeout=60 59 ) 60 print("end request") 61 62 if obj_response.status_code == 200: 63 #print (obj_response.text) 64 with open('data.json', 'w') as outfile: 65 json.dump(obj_response.text, outfile) 66 return obj_response.text 67 else: 68 return "error" 69 70if __name__ == '__main__': 71 data = json.loads(recognize_captcha(path)) 72 data = data["responses"] 73 print(data) 74 for i in data: 75 print(i["fullTextAnnotation"]["text"]) 76

試したこと

下から3行目をprint(int(data) * 2)にしてみましたがだめでした
数字認識のやり方をかえるべきなんでしょうか。。

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

プログラミング始めて1ヶ月もたってない学生で、この質問サイトも始めて使うのでよくわかってません。失礼があれば言ってください。

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

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

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

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

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

y_waiwai

2019/06/24 14:11

あなたの書いたソースコードを、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
runo101

2019/06/24 23:17

わかりました!すみません!
tukatter

2019/07/08 05:55

ここの記述のところでprintの内容は意図した数字の値が取得できたのでしょうか? ソースコードの実行結果でどこかエラーなどになりましたか? for i in data: print(i["fullTextAnnotation"]["text"]) print(int(i["fullTextAnnotation"]["text"]) * 2) #これで計算できましたか? どこまで出来ていてどこで躓いているかどのようにしたときに エラーになったかが分かると答えやすいかもしれないですね。 とりあえず、 dataの変数の中身とforで回したときのiの中身がそれぞれ分かると やりたいことがうまくいくかもしれませんね。
runo101

2019/07/09 15:46

勉強会にいって解決しました!説明悪くてすみませんでした!次からはもう少しちゃんと説明いれます!失礼しました。
guest

回答1

0

自己解決

ストリング型?になっていたからできなかったらしいですint型に変えたらいけました。解決はしましたがいまいち理解できてません。回答してくれた方々ありがとうございました。

投稿2019/07/09 15:48

runo101

総合スコア18

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

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

tukatter

2019/07/10 00:08

type(data)とかで出力してみると 変数の型が分かります。 dataは配列型arrayじゃないのかな? ※順番に値を取り出してからでないと計算できない型 それが仮に文字列だった場合文字列と足し算をしようとしたとき  ”5”+1としようとして 本来6の結果が欲しいのに 51 となってしまう場合があります。 言語によってはこういった意図した動作をしないケースもあります。 ※pythonの場合は想定外の操作をさせないようにするため  数値とはtypeが異なるもので計算するとエラーになると思います。 数値と数値の演算は可能ですが、数値と文字列(String)の演算はできません。 TypeError: unsupported operand type(s) for +: 'int' and 'str' こんな感じのエラーかな?  上手くいかない場合どのようなエラーになったか エラーの文字をコピーして検索してみると対処方法を書いている人もいます。 ex.) num1 = 10 //数値 num2 = '20' //シングルクォート’’もしくはダブルクォート””で囲むと文字になります 変数を int(変数) という形にすると文字→数値に変換することができるので print(num1 + int(num2)) これで計算できるわけです。 プログラムをコーディングしていると処理が正常に終了すると思っていた値が返ってくると思い込みがちで後から確認とか指摘があったときに不具合だと発覚することもよくあります。 そういった失敗を避けるため 意図しない結果が返ってこないように この言語の場合、型が異なる計算をしようとするとエラーとするようにしています。 分かりやすいものとしての例なら 5/0 5をゼロで割る計算をすると ゼロ除算エラー というメッセージが返ってきます。処理としておかしいので処理させないため中断させます。 処理を中断したくない場合、例外処理(エラーがあっても中断しない)やwarning(警告)という形で結果を返すものもあります。 ※正しい処理が出来なかったので後で見直してねってことで終わる。 python try-except文 例外処理 というキーワードで探すと説明文があると思います。 長々と説明下手ですみません。 どのようにすると何が出来てどのような結果が返ってきたのかが書かれていると アドバイスしやすいですね。 全てを理解する必要はありませんが1つづつ理解を深めていけるといいですね。 がんばってください。
runo101

2019/07/13 14:42

有難うございます。エラー時の対処法などわかりやすかったです。これからアドバイスを挙げられる立場になるくらい努力します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問