File size: 1,699 Bytes
69fcd61
1f09115
 
 
69fcd61
 
1f09115
 
 
69fcd61
 
1f09115
69fcd61
 
1f09115
 
 
 
 
69fcd61
 
 
 
1f09115
 
 
 
69fcd61
 
1f09115
69fcd61
 
1f09115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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()