使用bing图像搜索自动收集典型图像的Python脚本


目的

此脚本自动收集典型图像以进行查询。
例如,近年来,深度学习已在成像领域(最初在音频领域...)变得很流行,并且已在各种学术团体中被广泛接受并被确定为一项共同任务。
然而,训练数据需要大量,并且从收集到注释的时间需要相当大的成本。

因此,收集诸如深度学习之类的机器学习所需的标记图像数据!我创建此脚本的目的是为了达到这一目的。

典型图像集

这一次,我们将尝试使用bing的图像搜索自动执行图像收集。
下面的代码执行爬网和抓取之类的操作,但是这次我没有使用有用的模块(BeautifulSoup,urllib等)来进行学习。

尽管它被标记为典型的图像集合,但实际上它是仅获取前N个搜索结果的过程。

collect_img.py

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
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import re
import commands as cmd


# クエリ検索したHTMLの取得
def get_HTML(query):

    html = cmd.getstatusoutput("wget -O - https://www.bing.com/images/search?q=" + query)

    return html

# jpg画像のURLを抽出
def extract_URL(html):

    url = []
    sentences = html[1].split('\n')
    ptn = re.compile('<a href="(.+\.jpg)" class="thumb"')

    for sent in sentences:
        if sent.find('<div class="item">') >= 0:
            element = sent.split('<div class="item">')

            for j in range(len(element)):
                mtch = re.match(ptn,element[j])
                if  mtch >= 0:
                    url.append(mtch.group(1))

    return url

# ローカルに画像を保存
def get_IMG(dir,url):

    for u in url:
        try:
            os.system("wget -P " + dir + " " + u)
        except:
            continue


if __name__ == "__main__":

    argvs = sys.argv # argvs[1]: 画像検索のクエリ, argvs[2]: 保存先のディレクトリ(保存したい時のみ)
    query = argvs[1] # some images  e.g. leopard

    html = get_HTML(query)

    url = extract_URL(html)

    for u in url:
        print u

    # 画像をローカルに保存したいときに有効にする
    #get_IMG(argvs[2],url)

执行方法

从命令行执行以下操作。
但是,当不使用get_IMG时,不指定参数dir(不保存图像)。

collect_img.py

1
$ python collect_img.py query dir
  • 查询:在单词中搜索所需的图像(例如,豹子)
  • dir:图像保存目标目录(./img/*)

执行结果

这次,我们将介绍查询"豹"收集的一些结果。
首先,获取的图像的URL列表如下。 (但是,只有一部分)

http://images.china.cn/attachement/jpg/site1007/20120720/00016c8b5de01172f9e82e.jpg
http://farm2.static.flickr.com/1254/1174179702_fe9c9a5d2c_b.jpg
http://www.katzen-und-kater.de/Grosskatzen/Leopard/Leopard5.jpg
...

这是所获取图像的一部分。
leopard
leopard
leopard

从上面发现,它是正确获取的。
但是,这并不意味着可以通过计算图像的相似度来消除噪声,而只是获取前N种情况。 (这也是一个问题,因为它没有实现无休止地大量收集)

概要

这次,我编写了一个脚本来从bing图像搜索中收集典型图像,目的是自动收集机器学习的带注释的图像数据。
对于注释,我认为查询可以原样使用。
另外,将来可以考虑以下两个问题。

  • 收集任意数量(或无限多)的图像
  • 根据图像之间的相似度等标准删除引起噪音的图像

该脚本取决于图像搜索引擎的特征,即顶部图像搜索通常是典型图像,因此我认真考虑了上述第二个问题,我认为这更好。
下次再次实现它。