Анализ goskatalog_art
Что будем искать¶
Составив список классов изначальных классов из 3 датасетов мы получили список:
Fruits-360 dataset: Apples (different varieties: Crimson Snow, Golden, Golden-Red, Granny Smith, Pink Lady, Red, Red Delicious), Apricot, Avocado, Avocado ripe, Banana (Yellow, Red, Lady Finger), Beetroot Red, Blueberry, Cabbage, Cactus fruit, Cantaloupe (2 varieties), Carambula, Carrot, Cauliflower, Cherry (different varieties, Rainier), Cherry Wax (Yellow, Red, Black), Chestnut, Clementine, Cocos, Corn (with husk), Cucumber (ripened, regular), Dates, Eggplant, Fig, Ginger Root, Granadilla, Grape (Blue, Pink, White (different varieties)), Grapefruit (Pink, White), Guava, Hazelnut, Huckleberry, Kiwi, Kaki, Kohlrabi, Kumsquats, Lemon (normal, Meyer), Lime, Lychee, Mandarine, Mango (Green, Red), Mangostan, Maracuja, Melon Piel de Sapo, Mulberry, Nectarine (Regular, Flat), Nut (Forest, Pecan), Onion (Red, White), Orange, Papaya, Passion fruit, Peach (different varieties), Pepino, Pear (different varieties, Abate, Forelle, Kaiser, Monster, Red, Stone, Williams), Pepper (Red, Green, Orange, Yellow), Physalis (normal, with Husk), Pineapple (normal, Mini), Pitahaya Red, Plum (different varieties), Pomegranate, Pomelo Sweetie, Potato (Red, Sweet, White), Quince, Rambutan, Raspberry, Redcurrant, Salak, Strawberry (normal, Wedge), Tamarillo, Tangelo, Tomato (different varieties, Maroon, Cherry Red, Yellow, not ripened, Heart), Walnut, Watermelon, Zucchini (green and dark).
Vegetable Image Dataset: Bean Bitter_Gourd Bottle_Gourd Brinjal Broccoli Cabbage Capsicum Carrot Cauliflower Cucumber Papaya Potato Pumpkin Radish Tomato
Fruit classification(10 Class): Apple Orange Avocado Kiwi Mango Pinenapple Strawberries Banana Cherry Watermelon
Переведем названия классов на русский и выберем те, которые, можно было бы найти на картинах:
("Яблоко", "Апельсин", "Авокадо", "Киви", "Манго", "Ананас", "Клубника", "Банан", "Вишня", "Арбуз", "Фасоль", "Тыква", "Брокколи", "Капуста", "Морковь", "Цветная капуста", "Огурец", "Папайя", "Картофель", "Помидор", "Абрикос", "Черника", "Плоды кактуса", "Дыня", "карамбула", "кокос", "кукуруза", "виноград", "лимон", "мандарин", "Персик", "Груша", "Перец",)
После парсинга список классов, доступных для анализа сократился до:
classes = (
"Яблоко",
"Апельсин",
"Ананас",
"Клубник",
"Банан",
"Арбуз",
"Тыква",
"Капуста",
"Морковь",
"Цветная капуста",
"Помидор",
"Абрикос",
"Плоды кактуса",
"Дыня",
"кукуруза",
"лимоны",
"мандарин",
"Персики",
"Груша",
)
Скачивание¶
import os
import sys
# добавляем главную директорию в путь
nb_dir = os.path.split(os.getcwd())[0]
if nb_dir not in sys.path:
sys.path.append(nb_dir)
from Tools import goskatalog_parser, zip_files
from pathlib import Path
path_to_save = Path.cwd() / "goskatalog_art"
mypath, missing_art = goskatalog_parser(classes, path_to_save)
mypath
missing_art
Это список картин изображеня которые отцутствуют на сайте по разным причинам Теперь сохраним датасет в зип для загрузки на yandex disk
zip_path = zip_files(path_to_save)
zip_path
Анализ датасета¶
import os
import sys
# добавляем главную директорию в путь
nb_dir = os.path.split(os.getcwd())[0]
if nb_dir not in sys.path:
sys.path.append(nb_dir)
from pathlib import Path
path_to_save = Path.cwd() / "goskatalog_art"
from Tools import find_needed_jpeg_files, display_images, find_image_files
FOLDER_PATH = Path.cwd().parent / "Notebooks" / "goskatalog_art" / "art_dataset"
remove_list = []
def display_class_images(class_name, class_list):
class_path = FOLDER_PATH / class_name
jpeg_paths = find_needed_jpeg_files(class_path, class_list)
display_images(jpeg_paths, class_name)
После ручного просмотра всех изображений я составил список картин на которых нет искомого класса. Мы не удаляем их навсегда, мы пометим их как новый пустой класс и будем использовать вдальнейшем.
Абрикос
class_name = "Абрикос"
class_list = (
3468798,
3515676,
3626670,
5009217,
7353027,
8154106,
10264898,
11811128,
13766662,
15836923,
15836925,
18624220,
26420771,
31054871,
36719504,
36751223,
41498768,
)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Ананас"
class_list = (46875430, 19314984)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Апельсин"
class_list = (
5326472,
5326473,
5959271,
5959310,
6119837,
6916657,
9682397,
23758497,
23758498,
25151180,
44457513,
)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Арбуз"
class_list = (
3559184,
4587537,
6761434,
6991788,
8778575,
8810137,
9429514,
10488225,
11033732,
11259369,
11277390,
11284551,
112845531,
11494996,
12482650,
14575150,
16151261,
17084179,
20043751,
2090270,
21521764,
22255883,
23864425,
239347624,
27995245,
2815172,
29786357,
32342533,
33345486,
36737916,
39462715,
40335355,
40424119,
40672522,
40672523,
47162403,
47381131,
48206104,
48206123,
49350767,
51478377,
51571258,
28151726,
)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Банан"
class_list = (3781860, 5613358, 5860580, 47024367)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Груша"
class_list = (
6365544,
8552366,
10390795,
11284539,
11680528,
24885999,
31437284,
31065356,
27222649,
26902465,
33771987,
48676976,
47001751,
46498381,
44385623,
44365409,
)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Капуста"
class_list = (8615271,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Клубник"
class_list = (12650319,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Морковь"
class_list = (3574955,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Персики"
class_list = (13199354,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Помидор"
class_list = (4334985,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Тыква"
class_list = (25151146, 4496627, 50185038)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
class_name = "Яблоко"
class_list = (1995722,)
remove_list.extend(class_list)
display_class_images(class_name, class_list)
Класс Цветная капуста попадает полностью
Классы кукуруза, Дыня, лимоны, Плоды кактуса были убраны из общего датасета, так что и из спаршеного датасета они тоже будут убраны в категорию "без категори"
import os
import shutil
target_dir = Path.cwd().parent / "Notebooks" / "goskatalog_art_final"
os.makedirs(target_dir, exist_ok=True)
for class_ in classes:
for img in find_image_files(FOLDER_PATH):
if class_ in img:
now_dir = target_dir / class_
os.makedirs(now_dir, exist_ok=True)
name = int(img.rsplit("\\", 1)[-1].split(".")[0])
if not name in remove_list:
dst_path = os.path.join(now_dir, img.rsplit("\\", 1)[-1])
shutil.copy2(img, dst_path)