Slicelayers commited on
Commit
ec6bace
·
verified ·
1 Parent(s): 5298106

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -10
app.py CHANGED
@@ -131,7 +131,7 @@ async def nano_banana_completion_api(base_image: Image.Image, prompt: str) -> Im
131
 
132
  # --- メイン処理ロジック (Main Processing Logic) ---
133
 
134
- async def segment_and_inpaint(original_image_np: np.ndarray, sketchpad_image_np: np.ndarray, inpaint_prompt: str):
135
  """
136
  アップロードされた一枚絵とブラシで描かれたマスクを受け取り、
137
  マスクされた領域を分割し、欠損部分をAI補完する関数。
@@ -139,13 +139,20 @@ async def segment_and_inpaint(original_image_np: np.ndarray, sketchpad_image_np:
139
  if original_image_np is None:
140
  return None, None, None, "エラー: 元の画像がアップロードされていません。", None
141
 
142
- # --- 修正箇所: sketchpad_image_np型チェックを強化 ---
143
- if not isinstance(sketchpad_image_np, np.ndarray):
144
- # Sketchpadが空場合、Noneでなく空のディクショナリなど返されることがあるめ、NumPy配でなければエラーとする
145
- return None, None, None, "エラー: 分割したいパーツをブラシで描画してください。描画キャンバスが空または不正な形式です。", None
 
 
 
 
 
 
 
 
146
 
147
  # PIL Image (元の画像) を取得
148
- # NOTE: Gradioのデフォルト出力はNumPy配列
149
  original_image = Image.fromarray(original_image_np).convert("RGBA")
150
 
151
  # Sketchpadからの入力は、元の画像の上にブラシで描画されたRGBA画像 (描画部分は不透明)
@@ -159,13 +166,13 @@ async def segment_and_inpaint(original_image_np: np.ndarray, sketchpad_image_np:
159
  # 配列の次元が4未満(RGBAではない)場合に発生
160
  return None, None, None, "エラー: 描画データ形式が不正です。ブラシで描画が行われていないか、Gradioの出力形式に問題があります。", None
161
  except Exception as e:
162
- # その他のスライスエラーなど(例えば、sketchpad_image_npがNumPy配列だが次元が異なる場合)
163
  print(f"Sketchpad処理中の予期せぬエラー: {e}")
164
  return None, None, None, "エラー: 描画データの処理中に予期せぬエラーが発生しました。ブラシで適切に描画されているか確認してください。", None
165
 
166
- # ユーザーが何も描画しなかった場合のチェック
167
  if np.all(sketch_mask_alpha == 0):
168
- return None, None, None, "エラー: 分割したいパーツをブラシで描画してください。", None
169
 
170
  # NumPy配列からPIL Imageのマスクに変換 (Lモード)
171
  hair_mask = Image.fromarray(sketch_mask_alpha, mode='L')
@@ -272,8 +279,8 @@ with gr.Blocks(theme=theme, title="Live2D素材自動分割・補完アプリ")
272
  input_sketchpad = gr.Sketchpad(
273
  label="② 分割したいパーツをブラシで塗る (例: 前髪)",
274
  height=400,
275
- # Sketchpadにアップロードされた元画像を表示させるためのプレースホルダー
276
  brush={"color": "#FF0000", "size": 20}, # ブラシ設定
 
277
  )
278
 
279
  # ★★★ 削除: エラーの原因となっているSketchpadの背景更新ロジックを削除 ★★★
 
131
 
132
  # --- メイン処理ロジック (Main Processing Logic) ---
133
 
134
+ async def segment_and_inpaint(original_image_np: np.ndarray, sketchpad_filepath: str, inpaint_prompt: str):
135
  """
136
  アップロードされた一枚絵とブラシで描かれたマスクを受け取り、
137
  マスクされた領域を分割し、欠損部分をAI補完する関数。
 
139
  if original_image_np is None:
140
  return None, None, None, "エラー: 元の画像がアップロードされていません。", None
141
 
142
+ # --- 修正: Sketchpad入力がファイルパスの場合の処理 ---
143
+ if not sketchpad_filepath:
144
+ # Sketchpadが空(何も描かれていない)場合はファイルパスNoneまは空文字
145
+ return None, None, None, "エラー: 分割したいパーツをブラシで描画してください。描画キャンバスが空です。", None
146
+
147
+ try:
148
+ # ファイルパスからPIL Imageとして読み込む
149
+ sketchpad_image = Image.open(sketchpad_filepath).convert("RGBA")
150
+ sketchpad_image_np = np.array(sketchpad_image)
151
+ except Exception as e:
152
+ print(f"Sketchpad画像読み込みエラー: {e}")
153
+ return None, None, None, "エラー: 描画キャンバスの画像を読み込めませんでした。ファイルパスが不正です。", None
154
 
155
  # PIL Image (元の画像) を取得
 
156
  original_image = Image.fromarray(original_image_np).convert("RGBA")
157
 
158
  # Sketchpadからの入力は、元の画像の上にブラシで描画されたRGBA画像 (描画部分は不透明)
 
166
  # 配列の次元が4未満(RGBAではない)場合に発生
167
  return None, None, None, "エラー: 描画データ形式が不正です。ブラシで描画が行われていないか、Gradioの出力形式に問題があります。", None
168
  except Exception as e:
169
+ # その他のスライスエラーなど
170
  print(f"Sketchpad処理中の予期せぬエラー: {e}")
171
  return None, None, None, "エラー: 描画データの処理中に予期せぬエラーが発生しました。ブラシで適切に描画されているか確認してください。", None
172
 
173
+ # ユーザーが何も描画しなかった場合のチェック(ファイルパスチェックで大方カバーされるが、念のため)
174
  if np.all(sketch_mask_alpha == 0):
175
+ return None, None, None, "エラー: 分割したいパーツをブラシで描画してください。(アルファチャンネルが全てゼロです)", None
176
 
177
  # NumPy配列からPIL Imageのマスクに変換 (Lモード)
178
  hair_mask = Image.fromarray(sketch_mask_alpha, mode='L')
 
279
  input_sketchpad = gr.Sketchpad(
280
  label="② 分割したいパーツをブラシで塗る (例: 前髪)",
281
  height=400,
 
282
  brush={"color": "#FF0000", "size": 20}, # ブラシ設定
283
+ type="filepath" # ★★★ 修正: 出力タイプをファイルパスに変更し、より頑健にする ★★★
284
  )
285
 
286
  # ★★★ 削除: エラーの原因となっているSketchpadの背景更新ロジックを削除 ★★★