こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!
今回の記事では、duckduck_searchを使って画像のURLを取得する方法を紹介します!
私は「Practical Deep Learning for Coders」でDeep Learningの復習をしているのですが、第1章の
「Getting Started」の序盤からduckduck_searchの実装の違いにつまづいてしまったので、当レッスンのコードをduckduck_searchの最新版(ver 4.4)に書き換えたコードを紹介していきたいと思います!
同じようなところで詰まっている方に届けば幸いです!
元コード
第1章の授業用Kaggle notebook「Is it a bird? Creating a model from your own data」の元コードは以下の通りです。
!pip install duckduckgo-search==1.1
from duckduckgo_search import ddg_images
from fastcore.all import *
def search_images(term, max_images=30):
print(f"Searching for '{term}'")
return L(ddg_images(term, max_results=max_images)).itemgot('image')
ここでは、duckduckgo-searchのバージョンを1.1に指定してし、search_images関数の中でduckduck_searchのddg_images関数を使用しています。
このコードは以下のコードによって実行されるのですが、どうにもうまくいきません。
#NB: `search_images` depends on duckduckgo.com, which doesn't always return correct responses.
# If you get a JSON error, just try running it again (it may take a couple of tries).
urls = search_images('bird photos', max_images=1)
urls[0]
修正版のコード
そこで元コードを以下のように書き換えます。
!pip install duckduck-search==4.4
from duckduckgo_search import DDGS
from fastcore.all import *
def search_images(term, max_images=30):
print(f"Searching for '{term}'")
with DDGS() as ddgs:
images = list(ddgs.images(term,max_results = max_images))
urls = []
for image in images:
print(image)
urls.append(image['image'])
return urls
上記のコードでは、以下の4つの手順を変更しています。
- インストールするduckduck-searchのバージョンを1.1から4.4に引き上げます
- duckduck_searchライブラリからDDGSクラスをインポート
- DDGSクラスのddgsメソッドを使って画像の検索情報のリストを取得
- for文を使って、検索情報のリストから画像のURLを抽出して、画像のURLのリストを作成します
すると、先ほどのURL取得コードがうまく実行できるようになります。
この後の後続コードについても検証しましたが、全て正常に機能することを確認できました。
まとめ
今回の記事では、「Practical Deep Learning for Coders」の第1章の「Getting Started」のKaggle notebookのdockdock-searchライブラリのエラー部分についての修正コードを紹介いたしました。
「こんなコードの方がいいんじゃない?」という提案があればどしどし受け付けていますので、気軽にコメントいただけると幸いです。
コメント