From 18c4259d16be7aac7a01fbe67b0a4e3151893a3e Mon Sep 17 00:00:00 2001 From: artem Date: Mon, 1 May 2023 21:19:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=BB=D0=B0=D0=B3=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RoadMap.md | 3 + server/index.html | 6 +- server/static/favicon.ico | Bin 0 -> 7406 bytes server/static/photos.json | 728 ++++++++++++++++++++++++++++++++++++++ server/static/scripts.js | 46 +-- server/static/styles.css | 30 ++ 6 files changed, 787 insertions(+), 26 deletions(-) create mode 100644 RoadMap.md create mode 100644 server/static/favicon.ico create mode 100644 server/static/photos.json diff --git a/RoadMap.md b/RoadMap.md new file mode 100644 index 0000000..86b785b --- /dev/null +++ b/RoadMap.md @@ -0,0 +1,3 @@ +Можно скачать отсюда блог и перевести + +https://dogtime.com/dog-breeds/afador \ No newline at end of file diff --git a/server/index.html b/server/index.html index df7a305..f07d85a 100644 --- a/server/index.html +++ b/server/index.html @@ -4,6 +4,7 @@ + Определение породы собаки по фото @@ -26,8 +27,8 @@

Определить породу собаки по фото

-

Загрузите фото, чтобы опеределить породу собаки или щенка. Если порода смешанная, после загрузки будет показана вероятность породы животного.

-

Опредление породы происходит при помощи нейронной сети - точность опеределения составляет 60%, сеть обучена на 125 породах. Если на фото будет неизвестная порода или не собака - сеть не сможет правильно опеределить, что это.

+

Загрузите фото, чтобы опеределить породу собаки или щенка. Если порода смешанная (или порода определена неточно), после загрузки будет показана вероятность породы животного.

+

Опредление породы происходит при помощи нейронной сети - точность опеределения составляет 60%, сеть обучена на 125 породах. Если на фото будет неизвестная порода или не собака - сеть не сможет правильно опеределить, что это.

Для распознования все фото отправляются на сервер, но там не сохраняются

@@ -39,7 +40,6 @@

-
diff --git a/server/static/favicon.ico b/server/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2fb6df09963cf1e9d05c3f3cc210ee0ad5d8d85e GIT binary patch literal 7406 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 literal 0 HcmV?d00001 diff --git a/server/static/photos.json b/server/static/photos.json new file mode 100644 index 0000000..2bc89e0 --- /dev/null +++ b/server/static/photos.json @@ -0,0 +1,728 @@ +[ + { + "name_en": "beagle", + "name": "бигль", + "photo": "https://sun9-46.userapi.com/impg/B48745e4fBGwvuPzG-Oj0tIADbP_huU4Y49pIQ/nfmchsz5Fug.jpg?size=960x640&quality=95&sign=5f9bb57ea668a7d0a65a3542fa4382b7&type=album" + + }, + { + "name_en": "australian kelpie", + "name": "австралийский келпи", + "photo": "https://sun9-40.userapi.com/impg/YyM270TWdxR_TtHvOODNnuW4LM9s3-OXLrRiHA/kh-SMCm1zUc.jpg?size=1885x1414&quality=95&sign=fe84f57a4064f99224071c2a7d11b29d&type=album" + }, + { + "name_en": "australian terrier", + "name": "австралийский терьер", + "photo": "https://sun1-54.userapi.com/impg/ZvspRqzaR1n_0kJf58B73WY_rpJVR8HHtePG8Q/gUZm0Q-JcB4.jpg?size=1429x1072&quality=95&sign=d8ddf8c7ed725b5e34043b76833b5b1f&type=album" + }, + { + "name_en": "australian silky terrier", + "name": "австралийский шелковистый терьер", + "photo": "https://sun9-48.userapi.com/impg/bP1FWRk8uf8ug18lVsZ7K6V7wxybycHKfnfdzA/oQ1YghcoOn0.jpg?size=720x540&quality=95&sign=901c4cd68e6e7582e28b54071a5ba927&type=album" + } + , + { + "name_en": "american eskimo dog", + "name": "американская эскимосская собака", + "photo": "https://sun9-77.userapi.com/impg/OFrCkOXU9qM19rfOqHW7ejVR4tzCgpFpWG7ADg/hJMaSg8qXqE.jpg?size=1200x900&quality=95&sign=48d134ec21e182e31080b4bb999eff05&type=album" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + , + { + "name_en": "", + "name": "", + "photo": "" + } + + + +] \ No newline at end of file diff --git a/server/static/scripts.js b/server/static/scripts.js index adeec69..dfb2989 100644 --- a/server/static/scripts.js +++ b/server/static/scripts.js @@ -10,28 +10,10 @@ async function SavePhoto() { let response = await fetch('/beeds', { method: "POST", body: formData }); if (response.ok) { let json = await response.json(); - let text = "" - let textImg = "" - let uniqChecker = {} - for (let key in json.results_net) { - text += "
" + json.results_net[key] + ": " + key + "
"; - for (let imgKey in json.images) { - if (json.images[imgKey].name != json.results_net[key]) { - continue; - } - if (json.images[imgKey] == undefined) { - continue; - } - textImg += ""; - break; - } - uniqChecker[json.results_net[key]] = key; - } + let text = "

Результаты

"; + let uniqChecker = {}; for (let key in json.results) { - if (uniqChecker[json.results[key]] != undefined) { - continue - } - text += "
" + json.results[key] + ": " + key + "
"; + text += "
" + json.results[key] + " (вероятность: " + Math.round(parseFloat(key)*10)/10 + ")
"; for (let imgKey in json.images) { if (json.images[imgKey].name != json.results[key]) { continue; @@ -39,12 +21,30 @@ async function SavePhoto() { if (json.images[imgKey] == undefined) { continue; } - textImg += ""; + text += "
"; break; } + text += "
"; + uniqChecker[json.results[key]] = key; + } + for (let key in json.results_net) { + if (uniqChecker[json.results_net[key]] != undefined) { + continue + } + text += "
" + json.results_net[key] + "
"; + for (let imgKey in json.images) { + if (json.images[imgKey].name != json.results_net[key]) { + continue; + } + if (json.images[imgKey] == undefined) { + continue; + } + text += "
"; + break; + } + text += "
"; } document.getElementById("result").innerHTML = text; - document.getElementById("result-image").innerHTML = textImg; } else { alert("Ошибка HTTP: " + response.status); } diff --git a/server/static/styles.css b/server/static/styles.css index 9f4616b..ee74f97 100644 --- a/server/static/styles.css +++ b/server/static/styles.css @@ -2,8 +2,15 @@ body { background: #fff; margin: 0; border: none; + font-family: Verdana, sans-serif; } +a { + color: gray; + text-decoration: underline; +} + + img { margin: 0; border: none; @@ -16,4 +23,27 @@ h1 { #main { max-width: 1024px; margin: auto; + padding:10px; + min-width: 360px; +} + +.image-block { + display: flex; +} + +.image-block div { + width: 50%; + text-align: center; +} + +.image-block img { + max-width: 200px; +} + +.upload-image-text { + text-align: center; +} + +.image-results { + text-align: center; } \ No newline at end of file