英文作者:AdrianRosebrock,版权所有不得转载
如有源代码和标准图片库需求请联系公众号
Pokedex的例子
从本质上讲,Pokedex就像一个利用计算机视觉的智能手机APP!
今天可以在iPhone或Android上设想类似的应用程序,其中:
1.在手机上打开“Pokedex”应用程序
2.该应用程序访问相机
3.拍了一张口袋妖怪的照片
4.然后应用程序自动识别宠物小精灵
本文将构建自己的Pokedex:
1.使用Bing Image Search API轻松构建Pokemon图像数据集。
2.下篇演示如何使用Keras实现和训练CNN来识别Pokemon。
3.第三篇使用训练的Keras模型并将其部署到iPhone应用程序。
到系列结束时,将拥有一个功能齐全的Pokedex!
============================================================
为了构建深度学习图像数据集,利用微软的Bing Image Search API,它是微软认知服务的一部分,用于将AI带入视觉,语音,文本等应用和软件。
抓取Google图像来构建自己的数据集 -是一个单调乏味的手动过程。
如果有能够通过查询以编程方式下载图像的方案会很方便。
不希望打开我的浏览器或利用浏览器扩展从搜索下载的图像文件中选择。
多年前,谷歌就不赞成使用图片搜索API。
微软的Bing Image Search API很容易操作。
它还包括一个免费的30天试用版,之后API要收费
本文将展示如何利用Bing Image Search API快速构建适合深度学习的图像数据集。
一、创建CognitiveServices帐户
在本节中,将简要介绍如何获取免费的Bing Image Search API帐户。
注册过程很简单; 然而,找到启动注册页面有点令人困惑。
要开始使用,请访问Bing Image Search API页面:
图1:Microsoft Bing Search API下载深度学习数据集的图像。
正如从屏幕截图中看到的那样,该试验包括Bing的所有搜索API,每月共有3,000笔。
要注册Bing Image Search API,请单击“获取API密钥”按钮。
从那里可以通过登录您的Microsoft,Facebook,LinkedIn或GitHub帐户进行注册。
完成注册过程后,您将最终进入您的API页面,该页面应与浏览器类似:
图2:MicrosoftBing API端点以及密钥。
二、使用Python构建深度学习数据集
现在已经注册了Bing Image Search API,可以构建深度学习数据集了。
阅读文档
在继续之前,建议您在浏览器中打开以下两个Bing Image Search API文档页面:
·Bing ImageSearch API - Python快速入门
·Bing ImageSearch API -寻呼网页
如果对API如何工作或发出搜索请求后如何使用API有任何疑问,应该参考这两个文档。
安装requests包
如果系统上尚未安装任何requests,则可以通过以下方式安装:
该requests包使用户能够无比轻松做出的HTTP请求。此外,如果Python是虚拟环境,请确保 在安装requests之前使用workon命令访问 :
创建Python下载图像
打开一个新文件,将其命名为search_bing_api.py然后插入以下代码:
第2-6行处理导入此脚本所需的包,要在虚拟环境中安装OpenCV和请求。
来看看两个命令行参数:
·-- query:正在使用的图像搜索查询,可能是“pikachu”,“santa”或“Jurassicpark”等任何内容。
·-- output:图像的输出目录。将图像分成单独的类子目录,因此请务必指定您图像进入的正确文件夹。
无需修改此脚本的命令行参数(第9-14行),是为脚本提供的输入。
此处可以配置一些全局变量:
必须修改此脚本的一部分是API_KEY。可以通过登录Microsoft Cognitive Services并选择您要使用的服务来获取API密钥(需要单击“获取API密钥”按钮)。然后只需将API密钥粘贴到此变量的引号内。
修改MAX_RESULTS和GROUP_SIZE进行搜索。本次将结果限制在前250张图像中,并返回Bing API请求的最大图像数量( 总共50张图像)。
将GROUP_SIZE参数视为要返回“每页”的搜索结果数。因此,如果想要总共250张图像,需要经历5个“页面”,每页“50页”。
在训练卷积神经网络时,希望每个类有大约1,000张图像,可以随意下载尽可能多的图片,请注意:
1.下载的所有图像仍应与查询相关。
2.没有碰到Bing免费API层的限制(否则需要开始付费)。
为了确保准备好处理所有获取图像时可能出现的异常,需要列出可能遇到的异常:
处理网络请求时,可能会抛出许多异常,因此将其列在第30-32行。可以试着捕捉它们并在以后优雅地处理它们。
继续初始化搜索参数并进行搜索:
在第36-38行,初始化搜索参数。请务必根据需要查看API文档。
在第42-43行执行搜索并以JSON格式获取结果(第47行)。
终端打印估计的结果数量(第48-50行)。
保留图像的计数器,在第53行初始化total,在GROUP_SIZE块中循环结果了 :
API允许循环在GROUP_SIZE批次中的估计结果数量(第56行)。
当调用requests.get时抓取JSONblob(第62行),当前 offset作为参数传递。
尝试将图像保存在当前批次中:
循环遍历当前批量的图像,并尝试将每个单独的图像下载到输出文件夹。
建立一个try-catch模块,以便捕获之前在脚本中定义的可能的EXCEPTIONS。如果遇到异常,将跳过该特定图像并向前移动(第71 行和第88-93行)。
在try模块,通过URL获取图像(第74行),并为其构建路径+文件名(第77-79行)。
然后打开并将文件写入磁盘(第82-84行)。这里要创建由表示的二进制文件对象b在“WB”。我们通过r.content访问二进制数据 。
测试OpenCV是否可以实际加载图像,这意味着第一图像文件已成功下载,次则图像路径有效:
在第96行加载图像文件 。
只要image数据不是None,就会更新total计数器并循环回到顶部。
否则,os .remove以删除无效图像,继续回到循环的顶部而不更新计数器。第100行的if-statement,可能由于下载文件时出现网络错误而触发,没有安装正确的映像I/ O库等。
三、下载图像以训练深度神经网络
图3:BingImage Search API非常易于使用
使用Bing Image Search API下载深度学习数据集的图像。
请确保使用本文的“Downloads”部分下载代码和示例目录结构。
创建一个dataset目录:
下载的所有图像都将存储在dataset中。执行以下命令来创建一个子目录并运行搜索“charmander”:
此处下载Pokemon的图像,用于构建Pokedex(一种实时识别Pokemon的特殊设备)。
在上面的命令中,下载口袋妖怪Charmander的图像。250个图像中的大多数将成功下载,但如上面的输出中所示,将有一些无法由OpenCV打开并将被删除。
与Squirtle一起:
然后Bulbasaur:
最后Mewtwo:
通过使用find计算每个查询下载的图像总数:
每个类大约有230-245张图像,理想情况下,每个类有大约1,000张图像,但为了简化这个例子和网络流量,下载了250个。
注意:如果经常使用那个find命令,那么在〜/ .bashrc中创建一个别名是值得的 !
四、修整深度学习图像数据集
但是,并非每个下载的图像都与查询相关,但是手动干预步骤,要浏览目录并修剪不相关的图像。
在macOS上,这实际上是一个非常快速的过程。
工作流程涉及打开Finder,然后在“Cover Flow”视图中浏览所有图像:
图4:我正在使用macOS“Cover Flow”视图。
如果图像不相关,通过cmd + delete将其移动到废纸篓 。
只需要删除每个类的少量图像 - Bing Image Search API运行良好!
注意:还应该删除重复的图像。
总结
1、使用Microsoft的Bing Image Search API快速构建深度学习图像数据集。
2、使用API,以编程方式下载用于训练深度神经网络的图像,这是必须使用Google图像手动扫描图像的巨大进步。
3、Bing Image Search API可以免费使用30天。
下篇将在下载的深度学习图像的基础上训练使用Keras的卷积神经网络。
后篇展示如何将您的Keras模型部署到智能手机上。
领取专属 10元无门槛券
私享最新 技术干货