技術雑記帳兼日記帳

AWS、Python、Terraformの使い方をコッソリ

python 画像のアップロードとグレー変換

はじめに

POSTメソッドで画像ファイルをグレーに変換するプログラムを書いてみた。

準備

クライアントで画像をbese64に変換してJSONで転送する。
サーバは画像データを取り出して、一時保存してからグレーに変換してbese64でそのまま返すようにした。

  • imageClient.py
import requests, base64

fileName = '85898497.jpg'
headers = {"content-type": "application/json"}
f = open(fileName, 'rb')
b64 = base64.b64encode(f.read())
payload = {'image': b64.decode()}
r = requests.post('http://Server IP Address/image/', json = payload, headers = headers)

imageByte = base64.b64decode(r.text)
w = open('clinetImage.jpg', 'wb')
w.write(imageByte)
  • imageServer.py
from flask import Flask, request, json
import base64
import cv2
app = Flask(__name__)

@app.route('/image/', methods=['POST'])
def trans():
    data = request.data.decode('utf-8')
    data = json.loads(data)

    imageByte = base64.b64decode(data['image'])
    w = open('imageFile.jpg', 'wb')
    w.write(imageByte)

    imgBgr = cv2.imread('imageFile.jpg')
    imgGray = cv2.cvtColor(imgBgr, cv2.COLOR_BGR2GRAY) 
    cv2.imwrite('imageFileGray.jpg', imgGray)

    r = open('imageFileGray.jpg', 'rb')

    return base64.b64encode(r.read())

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

実行

プログラムの実行結果
■変換前画像 f:id:halhalhal1:20210410143208j:plain


■変換後画像 f:id:halhalhal1:20210410143223j:plain

cv2.imreadが変換したバイト配列をそのまま読んでくれればスタイリッシュになりそう。
「cv2.COLOR_BGR2GRAY」を変更すればもっといろいろ変換できそう。


まとめ

画像は拾いもので他意は無いです。