Кр Ахметшина
Материал из 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)); }; }); };