diff --git a/server/index.html b/server/index.html index 202907a..df7a305 100644 --- a/server/index.html +++ b/server/index.html @@ -33,8 +33,14 @@

-
- +
+
+
+ +
+
+
+
diff --git a/server/main.py b/server/main.py index af6f454..401fbc8 100644 --- a/server/main.py +++ b/server/main.py @@ -9,6 +9,7 @@ from tensorflow.keras.utils import img_to_array import io import os import json +import requests os.environ['CUDA_VISIBLE_DEVICES'] = '-1' @@ -22,10 +23,33 @@ test_model = keras.models.load_model(model_name) dict_names = {} with open("beerds.json", "r") as f: dict_names = json.loads(f.read()) +for key in dict_names: + dict_names[key] = dict_names[key].replace("_", " ") app.static("/", "index.html", name="main") app.static("/static/", "static/", name="static") +VK_URL = "https://api.vk.com/method/" +TOKEN = "vk1.a.2VJFQn9oTIqfpVNcgk7OvxXU8TZPomCH4biRvZEZp8-tQTi8IdKajlXCY5vJbLFjjPGrRWpsM8wbG1mek2pVpktwqi1MGAFJQfQafg68buH7YiE3GtClgWhZNuDUX5PwQuANLRVh6Ao-DcN0Z-72AmWmsIKhf9A4yuE8q3O6Asn_miGvO9gUY_JpctKEVtAYIEhbJtQK7hxW8qpud8J5Vg" +headers = {"Authorization": f"Bearer {TOKEN}"} +group_id = 220240483 +postfix = "?v=5.131" +IMAGES = {} + +def get_images(): + global IMAGES + + r = requests.get( + f"{VK_URL}photos.getAll{postfix}&access_token={TOKEN}&owner_id=-{group_id}&count=200") + items = r.json().get("response").get("items") + for item in items: + for s in item.get("sizes"): + if s.get("type") != "x": + continue + IMAGES[item.get("text")] = s.get("url") + break + +get_images() @app.post("/beeds") async def beeds(request): body = request.files.get("f").body @@ -53,11 +77,25 @@ async def beeds(request): if val <= 0.09: continue result_net[val] = dict_names[str(i)] - + items_one = dict(sorted(result.items(), reverse=True)) + items_two = dict(sorted(result_net.items(), reverse=True)) + images = [] + for item in items_one: + name = items_one[item].replace("_", " ") + if name not in IMAGES: + continue + images.append({"name": name, "url": IMAGES[name]}) + for item in items_two: + name = items_two[item].replace("_", " ") + if name not in IMAGES: + continue + images.append({"name": name, "url": IMAGES[name]}) return json_answer({ - "results": dict(sorted(result.items(), reverse=True)), - "results_net": dict(sorted(result_net.items(), reverse=True)), + "results": items_one, + "results_net": items_two, + "images": images, }) + if __name__ == "__main__": app.run(auto_reload=True, port=4003, host="0.0.0.0") diff --git a/server/static/scripts.js b/server/static/scripts.js index b610239..adeec69 100644 --- a/server/static/scripts.js +++ b/server/static/scripts.js @@ -1,37 +1,59 @@ let urlCreator = window.URL || window.webkitURL; -async function SavePhoto() -{ - document.getElementById("result").innerHTML = ""; - let photo = document.getElementById("file-input").files[0]; - let formData = new FormData(); - - formData.append("f", photo); - let response = await fetch('/beeds', {method: "POST", body: formData}); - if (response.ok) { - let json = await response.json(); - let text = "" - let uniqChecker = {} - for (let key in json.results_net) { - text += "
" + json.results_net[key] + ": " + key + "
"; - uniqChecker[json.results_net[key]] = key; +async function SavePhoto() { + document.getElementById("result").innerHTML = ""; + let photo = document.getElementById("file-input").files[0]; + let formData = new FormData(); + + formData.append("f", photo); + 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; } - for (let key in json.results) { - if (uniqChecker[json.results[key]] != undefined) { - continue - } - text += "
" + json.results[key] + ": " + key + "
"; + if (json.images[imgKey] == undefined) { + continue; } - document.getElementById("result").innerHTML = text; - } else { - alert("Ошибка HTTP: " + response.status); + textImg += ""; + break; } + uniqChecker[json.results_net[key]] = key; + } + for (let key in json.results) { + if (uniqChecker[json.results[key]] != undefined) { + continue + } + text += "
" + json.results[key] + ": " + key + "
"; + for (let imgKey in json.images) { + if (json.images[imgKey].name != json.results[key]) { + continue; + } + if (json.images[imgKey] == undefined) { + continue; + } + textImg += ""; + break; + } + } + document.getElementById("result").innerHTML = text; + document.getElementById("result-image").innerHTML = textImg; + } else { + alert("Ошибка HTTP: " + response.status); + } } document.getElementById("file-input").addEventListener("change", function () { let photo = document.getElementById("file-input").files[0]; let imageUrl = urlCreator.createObjectURL(photo); document.getElementById("image").src = imageUrl; + document.getElementById("upload-image-text").innerHTML = "Ваше изображение:"; }); \ No newline at end of file diff --git a/vk_api/photo.py b/vk_api/photo.py index b89074c..6d1afdb 100644 --- a/vk_api/photo.py +++ b/vk_api/photo.py @@ -2,8 +2,11 @@ import os import time import requests +# Получить токен чтобы: +# https://oauth.vk.com/oauth/authorize?client_id=51534014&display=page&scope=photos,offline&response_type=token&v=5.131&slogin_h=4984535b54c59e09ca.f1e0b6dce0d0cc82e7&__q_hash=618f24fbac4bc34edbf09b8bc503e923 + #TOKEN = "vk1.a.mf4KFdN9gC14SSGDFHVwFRTpzBKBeNxkdlEe0IFlZqU5a5rHH5PwiPn5ekWnDhc94lEI5d2vtXzfxvjXRPapsQZCCt89YUwCIQB1alo06A0Iup9PCWbd6F5GayBn0TS_26N5BTQ1B7deFzi25BV3LKimP9g5ZkeoY0xhNfQ7XawPnBhhK0a2ipL5zZxygYgf" -TOKEN = "vk1.a.m92hxDp9fUi06dr424RERKOsika5s5WTNZM64XxTZbU_feIuIRQs72UH_WpeZBr0f_av3V68MvADcNyRSwPMl015aWW0EZjc0d50b8my4_w88BELd1BVT2p9o_7W0YyedfnYGGylyQzfj0jGy2Ufuc3CGFQXJjGJrnINmMSjNps84jhMk0LDqTVFG0a6VlgJ" +TOKEN = "vk1.a.2VJFQn9oTIqfpVNcgk7OvxXU8TZPomCH4biRvZEZp8-tQTi8IdKajlXCY5vJbLFjjPGrRWpsM8wbG1mek2pVpktwqi1MGAFJQfQafg68buH7YiE3GtClgWhZNuDUX5PwQuANLRVh6Ao-DcN0Z-72AmWmsIKhf9A4yuE8q3O6Asn_miGvO9gUY_JpctKEVtAYIEhbJtQK7hxW8qpud8J5Vg" VK_URL = "https://api.vk.com/method/" headers = {"Authorization": f"Bearer {TOKEN}"} postfix = "?v=5.131&state=123456" @@ -11,7 +14,24 @@ group_id = 220240483 dir = "../assets/dog" list_labels = [fname for fname in os.listdir(dir)] +r = requests.get( + f"{VK_URL}photos.getAll{postfix}&access_token={TOKEN}&owner_id=-{group_id}&count=200") +if "error" in r.json(): + print("error", r.json()) + exit() +items = r.json().get("response").get("items") +names = {} +for item in items: + if item.get("text") in names: + print("Doubles: ", item.get("text")) + names[item.get("text")] = True for name in list_labels: + if name.replace("_", " ") in names: + print(f"Continue: {name}") + continue + if name in names: + print(f"Continue: {name}") + continue max_size = 0 max_index = 0 list_data = os.listdir(os.path.join(dir, name)) @@ -36,6 +56,11 @@ for name in list_labels: server = r.json().get("server") photos_list = r.json().get("photos_list") hash_data = r.json().get("hash") - r = requests.post(f"{VK_URL}photos.save{postfix}", data={"album_id": album_id, "server": server, - "photos_list": photos_list, "hash": hash_data, "caption": name.replace("_", " ")}, headers=headers) + aid = r.json().get("aid") + r = requests.post(f"{VK_URL}photos.save{postfix}&hash={hash_data}", data={"album_id": aid, "server": server, + "photos_list": photos_list, "caption": name.replace("_", " "), "group_id": group_id}, headers=headers) + if "error" in r.json(): + print("error", r.json()) + break + print(f"Created: {name}") time.sleep(1)