Кр Ахметшина
Материал из Wiki
(Различия между версиями)
(Новая страница: «[https://docs.google.com/document/d/1hPlF6LXz-FdPZorcystszJ8WSBuPogx_/edit Документ]») |
|||
| Строка 1: | Строка 1: | ||
| − | [https:// | + | $(function() { |
| + | //values pulled from query string | ||
| + | $('#model').val("firsttest-i5opt"); | ||
| + | $('#version').val("1"); | ||
| + | $('#api_key').val("vj0DJOWHU2DzVnPONRhk"); | ||
| + | |||
| + | setupButtonListeners(); | ||
| + | }); | ||
| + | |||
| + | var infer = function() { | ||
| + | $('#output').html("Inferring..."); | ||
| + | $("#resultContainer").show(); | ||
| + | $('html').scrollTop(100000); | ||
| + | |||
| + | getSettingsFromForm(function(settings) { | ||
| + | settings.error = function(xhr) { | ||
| + | $('#output').html("").append([ | ||
| + | "Error loading response.", | ||
| + | "", | ||
| + | "Check your API key, model, version,", | ||
| + | "and other parameters", | ||
| + | "then try again." | ||
| + | ].join("\n")); | ||
| + | }; | ||
| + | |||
| + | $.ajax(settings).then(function(response) { | ||
| + | var pretty = $('<pre>'); | ||
| + | var formatted = JSON.stringify(response, null, 4) | ||
| + | |||
| + | pretty.html(formatted); | ||
| + | $('#output').html("").append(pretty); | ||
| + | $('html').scrollTop(100000); | ||
| + | }); | ||
| + | }); | ||
| + | }; | ||
| + | |||
| + | var retrieveDefaultValuesFromLocalStorage = function() { | ||
| + | try { | ||
| + | var api_key = localStorage.getItem("rf.api_key"); | ||
| + | var model = localStorage.getItem("rf.model"); | ||
| + | var format = localStorage.getItem("rf.format"); | ||
| + | |||
| + | if (api_key) $('#api_key').val(api_key); | ||
| + | if (model) $('#model').val(model); | ||
| + | if (format) $('#format').val(format); | ||
| + | } catch (e) { | ||
| + | // localStorage disabled | ||
| + | } | ||
| + | |||
| + | $('#model').change(function() { | ||
| + | localStorage.setItem('rf.model', $(this).val()); | ||
| + | }); | ||
| + | |||
| + | $('#api_key').change(function() { | ||
| + | localStorage.setItem('rf.api_key', $(this).val()); | ||
| + | }); | ||
| + | |||
| + | $('#format').change(function() { | ||
| + | localStorage.setItem('rf.format', $(this).val()); | ||
| + | }); | ||
| + | }; | ||
| + | |||
| + | var setupButtonListeners = function() { | ||
| + | // run inference when the form is submitted | ||
| + | $('#inputForm').submit(function() { | ||
| + | infer(); | ||
| + | return false; | ||
| + | }); | ||
| + | |||
| + | // make the buttons blue when clicked | ||
| + | // and show the proper "Select file" or "Enter url" state | ||
| + | $('.bttn').click(function() { | ||
| + | $(this).parent().find('.bttn').removeClass('active'); | ||
| + | $(this).addClass('active'); | ||
| + | |||
| + | if($('#computerButton').hasClass('active')) { | ||
| + | $('#fileSelectionContainer').show(); | ||
| + | $('#urlContainer').hide(); | ||
| + | } else { | ||
| + | $('#fileSelectionContainer').hide(); | ||
| + | $('#urlContainer').show(); | ||
| + | } | ||
| + | |||
| + | if($('#jsonButton').hasClass('active')) { | ||
| + | $('#imageOptions').hide(); | ||
| + | } else { | ||
| + | $('#imageOptions').show(); | ||
| + | } | ||
| + | |||
| + | return false; | ||
| + | }); | ||
| + | |||
| + | // wire styled button to hidden file input | ||
| + | $('#fileMock').click(function() { | ||
| + | $('#file').click(); | ||
| + | }); | ||
| + | |||
| + | // grab the filename when a file is selected | ||
| + | $("#file").change(function() { | ||
| + | var path = $(this).val().replace(/\\/g, "/"); | ||
| + | var parts = path.split("/"); | ||
| + | var filename = parts.pop(); | ||
| + | $('#fileName').val(filename); | ||
| + | }); | ||
| + | }; | ||
| + | |||
| + | var getSettingsFromForm = function(cb) { | ||
| + | var settings = { | ||
| + | method: "POST", | ||
| + | }; | ||
| + | |||
| + | var parts = [ | ||
| + | "https://classify.roboflow.com/", | ||
| + | $('#model').val(), | ||
| + | "/", | ||
| + | $('#version').val(), | ||
| + | "?api_key=" + $('#api_key').val() | ||
| + | ]; | ||
| + | |||
| + | var method = $('#method .active').attr('data-value'); | ||
| + | if(method == "upload") { | ||
| + | var file = $('#file').get(0).files && $('#file').get(0).files.item(0); | ||
| + | if(!file) return alert("Please select a file."); | ||
| + | |||
| + | getBase64fromFile(file).then(function(base64image) { | ||
| + | settings.url = parts.join(""); | ||
| + | settings.data = base64image; | ||
| + | |||
| + | console.log(settings); | ||
| + | cb(settings); | ||
| + | }); | ||
| + | } else { | ||
| + | var url = $('#url').val(); | ||
| + | if(!url) return alert("Please enter an image URL"); | ||
| + | |||
| + | parts.push("&image=" + encodeURIComponent(url)); | ||
| + | |||
| + | settings.url = parts.join(""); | ||
| + | console.log(settings); | ||
| + | cb(settings); | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | var getBase64fromFile = function(file) { | ||
| + | return new Promise(function(resolve, reject) { | ||
| + | var reader = new FileReader(); | ||
| + | reader.readAsDataURL(file); | ||
| + | reader.onload = function() { | ||
| + | resizeImage(reader.result).then(function(resizedImage){ | ||
| + | resolve(resizedImage); | ||
| + | }); | ||
| + | }; | ||
| + | reader.onerror = function(error) { | ||
| + | reject(error); | ||
| + | }; | ||
| + | }); | ||
| + | }; | ||
| + | |||
| + | var resizeImage = function(base64Str) { | ||
| + | return new Promise(function(resolve, reject) { | ||
| + | var img = new Image(); | ||
| + | img.src = base64Str; | ||
| + | img.onload = function(){ | ||
| + | var canvas = document.createElement("canvas"); | ||
| + | var MAX_WIDTH = 1500; | ||
| + | var MAX_HEIGHT = 1500; | ||
| + | var width = img.width; | ||
| + | var height = img.height; | ||
| + | if (width > height) { | ||
| + | if (width > MAX_WIDTH) { | ||
| + | height *= MAX_WIDTH / width; | ||
| + | width = MAX_WIDTH; | ||
| + | } | ||
| + | } else { | ||
| + | if (height > MAX_HEIGHT) { | ||
| + | width *= MAX_HEIGHT / height; | ||
| + | height = MAX_HEIGHT; | ||
| + | } | ||
| + | } | ||
| + | canvas.width = width; | ||
| + | canvas.height = height; | ||
| + | var ctx = canvas.getContext('2d'); | ||
| + | ctx.drawImage(img, 0, 0, width, height); | ||
| + | resolve(canvas.toDataURL('image/jpeg', 1.0)); | ||
| + | }; | ||
| + | }); | ||
| + | }; | ||
Текущая версия на 14:13, 24 апреля 2024
$(function() { //values pulled from query string $('#model').val("firsttest-i5opt"); $('#version').val("1"); $('#api_key').val("vj0DJOWHU2DzVnPONRhk");
setupButtonListeners(); });
var infer = function() { $('#output').html("Inferring..."); $("#resultContainer").show(); $('html').scrollTop(100000);
getSettingsFromForm(function(settings) { settings.error = function(xhr) { $('#output').html("").append([ "Error loading response.", "", "Check your API key, model, version,", "and other parameters", "then try again." ].join("\n")); };
$.ajax(settings).then(function(response) {
var pretty = $('');
var formatted = JSON.stringify(response, null, 4)
pretty.html(formatted);
$('#output').html("").append(pretty);
$('html').scrollTop(100000);
});
});
};
var retrieveDefaultValuesFromLocalStorage = function() {
try {
var api_key = localStorage.getItem("rf.api_key");
var model = localStorage.getItem("rf.model");
var format = localStorage.getItem("rf.format");
if (api_key) $('#api_key').val(api_key);
if (model) $('#model').val(model);
if (format) $('#format').val(format);
} catch (e) {
// localStorage disabled
}
$('#model').change(function() {
localStorage.setItem('rf.model', $(this).val());
});
$('#api_key').change(function() {
localStorage.setItem('rf.api_key', $(this).val());
});
$('#format').change(function() {
localStorage.setItem('rf.format', $(this).val());
});
};
var setupButtonListeners = function() {
// run inference when the form is submitted
$('#inputForm').submit(function() {
infer();
return false;
});
// make the buttons blue when clicked
// and show the proper "Select file" or "Enter url" state
$('.bttn').click(function() {
$(this).parent().find('.bttn').removeClass('active');
$(this).addClass('active');
if($('#computerButton').hasClass('active')) {
$('#fileSelectionContainer').show();
$('#urlContainer').hide();
} else {
$('#fileSelectionContainer').hide();
$('#urlContainer').show();
}
if($('#jsonButton').hasClass('active')) {
$('#imageOptions').hide();
} else {
$('#imageOptions').show();
}
return false;
});
// wire styled button to hidden file input
$('#fileMock').click(function() {
$('#file').click();
});
// grab the filename when a file is selected
$("#file").change(function() {
var path = $(this).val().replace(/\\/g, "/");
var parts = path.split("/");
var filename = parts.pop();
$('#fileName').val(filename);
});
};
var getSettingsFromForm = function(cb) {
var settings = {
method: "POST",
};
var parts = [
"https://classify.roboflow.com/",
$('#model').val(),
"/",
$('#version').val(),
"?api_key=" + $('#api_key').val()
];
var method = $('#method .active').attr('data-value');
if(method == "upload") {
var file = $('#file').get(0).files && $('#file').get(0).files.item(0);
if(!file) return alert("Please select a file.");
getBase64fromFile(file).then(function(base64image) {
settings.url = parts.join("");
settings.data = base64image;
console.log(settings);
cb(settings);
});
} else {
var url = $('#url').val();
if(!url) return alert("Please enter an image URL");
parts.push("&image=" + encodeURIComponent(url));
settings.url = parts.join("");
console.log(settings);
cb(settings);
}
};
var getBase64fromFile = function(file) {
return new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
resizeImage(reader.result).then(function(resizedImage){
resolve(resizedImage);
});
};
reader.onerror = function(error) {
reject(error);
};
});
};
var resizeImage = function(base64Str) {
return new Promise(function(resolve, reject) {
var img = new Image();
img.src = base64Str;
img.onload = function(){
var canvas = document.createElement("canvas");
var MAX_WIDTH = 1500;
var MAX_HEIGHT = 1500;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
resolve(canvas.toDataURL('image/jpeg', 1.0));
};
});
};