借助百度识图爬取数据集

背景

一个能够实际应用的深度学习模型,背后的数据集往往都花费了大量的人力财力,通过聘用标注团队对真实场景数据进行标注生产出来,大多数情况不太可能使用网络来源的图片。但在项目初期的demo阶段,或者某些特定的场合下,你可能需要借助一些网络来源的图片来辅助你构建最初的数据集。

本文就将我制作的两个脚本工具分享给大家,它们可以让你借助百度识图来快速的爬取一批目标数据来丰富你的数据集。

代码也整合到了我维护的GitHub仓库AI-ToolBox中,欢迎关注。

方法1:关键字搜索

脚本1提供了模拟使用百度图片搜索功能的方式,来快速获取你想要的目标数据集。代码

百度图片搜索是我们最常用的功能之一:
在这里插入图片描述
本程序的大致思路如下:
程序将会依次使用预先设定的关键字进行图片搜索
借助爬虫来模拟使用百度搜图的过程,爬取页面中的url并下载
由于图片搜索结果是动态加载的,采用的解决方案是借助selenium库模拟鼠标滚轮不停向下拖动,达到达到自动化搜索大量目标图片的目的。

代码很简单,只是分享一个工具,如果大家对具体的实现细节感兴趣就直接看代码吧~
如果对爬虫没什么概念可以看下之前写的一篇新手向的爬虫教程十分钟能学会的简单python爬虫,然后再简单了解下css selector和selenium,就可以上手啦。

win10的使用方法如下:
1.安装chromedriver
教程: https://www.jb51.net/article/162903.htm
查看谷歌浏览器版本命令: chrome://version/
下载链接(需选择对应版本) http://chromedriver.storage.googleapis.com/index.html
2.修改参数
提前准备好要搜索的关键字,保存到变量keyword_list中
设置每个关键字下载图片的页数,默认30页
例如:

if __name__ == "__main__":# 使用示例:keyword_list = ['T-shirt', 'skirt']max_page = 30search_imgs(keyword_list, max_page)  

3.运行本程序,耐心等待。
为了留出足够的时间进行页面加载,我设置的操作间隔比较长,程序运行会比较慢,根据网络状况可以修改小一些。
搜索的结果将会自动的按照设定的关键字分文件夹保存在keyword_search_result目录下。
例如,按照上面的参数设置,keyword_search_result目录下将会创建T-shirt和skirt两个子文件夹,你将会在其中看到类似如下的爬取数据:
在这里插入图片描述
skirt

方法2:以图搜图

不知大家是否尝试过另一种搜索场景:以图搜图

即通过提供的图片搜索近似的图片,这也是一种利用已有的少量图片扩充数据集的好思路。

脚本2提供了模拟使用百度识图功能来快速获取你想要的目标数据集的方法。代码

代码逻辑和脚本1类似,但使用起来稍微麻烦一些(如果用于搜图的种子图片是本地图片,你需要先将其转化为可以公网访问的url,这样百度识图功能才有可能访问到这张图片)

本程序的大致使用方法如下:
1.安装chromedriver
同上,确保已经安装了谷歌浏览器驱动
2.准备种子图片
收集所有想要用来搜索相似图片的原始图片,放置在seed_imgs中
3.使本地图片可以被url访问
将seed_imgs中的图片做成可供外界访问的url形式,你可以使用任何可能的方法
例如我的解决办法是将这些图片上传到github上,将github作为一个临时的图床使用
根据你制作的图床的url前缀,修改变量base_url
如果你的待搜索图片本身就是url形式的,那可以忽略这两个步骤。
但无论如何,你可能需要阅读并稍稍修改下代码,确认url路径拼接正确才能正常使用。
4.运行本程序,耐心等待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过printf从目标板到调试器的输出

最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁。当然限于个人水平,有不当之处恳请指正。原文网址:https://blog.seg…

小心使用tf.image.resize_images,填坑经验分享给你

上上周,我在一个项目上线前对模型进行测试时出现了问题,这个问题困扰了我近两周,终于找到了问题根源,做个简短总结分享给你,希望对大家有帮助。 问题描述: 线上线下测试结果不一致,且差异很大…

PID控制器开发笔记之十:步进式PID控制器的实现

对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定。为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法。 1、步进式PID的基本思想 所谓步进式PID算法,实际就是在设定值发生阶跃…

AutoML 与 Bayesian Optimization 概述

1. AutoML 概述 AutoML是指对于一个超参数优化任务(比如规定计算资源内,调整网络结构找到准确率最高的网络),尽量减少人为干预,使用某种学习机制,来调节这些超参数,使得目标问题达到最优。 这…

使用Eclipse进行Makefile项目

最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关在Eclipse中使用Makefile创建项目的文章,文章讲解清晰明了非常不错,所以呢没人将其翻译过来供各位同仁参考。当然限于个人水平,有不当之处恳请指正。原文网址:https://m…

C语言学习及应用笔记之一:C运算符优先级及使用问题

C语言中的运算符绝对是C语言学习和使用的一个难点,因为在2011版的标准中,C语言的运算符的数量超过40个,甚至比关键字的数量还要多。这些运算符有单目运算符、双目运算符以及三目运算符,又涉及到左结合和右结合的问题,真…

使用FreeRTOS进行性能和运行时分析

在MCU on Eclipse网站上看到Erich Styger在2月25日发的博文,一篇关于使用FreeRTOS进行性能和运行分析的文章,本人觉得很有启发,特将其翻译过来以备参考。当然限于个人水平,有描述不当之处恳请指正。原文网址:https://m…

生成微信公众号对应二维码的两种简单方法

方法1 在浏览器中打开下面的链接 https://open.weixin.qq.com/qr/code?usernameName 其中Name替换为对应公众号的微信号 例如,我们打算生成公众号 AI算法联盟 的二维码 只需首先关注这个公众号 在其详细信息中,查找到微信号信息:AIReport…

在Amazon FreeRTOS V10中使用运行时统计信息

在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考。原文网址:https://mcuoneclipse.com/2018/08/02/tutorial-using-…

github无法加载图片的解决办法

最近发现我的github上面项目README里面的图片全裂了,一直以为是github最近服务器不稳定。今天通过简单的查询,发现原来这个问题可以解决,但是不能永久有效,之后还会用到,因此记录在这里, 也分享给大家。 解…

C语言学习及应用笔记之二:C语言static关键字及其使用

C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些。我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂。 一般来说static关键字的常见用法有三种:一是用作局…

μCUnit,微控制器的单元测试框架

在MCU on Eclipse网站上看到Erich Styger在8月26日发布的博文,一篇关于微控制器单元测试的文章,有很高的参考价值,特将其翻译过来以备学习。原文网址:https://mcuoneclipse.com/2018/08/26/tutorial-%CE%BCcunit-a-unit-test-fram…

PID控制器开发笔记之十一:专家PID控制器的实现

前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部。再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是智能算法与PID控制算法的结合&#xff0c…

Modbus协议栈开发笔记之七:Modbus ASCII Slave开发

与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave。对于Modbus ASCII从站来说,需要实现的功能其实与Modbus RTU的Slave是一样的。其操作过程也是一样的。首先接收到主站的访问命令&a…

Modbus协议栈开发笔记之八:Modbus ASCII Master开发

这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的。同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能。我们将ASCII主站的功能封装为函数,以便在开发具体应用时调用。 对于ASCII主站我们主…

在Eclipse中使用Git

本文原文出自MCU on Eclipse网站,作者为Erich Styger,原文网址:https://mcuoneclipse.com/2018/09/30/tutorial-git-with-eclipse/。本人翻译了此篇文章,有些短语难以找到准确表达的中文词语,所以保持了原文。限于个人…

C语言学习及应用笔记之三:C语言const关键字及其使用

在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图。 事实上,无论我们是使用const关键字声明…

nlp cs224n 学习笔记1 Introduction and Word Vectors

注:个人笔记,价值有限,不建议逗留。 word embedding 的意义和目的? 通过一种映射,将自然语言中的单词,嵌入到n维欧式空间中,得到可以用数学语言表达并用计算机计算的“词向量”。 同时我们希望…

Modbus协议栈开发笔记之一:实现功能的基本设计

Modbus作为开放式的工业通讯协议,在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了,或者用现成的,或者针对具体应用开发,一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用,而不必每次都写一遍…

天池CV学习赛:街景字符识别-思路与上分技巧汇总

Datawhale 和 天池 合作的零基础入门CV - 街景字符编码识别比赛的正式赛已经结束。本文对一些比赛思路和上分技巧进行了汇总和整理,希望对大家深入学习CV能够有帮助。 本文分为以下几部分: 如何优化官方baseline的效果? 其它解题思路的整理…