Есть ли способ сопоставить файл JSON с набором данных (изображениями) в python?

Я работаю над машинным обучением (КЛАССИФИКАЦИЯ ИЗОБРАЖЕНИЙ) и я нашел набор данных, который состоит из двух файлов:

  1. Изображения (20 000 изображений) "Изображения "Изображения пронумерованы от 1 до 20 000 (без классификации по классам)"
  2. Файл JSON с информацией и классификацией изображений (12 классов изображений). Файл JSON имеет следующую структуру:
{
  "<image_number>": {
    "image_filepath": "images/<image_number>.jpg", 
    "anomaly_class": "<class_name>"
  },
  ...
}

Итак, я пытаюсь прочитать файл JSON и разделить набор данных, чтобы иметь дело с каждым классом по отдельности. Затем возьмите 80% «каждого класса» в качестве тренировочного набора и 20% для тестового набора.

Я попытался найти способ сопоставить файл JSON с набором данных (изображениями), чтобы я мог классифицировать классы в отдельных папках, а затем разделить их на наборы для обучения и тестирования.

Кто-нибудь может помочь мне с этим?

СПАСИБО

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 082
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что-то вроде следующего создаст папки для каждого из классов, а затем переместит в них изображения.

import json
import os
from os import path
# Open the json file containing the classifications
with open("clasification.json", "r") as f:
   classification = json.load(f)
# Create a set which contains all the classes
classes = set([i["anomaly_class"] for i in classification.values()])
# For each of the classes make a folder to contain them
for c in classes:
    os.makedirs(c)
# For each image entry in the json move the image to the folder named it's class
for image_number, image_data in classification.items():
    os.rename(image_data["image_filepath"], path.join(image_data["anomaly_class"], "{}.jpg".format(image_number)))

но я не знаю класс изображения, изображения неклассифицированы и неорганизованы. Я ищу способ воспользоваться файлом JSON для классификации изображений по 12 различным классам.

Abdulaziz G 18.12.2020 13:42

Разве «anomaly_class»: «<имя_класса>» не говорит вам, к какому классу должно относиться изображение?

jhylands 18.12.2020 13:46

Код считывает классификацию из файла JSON.

jhylands 18.12.2020 13:46

СПАСИБО ты действительно спас меня

Abdulaziz G 18.12.2020 14:01

Этот ответ не решает проблему разделения изображений на данные тестирования и обучения.

Miguel Alorda 18.12.2020 14:40

Позвольте мне... Не могли бы вы подробно объяснить каждую строку в коде, чтобы я мог полностью понять, что происходит?

Abdulaziz G 18.12.2020 17:09

Добавлены некоторые комментарии, чтобы объяснить более подробно. Есть что-нибудь еще, что вы хотели бы объяснить?

jhylands 18.12.2020 17:57

Что-то вроде этого должно работать:

import json
from pathlib import Path

currDir = Path(__file__).resolve().parent
# Path where the images will be moved to
imagesDir = currDir / 'images'
testingDir = imagesDir / 'testing'
trainingDir = imagesDir / 'training'

# Load data
infoPerImage = {}
# This has to be the path to the file containing the data
# I assumed it is in the current directory
infoFilePath = currDir / 'data.json'
with infoFilePath.open() as f:
    infoPerImage = json.loads(f.read())

# Separate into classes
infoPerClass = {}
for imageNumber, imageInfo in infoPerImage.items():
    imageClass = imageInfo['anomaly_class']
    imagePath = imageInfo['image_filepath']
    currentClassImages = infoPerClass.setdefault(imageClass, [])
    currentClassImages.append(imagePath)

# Create directories for the classes
for imageClass in infoPerClass:
    pathToImageClassTraining = trainingDir / imageClass
    pathToImageClassTraining.mkdir(parents=True)
    pathToImageClassTesting = testingDir / imageClass
    pathToImageClassTesting.mkdir(parents=True)

# Separate into training and testing images
trainingImages = {}
testingImages = {}
for imageClass, imagePaths in infoPerClass.items():
    lenImagePaths = len(imagePaths)
    upperLimit = int(lenImagePaths * 0.8)
    trainingImages[imageClass] = imagePaths[:upperLimit]
    testingImages[imageClass] = imagePaths[upperLimit:]

def moveImagesToTheirDir(imagesDict, imagesBasePath):
    for imageClass, imagePaths in imagesDict.items():
        for imagePath in imagePaths:
            imageSrc = Path(imagePath)
            imageDest = imagesBasePath / imageClass / imageSrc.name
            imageSrc.rename(imageDest)
moveImagesToTheirDir(trainingImages, trainingDir)
moveImagesToTheirDir(testingImages, testingDir)

Другие вопросы по теме