Flask: 画像を処理するAPIの雛形

プログラミング
スポンサーリンク




こんにちは、おみです。

機械学習を活用したWebアプリケーションを作成する際、画像を処理するAPIが必要になることが多々あります。

今回は、その際に使用できるAPIの雛形について、解説していきたいと思います。

 

スポンサーリンク

ソースコード

# -----------------------------------------------
# 必要なモジュールをインポート
# -----------------------------------------------
from flask import Flask, request, session, g, redirect, url_for, \
    abort, render_template, flash
import cv2
import numpy as np

# -----------------------------------------------
# メソッドを定義
# -----------------------------------------------
# インスタンスの生成
app = Flask(__name__)

# 起動
if __name__ == "__main__":
    app.run(debug=True)


# APIルート: URL = http://127.0.0.1:5000/
@app.route('/', methods=['GET', 'POST'])
def main_page():
    if request.method == 'POST':
        img_byte = np.frombuffer(request.data, np.uint8)
        img = cv2.imdecode(img_byte, flags=cv2.IMREAD_COLOR)
        result_str = execute(img)
        return result_str
    else:
        return "getでのアクセスは許可されていません。"


def execute(img):
    # 画像に対する処理

 

解説

Flask自体の解説は行いません。

 

画像の取得方法

画像は、requestのbody(data)に、octet-stream形式で格納しておき、

①. 画像のバイト列を取得

②. ①で取得したものをデコード

の手順で取得します。

# ①
img_byte = np.frombuffer(request.data, np.uint8)

# ②
img = cv2.imdecode(img_byte, flags=cv2.IMREAD_COLOR)

 

画像の処理

取得した画像を関数で処理し、結果をreturnします。

result_str = judge_tile(img)
return result_str

 

アクセスの制限

画像の送信はPOSTで行われるので、GETは許可する必要がありません。不要なアクセスは禁止しておきましょう。

if request.method == 'POST':
    
    ...

else:
    return "getでのアクセスは許可されていません"

 

 

 

コメント

タイトルとURLをコピーしました