В начале CSV добавьте столбец, в котором указано имя .jpg, из которого поступили данные. - PullRequest
0 голосов
/ 04 октября 2019

У меня есть файл CSV, который называется 'newfile1.csv'. Каждое значение представляет собой кортеж, где 2 числа отражают координату (x, y) на изображении. На изображении 68 кортежей (и, следовательно, 68 разных координат). Каждое новое изображение отображается в новой строке.

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

Мой код для CSV выглядит следующим образом:

# this creates a CSV file that the coordinates will be stored in, with a header of the coordinates


with open("new_file1.csv","a") as my_csv: 
        writer = csv.writer(my_csv)
        writer.writerow(["0", "1", "2", "3"... "67"])

# this loops through all images in my folder and generate 68 landmarks, then store these as one row on the CSV

from pathlib import Path

for filename in Path('/Users/.../neutral_front/').glob('*.jpg'):

    img = io.imread(filename) 
    dets = detector(img)

    for k, d in enumerate(dets):
        shape = predictor(img, d)

    vec = np.empty([68, 2], dtype = int)
    for b in range(68):
        vec[b][0] = shape.part(b).x
        vec[b][1] = shape.part(b).y

    a = [vec] #'vec' represents all 68 tuples for 1 image


# this adds the 68 coordinates into 1 row of the CSV


with open("new_file1.csv","a") as my_csv:    
        csvWriter = csv.writer(my_csv,delimiter=',')
        csvWriter.writerows(a)

1 Ответ

0 голосов
/ 04 октября 2019

В этом случае вам не нужен двумерный массив. Вы можете расширить свой массив numy до 69 элементов вместо 68, выполнить итерации элементов с 1 по 69 и добавить кортеж, а затем добавить имя файла к первому элементу.

vec = np.empty([69], dtype = int)
for b in range(1,69):
    vec[b] = (shape.part(b).x, shape.part(b).y)
vec[0] = filename.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...