pyボールドテキスト### 前提・実現したいこと
Google apiを用いたpythonのプログラムで、認識した数字を変数に変え、それを別の答えに計算したい。
発生している問題・エラーメッセージ
画像を、数字認識させるとこまではできたが、その検出された数字を変数や、そこから別の数をかけたりして別の数字に変えることができない。
該当のソースコード
#!/usr/bin/python
#coding:utf-8
import base64
import json
import cv2
from requests import Request, Session
from bs4 import BeautifulSoup
if __name__ == '__main__':
im = cv2.imread('/Users/yamamotoyuuki/Desktop/python/ aiu.png',0)
dat = im[200]
path = "/Users/yamamotoyuuki/Desktop/python/ aiu.png"
def recognize_captcha(str_image_path):
bin_captcha = open(str_image_path, 'rb').read()
#str_encode_file = base64.b64encode(bin_captcha)
str_encode_file = base64.b64encode(bin_captcha).decode("utf-8")
str_url = "https://vision.googleapis.com/v1/images:annotate?key="
str_api_key = "ここは鍵です"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
'requests': [
{
'image': {
'content': str_encode_file
},
'features': [
{
'type': "TEXT_DETECTION",
'maxResults': 10
}
]
}
]
}
print("begin request")
obj_session = Session()
obj_request = Request("POST",
str_url + str_api_key,
data=json.dumps(str_json_data),
headers=str_headers
)
obj_prepped = obj_session.prepare_request(obj_request)
obj_response = obj_session.send(obj_prepped,
verify=True,
timeout=60
)
print("end request")
if obj_response.status_code == 200:
#print (obj_response.text)
with open('data.json', 'w') as outfile:
json.dump(obj_response.text, outfile)
return obj_response.text
else:
return "error"
if __name__ == '__main__':
data = json.loads(recognize_captcha(path))
data = data["responses"]
print(data)
for i in data:
print(i["fullTextAnnotation"]["text"])
試したこと
下から3行目をprint(int(data) * 2)にしてみましたがだめでした
数字認識のやり方をかえるべきなんでしょうか。。
補足情報(FW/ツールのバージョンなど)
プログラミング始めて1ヶ月もたってない学生で、この質問サイトも始めて使うのでよくわかってません。失礼があれば言ってください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
ストリング型?になっていたからできなかったらしいですint型に変えたらいけました。解決はしましたがいまいち理解できてません。回答してくれた方々ありがとうございました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
y_waiwai
2019/06/24 23:11
あなたの書いたソースコードを、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
runo101
2019/06/25 08:17
わかりました!すみません!
tukatter
2019/07/08 14:55
ここの記述のところでprintの内容は意図した数字の値が取得できたのでしょうか?
ソースコードの実行結果でどこかエラーなどになりましたか?
for i in data:
print(i["fullTextAnnotation"]["text"])
print(int(i["fullTextAnnotation"]["text"]) * 2) #これで計算できましたか?
どこまで出来ていてどこで躓いているかどのようにしたときに
エラーになったかが分かると答えやすいかもしれないですね。
とりあえず、 dataの変数の中身とforで回したときのiの中身がそれぞれ分かると
やりたいことがうまくいくかもしれませんね。
runo101
2019/07/10 00:46
勉強会にいって解決しました!説明悪くてすみませんでした!次からはもう少しちゃんと説明いれます!失礼しました。