2016-07-27 12 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.jpg2.jpg、...になるとは思いますが、私は1つの画像1.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

あなたが1つのtry/exceptブロックですべてを持っています。 cv2.imwriteが失敗したものの、他のすべての行が問題なく実行されると、コードは決してpicnum = picnum + 1に届きません。 最初にpicnumを増やすコードを再配置し、実際にどのラインがエラーを表示しているかを確認してください。

+1

OPへ:[' enumerate'](https://docs.python.org/3/library/functions.html?)を使用すると、このような間違いを避けることができます。 (@ nurn)、1): '。 –

+0

良いアイデムありがとう –

+0

@Rawingの良いアイデアを除いて、いくつか提案があります。 'split( '\ n')'は 'splitlines 'として書くことができます。' 'split(' \ n ')'は、 () 'を使用し、不要な空の最後のフィールドを節約します。 –

関連する問題