rein0421 commited on
Commit
47c0165
·
verified ·
1 Parent(s): 60c5440

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -12
app.py CHANGED
@@ -807,9 +807,24 @@ async def read_root():
807
  .form-control-file { font-size: 1rem; }
808
  .form-group { margin-bottom: 25px; }
809
  .btn-success { padding: 10px 20px; border-radius: 50px; }
 
 
 
 
 
 
 
 
 
 
810
  </style>
811
  </head>
812
  <body>
 
 
 
 
 
813
  <div class="container">
814
  <h1><i class="fas fa-image"></i> 画像処理アプリ - モザイクとインペイント</h1>
815
  <div class="form-group">
@@ -851,9 +866,7 @@ async def read_root():
851
  }
852
  });
853
  });
854
-
855
  let resizedImageBlob = null; // 縮小された画像データを保持
856
-
857
  function previewAndResizeImage() {
858
  const fileInput = document.getElementById('uploadImage');
859
  const uploadedImage = document.getElementById('uploadedImage');
@@ -867,14 +880,12 @@ async def read_root():
867
  const maxHeight = 600;
868
  let width = img.width;
869
  let height = img.height;
870
-
871
  // 縦横比を維持して画像を縮小
872
  if (width > maxWidth || height > maxHeight) {
873
  const ratio = Math.min(maxWidth / width, maxHeight / height);
874
  width = width * ratio;
875
  height = height * ratio;
876
  }
877
-
878
  const canvas = document.createElement('canvas');
879
  canvas.width = width;
880
  canvas.height = height;
@@ -884,7 +895,6 @@ async def read_root():
884
  // 縮小された画像のプレビュー表示
885
  uploadedImage.src = canvas.toDataURL('image/jpeg');
886
  uploadedImage.style.display = 'block';
887
-
888
  // Blobに変換してサーバーに送信できるように保存
889
  canvas.toBlob((blob) => {
890
  resizedImageBlob = blob; // サーバー送信用の縮小画像データを保存
@@ -895,23 +905,19 @@ async def read_root():
895
  reader.readAsDataURL(fileInput.files[0]);
896
  }
897
  }
898
-
899
  function processImage() {
900
  const processingType = document.getElementById('processingType').value;
901
  const riskLevel = $("#slider").slider("value");
902
  const resultDiv = document.getElementById('result');
903
  const processedImage = document.getElementById('processedImage');
904
  const downloadLink = document.getElementById('downloadLink');
905
-
906
  if (!resizedImageBlob) {
907
  alert("画像を選択して縮小してください。");
908
  return;
909
  }
910
-
911
  const formData = new FormData();
912
  formData.append('image', resizedImageBlob, 'resized_image.jpg'); // 縮小画像を送信
913
  formData.append('risk_level', riskLevel);
914
-
915
  let apiEndpoint;
916
  if (processingType === "opencv") {
917
  apiEndpoint = "/create-mask-and-inpaint-opencv";
@@ -922,9 +928,7 @@ async def read_root():
922
  } else if (processingType == "mosaic") {
923
  apiEndpoint = "/create-mask-and-inpaint-mosaic";
924
  }
925
-
926
  const url = "https://rein0421-aidentify.hf.space" + apiEndpoint;
927
-
928
  fetch(url, {
929
  method: 'POST',
930
  body: formData
@@ -946,10 +950,62 @@ async def read_root():
946
  alert("画像処理に失敗しました。");
947
  });
948
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
949
  </script>
950
  </body>
951
  </html>
952
-
953
  """
954
  return HTMLResponse(content=html_content)
955
  if __name__ == "__main__":
 
807
  .form-control-file { font-size: 1rem; }
808
  .form-group { margin-bottom: 25px; }
809
  .btn-success { padding: 10px 20px; border-radius: 50px; }
810
+ #loadingSpinner {
811
+ position: fixed;
812
+ top: 50%;
813
+ left: 50%;
814
+ transform: translate(-50%, -50%);
815
+ color: #007bff;
816
+ text-align: center;
817
+ z-index: 9999;
818
+ }
819
+
820
  </style>
821
  </head>
822
  <body>
823
+ <div id="loadingSpinner" style="display: none;">
824
+ <i class="fas fa-spinner fa-spin fa-3x"></i>
825
+ <p>画像を処理中です。少々お待ちください...</p>
826
+ </div>
827
+
828
  <div class="container">
829
  <h1><i class="fas fa-image"></i> 画像処理アプリ - モザイクとインペイント</h1>
830
  <div class="form-group">
 
866
  }
867
  });
868
  });
 
869
  let resizedImageBlob = null; // 縮小された画像データを保持
 
870
  function previewAndResizeImage() {
871
  const fileInput = document.getElementById('uploadImage');
872
  const uploadedImage = document.getElementById('uploadedImage');
 
880
  const maxHeight = 600;
881
  let width = img.width;
882
  let height = img.height;
 
883
  // 縦横比を維持して画像を縮小
884
  if (width > maxWidth || height > maxHeight) {
885
  const ratio = Math.min(maxWidth / width, maxHeight / height);
886
  width = width * ratio;
887
  height = height * ratio;
888
  }
 
889
  const canvas = document.createElement('canvas');
890
  canvas.width = width;
891
  canvas.height = height;
 
895
  // 縮小された画像のプレビュー表示
896
  uploadedImage.src = canvas.toDataURL('image/jpeg');
897
  uploadedImage.style.display = 'block';
 
898
  // Blobに変換してサーバーに送信できるように保存
899
  canvas.toBlob((blob) => {
900
  resizedImageBlob = blob; // サーバー送信用の縮小画像データを保存
 
905
  reader.readAsDataURL(fileInput.files[0]);
906
  }
907
  }
 
908
  function processImage() {
909
  const processingType = document.getElementById('processingType').value;
910
  const riskLevel = $("#slider").slider("value");
911
  const resultDiv = document.getElementById('result');
912
  const processedImage = document.getElementById('processedImage');
913
  const downloadLink = document.getElementById('downloadLink');
 
914
  if (!resizedImageBlob) {
915
  alert("画像を選択して縮小してください。");
916
  return;
917
  }
 
918
  const formData = new FormData();
919
  formData.append('image', resizedImageBlob, 'resized_image.jpg'); // 縮小画像を送信
920
  formData.append('risk_level', riskLevel);
 
921
  let apiEndpoint;
922
  if (processingType === "opencv") {
923
  apiEndpoint = "/create-mask-and-inpaint-opencv";
 
928
  } else if (processingType == "mosaic") {
929
  apiEndpoint = "/create-mask-and-inpaint-mosaic";
930
  }
 
931
  const url = "https://rein0421-aidentify.hf.space" + apiEndpoint;
 
932
  fetch(url, {
933
  method: 'POST',
934
  body: formData
 
950
  alert("画像処理に失敗しました。");
951
  });
952
  }
953
+ function processImage() {
954
+ const processingType = document.getElementById('processingType').value;
955
+ const riskLevel = $("#slider").slider("value");
956
+ const resultDiv = document.getElementById('result');
957
+ const processedImage = document.getElementById('processedImage');
958
+ const downloadLink = document.getElementById('downloadLink');
959
+ if (!resizedImageBlob) {
960
+ alert("画像を選択して縮小してください。");
961
+ return;
962
+ }
963
+ // ローディングスピナーを表示
964
+ document.getElementById('loadingSpinner').style.display = 'block';
965
+
966
+ const formData = new FormData();
967
+ formData.append('image', resizedImageBlob, 'resized_image.jpg');
968
+ formData.append('risk_level', riskLevel);
969
+ let apiEndpoint;
970
+ if (processingType === "opencv") {
971
+ apiEndpoint = "/create-mask-and-inpaint-opencv";
972
+ } else if (processingType === "simple_lama") {
973
+ apiEndpoint = "/create-mask-and-inpaint-simple-lama";
974
+ } else if (processingType === "stamp") {
975
+ apiEndpoint = "/create-mask-and-inpaint-stamp";
976
+ } else if (processingType == "mosaic") {
977
+ apiEndpoint = "/create-mask-and-inpaint-mosaic";
978
+ }
979
+ const url = "https://rein0421-aidentify.hf.space" + apiEndpoint;
980
+ fetch(url, {
981
+ method: 'POST',
982
+ body: formData
983
+ })
984
+ .then(response => {
985
+ if (!response.ok) {
986
+ throw new Error("Network response was not ok");
987
+ }
988
+ return response.blob();
989
+ })
990
+ .then(blob => {
991
+ const objectURL = URL.createObjectURL(blob);
992
+ processedImage.src = objectURL;
993
+ downloadLink.href = objectURL;
994
+ resultDiv.style.display = "block";
995
+ })
996
+ .catch(error => {
997
+ console.error("画像処理に失敗しました。", error);
998
+ alert("画像処理に失敗しました。");
999
+ })
1000
+ .finally(() => {
1001
+ // ローディングスピナーを非表示にする
1002
+ document.getElementById('loadingSpinner').style.display = 'none';
1003
+ });
1004
+ }
1005
+
1006
  </script>
1007
  </body>
1008
  </html>
 
1009
  """
1010
  return HTMLResponse(content=html_content)
1011
  if __name__ == "__main__":