URL2Image_Pub / app.py
yomo93's picture
Update app.py
69fcd61
Raw
History Blame Contribute Delete
1.7 kB
import gradio as gr
import requests
import tempfile
import os
import cv2
import numpy as np
def resize_img(img):
h_base, w_base = (315, 420) # 表示したい画像サイズ
h, w = img.shape[:2] # 読み込み画像サイズ
if h!=h_base and w!=w_base: # 画像サイズが違う画像はリサイズ
# 基本サイズが縦の方が小さいので縦に合わせるように倍率を縮小
out_img = cv2.resize(img, None, None, h_base/h, h_base/h)
r_w = out_img.shape[1] # リサイズ後の横幅
if r_w > w_base: # 横サイズが大きい場合はトリミング
out_img = out_img[:,int((r_w-w_base)/2):int((r_w+w_base)/2)]
elif r_w < w_base: # 横サイズが小さい場合は白で埋める
tmp = out_img
# 白で埋める
out_img = np.uint8(np.array([[[255]*3]*w_base]*h_base))
out_img[:,int((w_base-r_w)/2):int((w_base+r_w)/2)] = tmp
else: # 画像サイズが同じ場合はスルー
out_img = img
# RGBに変換
rgb_img = cv2.cvtColor(out_img, cv2.COLOR_BGR2RGB)
return rgb_img
def imread_web(url):
# 画像をリクエストする
res = requests.get(url)
img = None
# Tempfileを作成して即読み込む
fp = tempfile.NamedTemporaryFile(dir='./', delete=False)
fp.write(res.content)
fp.close()
img = cv2.imread(fp.name)
os.remove(fp.name)
return img
def url2img(url):
return resize_img(imread_web(url))
demo = gr.Interface(fn=url2img,
inputs='text',
outputs='image')
gr.Error("custom message")
demo.launch()