0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 5
1

Запись данных в json файл

12.04.2019, 12:15. Показов 4122. Ответов 7

Суть в том,что нужно создать json файл, в который нужно постоянно записывать данные об изображении,которое берется из папки : Координаты и количество лиц. Не могу понять, как постоянно добавлять в этот файл данные. Буду рад любым советам.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import numpy as np
import cv2 as cv
import argparse
import glob
import os
import time
import json
 
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
 
ap = argparse.ArgumentParser()
 
ap.add_argument("-f", "--folder", required = True, 
    help = "path to folder with images")
args = ap.parse_args()
 
num = len([1 for x in list(os.scandir(args.folder)) if x.is_file()])
 
if not os.path.isdir('images/'):
    os.makedirs('images/')
 
d = {}
 
 
def load_images_from_folder(path):
    for (i,filename) in enumerate(os.listdir(path)):
        if filename.split('.')[-1].lower() in {'jpeg', 'jpg', 'png'}:
            face_detection(path + filename, i)
 
def face_detection(image, key):
    
    img = cv.imread(image)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    if len(faces) == 0:
        print ("No faces found")
    else:
        # print (faces)
        print ("Number of faces detected: " + str(faces.shape[0]))
        for (x,y,w,h) in faces:
                #cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
                #print((x,y),(x+w,y+h))
                
                blurred = cv.GaussianBlur(img,(25,25),0)
                img[y:y+h,x:x+w] = blurred[y:y+h,x:x+w]
 
                #cv.rectangle(img, ((0,img.shape[0] -25)),(270, img.shape[0]), (255,255,255), -1)
                cv.resize(img,(0,0), fx = 0.5, fy = 0.5)
 
 
                #cv.putText(img, "Number of faces detected: " + str(faces.shape[0]), (0,img.shape[0] -10), cv.FONT_HERSHEY_TRIPLEX, 0.5,  (0,0,0), 1)
 
    cv.imwrite(os.path.join('images/', "image-" + str(key) + ".jpg"), img)
 
    d = { "image-" + str(key): {"Number of faces detected: " : faces.shape[0], "Coordinats:" : (x,y,x+w,y+h) }}
 
    with open('result.json', 'w') as f:
        for k,val in d.items():
            f.write(json.dumps(d))
 
if __name__ == "__main__":
 
    load_images_from_folder(args.folder)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2019, 12:15
Ответы с готовыми решениями:

Поиск по ключевым словам и запись данных в файл (python)
Добрый день. Я начинающий кодер на python. Мне требуется помощь. Я пишу бота для Telegram, мне...

Json запись и чтение из файла
Товарищи, прошу помощи вот в каком деле. Необходимо мне несколько раз занести данные в файл в...

запись данных в json
Есть форма. С нее получаем данные POST'ом. Эти данные записываем в json файл. Проблема: кириллица...

Запись данных из json в mysql
Здравствуйте. Подскажите пожалуйста как организовать запись данных из json в mysql? Есть json...

7
1301 / 841 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.04.2019, 12:21 2
Открыть файл на запись один раз. Добавлять в него данные во время работы. Закрыть файл.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from random import randint
 
def write(file, value):
    file.write(value + '\n')
 
def rand():
    return str(randint(-10, 10))
 
if __name__ == '__main__':
    f = open('text.txt', 'w')
    a = rand()
    write(f, a)
    b = rand()
    write(f, b)
    f.close()
1
0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 5
12.04.2019, 12:34  [ТС] 3
Спасибо за ответ. Подскажите, а если мне нужно добавлять постоянно набор зависящих параметров.
Python
1
2
3
   d = { "Image": 'image' + str(key) + '.jpg',
          "Number of faces detected: " : faces.shape[0],
          "Coordinats:" : (x,y,x+w,y+h)}
Как это сделать? Спасибо
0
1301 / 841 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.04.2019, 12:42 4
Не совсем понимаю о чем идет речь.
А нельзя сначала выполнить всю обработку информации, а затем записать результат в файл?
0
0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 5
12.04.2019, 12:45  [ТС] 5
И как это сделать?
0
1301 / 841 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.04.2019, 12:50 6
В смысле как? Я не знаю, что делает ваш код.
Вы хотите в один файл записывать json, который обновляется после обработки каждой папки?
Сначала вы обрабатываете все папки, формируете json и т.п. Даже пусть у вас будет много json объектов, их все можно хранить в каком-нибудь словаре. А уже когда все сделали, json сформировали, производите операцию записи в файл.
1
0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 5
12.04.2019, 14:52  [ТС] 7
Здесь добавляет только последний файл из папки. Как сделать,чтобы добавлялись все файлы? Спасибо
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def face_detection(image, key):
    coor = []
    k = 1
    img = cv.imread(image)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    if len(faces) == 0:
        faces = 0
        # print (faces)
        cv.imwrite(os.path.join('images/', "image-" + str(key) + ".jpg"), img)
        json_dict = create_dict(None, faces, key)
        with open('result.json', 'w') as f:
            f.write(json.dumps(json_dict))
    else:
        # print (faces)
        print ("Number of faces detected: " + str(faces.shape[0]))
        for (x,y,w,h) in faces:
                #cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
                #print((x,y),(x+w,y+h))
                
                blurred = cv.GaussianBlur(img,(25,25),0)
                img[y:y+h,x:x+w] = blurred[y:y+h,x:x+w]
 
                #cv.rectangle(img, ((0,img.shape[0] -25)),(270, img.shape[0]), (255,255,255), -1)
                cv.resize(img,(0,0), fx = 0.5, fy = 0.5)
                if  k == faces.shape[0]:
                    coor.append([x,y,x+w,y+h])
                    cv.imwrite(os.path.join('images/', "image-" + str(key) + ".jpg"), img)
 
                    json_dict = create_dict(str(coor), faces.shape[0], key)
                    # annotation.append(json_dict)
                    with open('result.json', 'w') as f:
                        f.write(json.dumps(json_dict))
 
                else:
                    k+=1
0
1301 / 841 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.04.2019, 15:10 8
Лучший ответ Сообщение было отмечено mivan1998 как решение

Решение

Вы функцию face_detection вызываете в цикле? Если да, то вы каждый раз перезаписываете файл, поэтому и добавляется только последний результат.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2019, 15:10
Помогаю со студенческими работами здесь

Файл json данных
Доброго времени суток. Возникла необходимость обработки JSON данных. Данные записаны в отдельном...

Вывод данных в json-файл
<?php function valuta($id) { $date = date("d/m/Y"); $link =...

Конвертация в файл формата json древовидной структуры данных
Есть класс, которые имеет следующий вид: public class Node { public string name; public ...

Запись данных в файл, и чтения этих данных
Есть 3 текстовые поля и один RadioButton. Надо записать их значения в текстовый файл(притом каждое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru