облагородил

This commit is contained in:
artem 2023-05-01 21:19:42 +03:00
parent 86d7a87fe2
commit 18c4259d16
6 changed files with 787 additions and 26 deletions

3
RoadMap.md Normal file
View File

@ -0,0 +1,3 @@
Можно скачать отсюда блог и перевести
https://dogtime.com/dog-breeds/afador

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8">
<meta name="yandex-verification" content="2d4efced567f0f7f" />
<meta name="google-site-verification" content="gKPSnPZ1ULUF9amD0vw_JQqkS5GLqc937UxayaN_s-I" />
<link rel="icon" type="image/x-icon" href="static/favicon.ico">
<title>Определение породы собаки по фото</title>
<link rel="stylesheet" href="static/styles.css">
<!-- Yandex.Metrika counter -->
@ -26,8 +27,8 @@
<body>
<section id="main">
<h1>Определить породу собаки по фото</h1>
<p>Загрузите фото, чтобы опеределить породу собаки или щенка. Если порода смешанная, после загрузки будет показана вероятность породы животного.</p>
<p>Опредление породы происходит при помощи нейронной сети - точность опеределения составляет 60%, сеть обучена на 125 породах. Если на фото будет неизвестная порода или не собака - сеть не сможет правильно опеределить, что это.</p>
<p>Загрузите фото, чтобы опеределить породу собаки или щенка. Если порода смешанная (или порода определена неточно), после загрузки будет показана вероятность породы животного.</p>
<p>Опредление породы происходит при помощи нейронной сети - точность опеределения составляет 60%, сеть обучена на <a href="https://vk.com/albums-220240483" target="_blank">125 породах</a>. Если на фото будет неизвестная порода или не собака - сеть не сможет правильно опеределить, что это.</p>
<p>Для распознования все фото отправляются на сервер, но там не сохраняются</p>
<form enctype="multipart/form-data" method="post" action="/beeds" onsubmit="SavePhoto();return false">
<p><input type="file" name="f" id="file-input">
@ -39,7 +40,6 @@
<img id="image" style="max-width: 200px;"/>
</div>
<div id="result"></div>
<div id="result-image" ></div>
</div>
</body>
</section>

BIN
server/static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

728
server/static/photos.json Normal file
View File

@ -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": ""
}
]

View File

@ -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 += "<div>" + json.results_net[key] + ": " + key + "</div>";
for (let imgKey in json.images) {
if (json.images[imgKey].name != json.results_net[key]) {
continue;
}
if (json.images[imgKey] == undefined) {
continue;
}
textImg += "<img src='" + json.images[imgKey].url + "'/>";
break;
}
uniqChecker[json.results_net[key]] = key;
}
let text = "<h3 class='image-results'>Результаты</h3>";
let uniqChecker = {};
for (let key in json.results) {
if (uniqChecker[json.results[key]] != undefined) {
continue
}
text += "<div>" + json.results[key] + ": " + key + "</div>";
text += "<div class='image-block'><div class='image-text'>" + json.results[key] + " (вероятность: " + Math.round(parseFloat(key)*10)/10 + ")</div>";
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 += "<img src='" + json.images[imgKey].url + "'/>";
text += "<div class='image-container'><img src='" + json.images[imgKey].url + "'/></div>";
break;
}
text += "</div>";
uniqChecker[json.results[key]] = key;
}
for (let key in json.results_net) {
if (uniqChecker[json.results_net[key]] != undefined) {
continue
}
text += "<div class='image-block'><div class='image-text'>" + json.results_net[key] + "</div>";
for (let imgKey in json.images) {
if (json.images[imgKey].name != json.results_net[key]) {
continue;
}
if (json.images[imgKey] == undefined) {
continue;
}
text += "<div class='image-container'><img src='" + json.images[imgKey].url + "'/></div>";
break;
}
text += "</div>";
}
document.getElementById("result").innerHTML = text;
document.getElementById("result-image").innerHTML = textImg;
} else {
alert("Ошибка HTTP: " + response.status);
}

View File

@ -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;
}