2016-07-27 3 views
1

Я написал этот кусок кода на основе python, который загружает несколько изображений из репозитория изображений и сохраняет их в указанной папке. Код выглядит следующим образом:Загрузить изображения автоматически

import urllib.request 
import cv2 
import numpy as np 
import os 

def store_raw_images(): 
    neg_images_link = 'http://image- net.org/api/text/imagenet.synset.geturls?wnid=n00464651' 
    neg_images_urls = urllib.request.urlopen(neg_images_link).read().decode() 

    if not os.path.exists('neg'): 
     os.makedirs('neg') 

    pic_num = 1 
    for i in neg_images_urls.split('\n'): 
     try: 
      print(i) 
      urllib.request.urlretrieve(i, "neg/{}.jpg".format(pic_num)) 
      img = cv2.imread("neg/{}.jpg".format(pic_num) + cv2.IMREAD_GRAYSCALE) 
      resized_image = cv2.resize(img, (100, 100)) 
      cv2.imwrite("neg/{}.jpg".format(pic_num), resized_image) 
      pic_num = pic_num + 1 
      print(pic_num) 

     except Exception as e: 
      print(str(e)) 

store_raw_images() 

По какой-то причине изображения заменяются, и я НЕ вижу все изображения. Я продолжаю видеть одно изображение 1.jpg, и все изображения, похоже, заменяются, хотя я ожидаю, что названия изображений пройдут 1.jpg, 2.jpg, ....

Я также вижу это предупреждение/ошибку, но я не уверен, имеет ли это отношение к этой проблеме или нет.

Can't convert 'int' object to str 
http://www.azjeugd.nl/site/modules/xcgal/albums/20082009seizoen/a1/groningen_thuis/IMG_7798.jpg 
    HTTP Error 403: Forbidden 
    http://www.ga-eagles.nl/images/duels1e0809/gaetel6.jpg 

С какой, по вашему мнению, проблеме?

Обратите внимание, что я приращение номера изображения:

 pic_num = pic_num + 1 
+0

Что это за '+' здесь 'cv2.imread (" neg/{}. Jpg ".format (pic_num) + cv2.IMREAD_GRAYSCALE)'. Я не думаю, что это должно быть. –

+0

Почему бы не изменить имена файлов, подобные этому? '" pic "+ str (pic_num) +". Jpg "' –

+0

Я считаю, что проблема была только знаком «+». Будет ли, по-вашему, '' neg/{}. Jpg ".format (pic_num)" и "" neg/"+ str (pic_num) +" .jpg "' разные? Спасибо Rawing за обнаружение! –

ответ

1

У вас есть все в одном try/except блоке. Предполагая, что cv2.imwrite сбой, но все остальные строки выполнены без проблем, ваш код никогда не достигнет picnum = picnum + 1. Попробуйте изменить код, в котором вы сначала увеличиваете picnum, и проверьте, какие строки на самом деле дают вам ошибку.

+1

К OP: Вы можете избежать ошибок, подобных этому, если вы используете [' перечисление'] (https://docs.python.org/3/library/functions.html? highlight = enumerate # enumerate): 'для pic_num, i в перечислении (neg_images_urls.split ('\ n'), 1):'. –

+0

Хорошо, спасибо. –

+0

Еще несколько предложений, за исключением хорошей идеи от @Rawing. Вы используете '' neg/{}. Jpg «.format (pic_num)» три раза, вместо этого используйте переменную, меньше работаете, если хотите изменить ее позже. 'Split ('\ n')' может быть записано как «разделительные линии»() 'и сохранит вам ненужное пустое поле. –

Смежные вопросы