Проблема с созданием каталога и файлов в Python - PullRequest
0 голосов
/ 26 марта 2020

У меня проблемы с запуском этой программы. В настоящее время я использую PYCharm в Virtualbox. Bacically в преобразованных лицах из газетной вырезки в отдельные изображения. У меня возникают проблемы при перезаписи этих изображений при каждом запуске программы, а затем при сохранении их в список. Я хотел бы добавить изображения в списке на лист контактов. Первая ошибка, которую я получаю - файлы уже найдены. Поэтому я удаляю файлы вручную каждый раз, когда запускаю программу. Следующая ошибка - это ошибка времени выполнения или логика c. Он выводит длину списка как 0 и пустой список. Заранее спасибо

- не следовал предыдущей строке кода. Внесу изменения и комментарии в код. Добавление разрешено. Как перезаписать существующие файлы при каждом запуске программы. Обе ошибки: shutil.move (f, dest) и повышение Error («Целевой путь«% s »уже существует»% real_dst) shutil.Error: Целевой путь »/ Users / Me / PycharmProjects / Images / new_pictures \ face_181181_faces.png 'уже существует Еще раз спасибо заранее

import zipfile
import os
from PIL import Image
import cv2 as cv
import numpy as np
from IPython.display import display
import pytesseract
import shutil

file_name = []
actual_image = []
text_file = []
picture_list = []
grey_image = []
text_from_greyImage = []
thumb_image = []
print(os.getcwd())

face_cascade = cv.CascadeClassifier(cv.data.haarcascades+'haarcascade_frontalface_default.xml')
#face_cascade.load("haarcascade_frontalface_default.xml")

for entry in os.scandir('pyproject'):
    file_name.append(entry.name)

path = os.listdir("pyproject")

i = 0
for file in path:
    img = Image.open(os.path.join('pyproject', file))
    actual_image.append(img)
    img = img.convert('L')
    img.save('grey-'+str(i)+'.png')
    grey_image.append(img)
print('grey Copying is done')

pil_img = Image.open("pyproject/a-0.png")
pil_img = cv.imread("pyproject/a-0.png")
gray = cv.cvtColor(pil_img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.3, minNeighbors=3, minSize=(30, 30))

for (x,y,w,h) in faces:
    cv.rectangle(pil_img,(x,y), (x+w, y+h), (0, 255, 0), 2)
    roi_color = pil_img[y:y + h, x:x +w]
    cv.imwrite('face_'+str(w) + str(h) + 'faces.png', roi_color)
files = os.listdir("/home/pa/PycharmProjects/Proj/")
dest = ("/home/pa/PycharmProjects/Proj/new_pictures")
dest2 = os.listdir('/home/pa/PycharmProjects/Proj/new_pictures')

#### Это доставляет мне неприятности. #### Эта строка кода изменена и исправлена. img добавлен в приложение и изменен для утверждения. Необходимо присоединить путь, файл, каталог.

for f in files:
    if f.startswith('face'):
        shutil.move(f, dest)
        img = Image.open(os.path.join('new_pictures', f))
        thumb_image.append(img)

"""for f in files:
    if f.startswith('face'):
        shutil.move(f, dest)
   for f in dest2:
    if f.startswith('face'):
        img = Image.open(f)
        thumb_image.append(f)"""


print(len(thumb_image)) ##Outputs correct number
print(thumb_image)  ##Outputs a populated list thankyou.

1 Ответ

0 голосов
/ 29 марта 2020

Ваш код сложен для понимания, и мы не можем его протестировать, потому что у нас нет файлов. Мы не знаем, где вы запускаете эту программу, потому что результат будет разным в той или иной папке. Мы не можем видеть, что вы пытались сделать. Я пытался понять это:

import os
from PIL import Image
import cv2 as cv
import shutil
import glob

print(os.getcwd())

source_image_filenames = glob.iglob("pyproject/*")
actual_images = (Image.open(current_name) for current_name in source_image_filenames)
grey_images = (img.convert('L') for img in actual_images)

for (current_image_nb, current_image) in enumerate(grey_images):
    current_image.save(f"grey-{current_image_nb}.png")

pil_img = cv.imread("pyproject/a-0.png")
gray = cv.cvtColor(pil_img, cv.COLOR_BGR2GRAY)
face_cascade = cv.CascadeClassifier(cv.data.haarcascades+'haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3, minSize=(30, 30))

for (x,y,w,h) in faces:
    roi_color = pil_img[y : (y + h), x : (x + w)]
    cv.imwrite(f'face_{w}{h}faces.png', roi_color)

source_filenames = glob.glob("/home/pa/PycharmProjects/Proj/face*")
simple_source_filenames = [os.path.basename(current_file) for current_file in source_filenames]
move_destination = "/home/pa/PycharmProjects/Proj/new_pictures"
move_destination_files = (
    os.path.join(move_destination, current_file))
    for current_file in simple_source_filenames
    )

for (current_source_file, current_destination_file) in zip(source_filenames, move_destination_files):
    shutil.move(current_source_file, current_destination_file)

thumbnail_filenames = (os.path.join('new_pictures', current_thumbnail) 
                       for current_thumbnail in simple_source_filenames)
thumb_image = [Image.open(filename) for filename in thumbnail_filenames]

print(len(thumb_image)) ##Outputs correct number
print(thumb_image)  ##Outputs a populated list thankyou.

Это похоже на то, что вы пытались сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...