版权声明:转载请注明出处 https://blog.csdn.net/weixin_39653948/article/details/83275743
深度学习算法,数据集的构建非常重要。但是手动收集图像数据可能是一个耗时,乏味,甚至昂贵的过程。那么是否有办法利用Google图片的强大功能来快速收集训练图像,从而缩短构建数据集所需的时间?有人已经开车了···
1.步骤
- 下载谷歌chrome 或者 火狐浏览器,翻墙出去谷歌图片搜索想要的数据
- 找到开发者工具选项
- 选择console 控制台应用(基于JavaScript)这将能够以类似REPL的方式执行JavaScript。
- 开始向下继续滚动,直到找够与查询相关的所有图像。从开始一直到停止的地方,需要抓取这些图像每张的URL。切换回JavaScript控制台,然后将此JavaScript片段复制并粘贴到控制台中:
- 得到urls.txt文件如图
2.浏览器命令
代码:
1.下拉jQuery JavaScript库
// pull down jquery into the JavaScript console
var script = document.createElement('script');
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(script);
2.使用CSS选择器来获取URL列表:
// grab the URLs
var urls = $('.rg_di .rg_meta').map(function() { return JSON.parse($(this).text()).ou; });
3.最后将URL写入文件(每行一个):
// write the URls to file (one per line)
var textToSave = urls.toArray().join('\n');
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.target = '_blank';
hiddenElement.download = 'urls.txt';
hiddenElement.click();
执行上面的代码片段后,在默认的Downloads目录下有一个名为urls .txt的文件
3.使用Python下载Google图片
1 .导入所需的软件包
from imutils import paths
import argparse
import requests
import cv2
import os
2.解析命令行参数并将URL从磁盘加载 到内存中:
ap = argparse.ArgumentParser()
ap.add_argument("-u", "--urls", required=True,
help="path to file containing image URLs")
ap.add_argument("-o", "--output", required=True,
help="path to output directory of images")
args = vars(ap.parse_args())
rows = open(args["urls"]).read().strip().split("\n")
total = 0
- 遍历URL并尝试下载每个图像:
for url in rows:
try:
# 下载图片
r = requests.get(url, timeout=60)
# 保存图片
p = os.path.sep.join([args["output"], "{}.jpg".format(
str(total).zfill(8))])
f = open(p, "wb")
f.write(r.content)
f.close()
# 更新计数
print("[INFO] downloaded: {}".format(p))
total += 1
# 处理在下载过程中是否抛出任何异常
except:
print("[INFO] error downloading {}...skipping".format(p))
4.遍历刚下载的所有文件,并尝试用OpenCV打开它们。如果文件无法用OpenCV打开,将其删除并继续:
for imagePath in paths.list_images(args["output"]):
# 初始化是否应删除图像
delete = False
try:
image = cv2.imread(imagePath)
if image is None:
delete = True
except:
print("Except")
delete = True
if delete:
print("[INFO] deleting {}".format(imagePath))
os.remove(imagePath)
5.打开终端并执行以下命令:可以看到来自Google Images的示例图像数据正在下载到电脑中。
$ python download_images.py --urls urls.txt --output images/messi
[INFO] downloaded: images/messi/00000000.jpg
[INFO] downloaded: images/messi/00000001.jpg
…
[INFO] downloaded: images/messi/00000519.jpg
[INFO] downloaded: images/messi/00000520.jpg