Spaces:
Running
Running
Update app.py
Browse files
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__":
|