Spaces:
Running
on
Zero
Running
on
Zero
firebase init
Browse files- app.py +48 -7
- firebase/image2body-demo-firebase-adminsdk-ope1k-e19e1da82c.json +13 -0
- requirements.txt +2 -1
app.py
CHANGED
@@ -1,4 +1,7 @@
|
|
1 |
import gradio as gr
|
|
|
|
|
|
|
2 |
import os
|
3 |
import io
|
4 |
from PIL import Image
|
@@ -12,15 +15,53 @@ initialize(_use_local=False, use_gpu=True, use_dotenv=False)
|
|
12 |
init_model(use_local=False)
|
13 |
load_wd14_tagger_model()
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
def process_image(input_image, mode, weight1, weight2):
|
16 |
-
#
|
17 |
sotai_image, sketch_image = process_image_as_base64(input_image, mode, weight1, weight2)
|
18 |
|
19 |
-
#
|
20 |
-
|
21 |
-
sketch_pil = Image.open(io.BytesIO(base64.b64decode(sketch_image)))
|
22 |
|
23 |
-
return
|
24 |
|
25 |
# Gradio インターフェースの定義
|
26 |
iface = gr.Interface(
|
@@ -32,8 +73,8 @@ iface = gr.Interface(
|
|
32 |
gr.Slider(0, 1, value=0.05, step=0.025, label="Weight 2 (Body)")
|
33 |
],
|
34 |
outputs=[
|
35 |
-
gr.
|
36 |
-
gr.
|
37 |
],
|
38 |
title="Image2Body API",
|
39 |
description="Upload an image and select processing options to generate body and sketch images."
|
|
|
1 |
import gradio as gr
|
2 |
+
import firebase_admin
|
3 |
+
from firebase_admin import credentials, storage
|
4 |
+
import tempfile
|
5 |
import os
|
6 |
import io
|
7 |
from PIL import Image
|
|
|
15 |
init_model(use_local=False)
|
16 |
load_wd14_tagger_model()
|
17 |
|
18 |
+
# Firebase の初期化
|
19 |
+
cred = credentials.Certificate("firebase/image2body-demo-firebase-adminsdk-ope1k-e19e1da82c.json")
|
20 |
+
firebase_admin.initialize_app(cred, {
|
21 |
+
'storageBucket': 'image2body-demo.appspot.com'
|
22 |
+
})
|
23 |
+
def save_image_pair_to_firebase(sotai_image_data, sketch_image_data):
|
24 |
+
# 一意の識別子を生成
|
25 |
+
unique_id = str(uuid.uuid4())
|
26 |
+
timestamp = int(time.time())
|
27 |
+
folder_name = f"image_pairs/{timestamp}_{unique_id}"
|
28 |
+
|
29 |
+
# Base64 データを PIL Image に変換
|
30 |
+
sotai_image = Image.open(io.BytesIO(base64.b64decode(sotai_image_data)))
|
31 |
+
sketch_image = Image.open(io.BytesIO(base64.b64decode(sketch_image_data)))
|
32 |
+
|
33 |
+
bucket = storage.bucket()
|
34 |
+
urls = {}
|
35 |
+
|
36 |
+
for image_type, image in [("sotai", sotai_image), ("sketch", sketch_image)]:
|
37 |
+
# 一時ファイルを作成
|
38 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as temp_file:
|
39 |
+
image.save(temp_file, format="PNG")
|
40 |
+
temp_file_path = temp_file.name
|
41 |
+
|
42 |
+
try:
|
43 |
+
# Firebase Storage にアップロード
|
44 |
+
blob_path = f'{folder_name}/{image_type}.png'
|
45 |
+
blob = bucket.blob(blob_path)
|
46 |
+
blob.upload_from_filename(temp_file_path)
|
47 |
+
|
48 |
+
# URLを取得
|
49 |
+
blob.make_public()
|
50 |
+
urls[image_type] = blob.public_url
|
51 |
+
finally:
|
52 |
+
# 一時ファイルを削除
|
53 |
+
os.unlink(temp_file_path)
|
54 |
+
|
55 |
+
return urls
|
56 |
+
|
57 |
def process_image(input_image, mode, weight1, weight2):
|
58 |
+
# 既存の画像処理ロジック
|
59 |
sotai_image, sketch_image = process_image_as_base64(input_image, mode, weight1, weight2)
|
60 |
|
61 |
+
# Firebase に画像ペアを保存し、URLを取得
|
62 |
+
urls = save_image_pair_to_firebase(sotai_image, sketch_image)
|
|
|
63 |
|
64 |
+
return urls['sotai'], urls['sketch']
|
65 |
|
66 |
# Gradio インターフェースの定義
|
67 |
iface = gr.Interface(
|
|
|
73 |
gr.Slider(0, 1, value=0.05, step=0.025, label="Weight 2 (Body)")
|
74 |
],
|
75 |
outputs=[
|
76 |
+
gr.Text(label="Sotai Image URL"),
|
77 |
+
gr.Text(label="Sketch Image URL")
|
78 |
],
|
79 |
title="Image2Body API",
|
80 |
description="Upload an image and select processing options to generate body and sketch images."
|
firebase/image2body-demo-firebase-adminsdk-ope1k-e19e1da82c.json
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"type": "service_account",
|
3 |
+
"project_id": "image2body-demo",
|
4 |
+
"private_key_id": "e19e1da82c39206ae07a42271eb6e9a067b501b6",
|
5 |
+
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDp/N0pO3GUp5/k\nKvzNRBrmN8EgPwqDT+SeQYWn8po+xmtWUcrLlUH1ZgRTaJvkdgxxSsGfoOSj1mjw\nVSYudfT7763PTznqHWi7ShHvLwriuoEaJkwN4yhLyayTR42AQelPJUkl0FvE/DO7\neVjYtbReXH5+lSFjTYK7/Z0mS1D5Bc3ubEUDjJb0/ySc+i4Q/hmy+RiwDwkpTDPu\nufMUgcGHvv1ApMiwqXQMv2OuBigW1XS+IpNhwmTP5c7DlwnFm8qaVnwQcaj9NbPW\nNP2wrEjkzo2piY33GZ+dTV7wwAdJLjY30dKcEdkrcRU0dhDOZ++hwhGB4hecGnlR\nHbrS58AbAgMBAAECggEARC8g3WaKkwiDsdALCd+6PPLrTrPAIwKxeqJaSdYKt5dH\naQh9oXSVm2aGhS27G8iAmLTxlkwixFFzE/GkJi7OXGn8CqiqFjxKrCUJ89qQAADc\nJRwa1oMm12rl5KcZp1HNpHgXiDLewxjBFHTofIH6lPK8E7PuXksUeSaO2D1jU6Uc\nOLJJuHHkZ52Fn34N3XjUwPJ6dOLVyImUY1IBJ7cdwRuvfohmcinAlvEqtnqA7hOa\n0QZdTcFpkIHq0yahqMYulpLCG6B8hNaRcHeET+Kl14cSn5Y5ifmGKe8haucGN/Zb\nwA1RO/RaRbbYF93nL3KENpegtb0rMej2Acvl7q0nzQKBgQD1UbxgZaDrUPEIZZDs\nCmK8GLDDqUuVpVxPUi0aMoI0zE7Li1p9OFWSySvqeAmJnMRRGrbN46WfdbkRYIlD\no6+Gd5E0SJAsDwZqyx7Apg2Jrx7AdSXAdyZn83F3R6yi+L63zcr3ND6KDUXMCtwa\no7ISgdlR1RxG1K/9FXisSosdpwKBgQD0LNRt34k6GDWjWCS/VZzbdR7+I0Bt9D0K\nCFqSjRMYL9+93DFQqCkN+ueZvGUQhJUm7XJ0wpF7qO97TnwNR784iYO28UKtofvA\n0Mog31YTb+Dm1SnbvxzzpBPaLLgkommBc5qKqgtg8gniJJ8ddWZYAYCWsPMxJwSA\nf74uYbbgbQKBgQDZJOJTiWGpKVpRDmX7KS5ARLKiXoYzDc3pwFl/6NlsFrRgYxdT\n47uLVFp1Do+SqZr0F2tcT3bY8QFBqmuV3ZuOsONsnhZPiXUqrmSoLdOp3cKgpJEo\nDc+HD+uNo3niP7/BPn271xjMZfc0JyCwy9jhnOJaFwMSh0zH/mt0Rf9h3QKBgQC5\nMU8kzkfcQgRckTu9yocfg6MwCTiSrI2nEFLxmAIFdDn0XA8jJ4eLzOLfnR3h+0zM\nq4cFu5Rv/98y3IIF6IbFsLaviCiUXKj+wtyrNfio4U/og4At5LNmrulHrmczkeMH\nhdCOnw3mR2zrke8EfshSs0D+CdNJUlh9xWVO9FmpuQKBgAqCGUXvTKKrSTmQS3Cv\nwvndgkBrl21zeOkIpDKFdHhMYgVFSF5CS3FIoSnbZrakHrEDYItG+UjVepH9kvmn\nk4KPZJ4CzO3qwnKIdc28kSfT1tK3GDC3aufh9ucWuGSfHO7j6D7yM73Lb/FsRpju\nA8nojFAbWcfdKpCjh1xiRDTF\n-----END PRIVATE KEY-----\n",
|
6 |
+
"client_email": "firebase-adminsdk-ope1k@image2body-demo.iam.gserviceaccount.com",
|
7 |
+
"client_id": "105880637239614588319",
|
8 |
+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
9 |
+
"token_uri": "https://oauth2.googleapis.com/token",
|
10 |
+
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
11 |
+
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ope1k%40image2body-demo.iam.gserviceaccount.com",
|
12 |
+
"universe_domain": "googleapis.com"
|
13 |
+
}
|
requirements.txt
CHANGED
@@ -22,4 +22,5 @@ python-dotenv
|
|
22 |
peft==0.11.1
|
23 |
flask_limiter==3.7.0
|
24 |
gevent==24.2.1
|
25 |
-
gevent-websocket==0.10.1
|
|
|
|
22 |
peft==0.11.1
|
23 |
flask_limiter==3.7.0
|
24 |
gevent==24.2.1
|
25 |
+
gevent-websocket==0.10.1
|
26 |
+
firebase-admin
|