沖縄も、最後の寒波襲来って感じですね。
ここ最近、プログラミング系の記事は、Flaskオンリーって
感じで書いてます。そして、「いい加減飽きたよ」と思われている方もいる
かと思います。しかし、アナリティクスで解析すると、結構読まれてるんだなぁと。
なので、今回もFlaskです。
あなたのパソコンに画像解析させてみましょう。
FlaskからAPIを利用する
前回は、簡単なWEBアプリを作成しました。⇒
今度はFlaskを使ってウェブアプリを作ってみよう
今回はAPIを利用してもう少し面白い物を作りたいと思った
りしています。
そこで利用するのがAzureです。
Azureとは
ざっくりいうとクラウド上で利用できる様々な機能の集まりです。
人工知能だったり、Windowsの仮想環境を構築したり、ネットワーク作成したり
色々なサービスを提供しています。
今回はAzureが提供している「Cognitive Services」の中から「Recognize Text API」を利用します。
このAPIを利用すると、画像に含まれている文字の「画像」を「テキスト」として取り出すことが
できます。
Azureの価格について
Azureは一定期間は無料で利用できます。
その後は利用状況に応じて課金がされますが、今回利用するCognitive ServicesのFreeプランは
現時点で1分間に20回、月5000回まで無料で利用することが可能です。
Azureへの登録
それではAPIを利用するためにまずはAzureに登録しましょう。
下記URLにアクセスします
https://azure.microsoft.com/ja-jp/
登録が完了するとダッシュボードに移動するので、「リソースの作成」を押します。
その後「computer vision」と検索すると下部に対象のサービス表示されるので
選択します。
ここまでの手順が完了するとページ右側に「作成」ボタンが表示されるので
クリックしてインスタンスを作成します。
作成ボタンを選択すると情報を入力する画面が表示されるので
必要な情報を入力していきます。
Name:サービスの名前(任意)
サブスクリプション:無料試用版
場所:西日本
Pricing:F0
Resource group:任意、なければ「新規作成」から追加
入力が完了したら作成を押して完了です。
作成が完了すると次の通知が現れるので、リソースに移動します。
リソースに移動したらサービスを利用す為のキーを作成します。
キーが作成されたら準備完了です。
キーは2つ作成されますが、どちらを利用してもOKです。
キャプチャでは黒く二律部していますが、数字と英字の文字列が表示されているはずです。
Flask組み込み前にRecognize Text APIを試す
それではFlaskに組み込む前に「Recognize Text API」を試してみましょう。
次のプログラムを実行します。
『<API>』キーと『<baseurl>』はインスタンス作成の時に表示された物を
入力する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import requests # APIキー subscription_key = "<APIキー>" assert subscription_key vision_base_url = "<baseurl>" ocr_url = vision_base_url + "ocr" # 対象画像 image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Atomist_quote_from_Democritus.png/338px-Atomist_quote_from_Democritus.png" headers = {'Ocp-Apim-Subscription-Key': subscription_key} params = {'language': 'unk', 'detectOrientation': 'true'} data = {'url': image_url} response = requests.post(ocr_url, headers=headers, params=params, json=data) response.raise_for_status() analysis = response.json() # データ整形 line_infos = [region["lines"] for region in analysis["regions"]] word_infos = [] for line in line_infos: for word_metadata in line: for word_info in word_metadata["words"]: word_infos.append(word_info) word_infos for word in word_infos: print(word["text"]) |
解析した画像はこれです。
実行結果
できてるっ、、、。
もう一ついってみましょう。
画像live japan様からお借りしています。
https://livejapan.com/ja/in-tokyo/in-pref-tokyo/in-asakusa/article-a0001507/
実行結果
シャツに書かれた文字も無事読み取れていることが確認できます。
この機能をWEBに詰め込む(Flaskに組み込んでいく)ということですね。
パラメータとしてはURLもしくは画像そのものがAPIに渡せればよいので
利用者にはフォームにURLを入力してもらい、flask側で引数として受け取れればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# API関数 def useApi(URL): # APIキー subscription_key = "<APIキー>" assert subscription_key vision_base_url = "<baseurl>" ocr_url = vision_base_url + "ocr" # 対象画像 image_url = URL headers = {'Ocp-Apim-Subscription-Key': subscription_key} params = {'language': 'unk', 'detectOrientation': 'true'} data = {'url': image_url} response = requests.post(ocr_url, headers=headers, params=params, json=data) response.raise_for_status() analysis = response.json() # データ整形 line_infos = [region["lines"] for region in analysis["regions"]] word_infos = [] for line in line_infos: for word_metadata in line: for word_info in word_metadata["words"]: word_infos.append(word_info) word_infos word_infos_Tmp = [] for word in word_infos: word_infos_Tmp.append(word["text"]) mojiretu = ' '.join(word_infos_Tmp) return mojiretu |
実行結果
こんな感じでAPIを利用することで、簡単なプログラミング でちょっとリッチな
WEBアプリケーションを作成することが可能です。
今回はFlaskと連携させるためにPythonからAPIを利用しましたが、
その他の言語(javascript,ruby,コマンドライン等)からも利用可能ですので、
自分の得意な言語でAPIを利用してみてください。
それでは、また。