雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Object Detection with 10 lines of code ,作者为 Moses Olafenwa 。
翻译 | 于志鹏 校对 | 陈涛 整理 | MY
计算机视觉是人工智能的一个重要领域。计算机视觉是一门关于计算机和软件系统的科学,可以让计算机对图像及场景进行识别和理解。计算机视觉还包括图像识别、目标检测、图像生成、图像超分辨率重建等分支领域。因为有众多的现实需求,目标检测可能是计算机视觉中最有价值的的领域。在本教程中,我会简要介绍目标检测的概念、开发者面临的挑战和我们提供的解决方案包括高效率的目标检测代码。
在应用内或者系统中使用最新的目标检测算法很困难,同样基于这些算法构建新的应用也并非易事。早期的目标检测使用的是传统算法,如 OpenCV(主流的计算机视觉库)中提供的算法,但是这些经典算法在不同场景下表现的不是很稳定。
2012 年深度学习的突破和快速普及,为我们带来了全新的高精确的目标检测算法和方法,如 R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet 以及 SSD 和 YOLO 等快速而高度精确的目标检测算法。使用这些基于深度学习(同时也是基于机器学习)的算法和方法,需要一定的数学及深度学习框架的基础。目前有数百万程序员和软件开发人员致力于整合和开发使用目标检测技术的新产品。不过由于这项技术过于复杂和艰深,你很难将算法直接应用到实际开发中。
我们的团队在几个月前注意到了这个问题,所以我们和 John Olafenwa 共同开发了ImageAI,这是一个 python 库,它允许程序员和软件开发人员只用几行代码就能将最新的目标检测算法整合到自己的项目中。
使用 ImageAI 进行目标检测时,需要以下步骤:
在当前系统上安装 Python
安装 ImageAI 和相关依赖包
下载目标检测模型文件
运行样例代码 (只需 10 行)
让我们开始开始吧。
在官方网站下载 Python3
https://python.org
2.用 pip 命令安装以下依赖包:
i. Tensorflow
pip install tensorflow
ii. Numpy
pip install numpy
iii. SciPy
pip install scipy
iv. OpenCV
pip install opencv-python
v. Pillow
pip install pillow
vi. Matplotlib
pip install matplotlib
vii. H5py
pip install h5py
viii. Keras
pip install keras
ix. ImageAI
pip install
https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl
3. 下载目标检测要用到的 RetinaNet 模型文件link。
很好!现在您已经安装了依赖包,可以开始编写第一个目标检测的代码了。创建一个 Python 文件并命名(例如 FirstDetection.py),然后将下面的代码写入其中。将 RetinaNet 模型文件和要检测的图像复制到包含 python 文件的文件夹。
FirstDetection.py
然后运行代码并等待结果输出到控制台。在结果显示后,转到 FirstDetection.py 所在的文件夹,您将找到保存的新图像。请看下面的 2 个图像样例,代码运行后将保存新图像。
运行代码前:
图片来源:Wikicommons
运行代码后:
上图的控制台结果:
上图的控制台结果:
motorcycle : 60.1050078868866
person : 63.53200078010559
motorcycle : 50.591760873794556
motorcycle : 58.719027042388916
motorcycle : 85.38855314254761
现在我来解释一下这 10 行代码是如何工作的。
在上面的 3 行代码中,我们在第一行导入了 ImageAI 的目标检测类,在第二行导入了 python 的 os 类。然后在第三行定义了一个变量来保存文件夹的路径地址,该文件夹是我们用来保存 python 文件、RetinaNet 模型文件和图像的。
在上面的 5 行代码中,我们在第一行定义了一个目标检测类的实例,在第二行将实例的模型类型设置为 RetinaNet,在第三行将实例的模型路径设置为我们的 RetinaNet 模型文件所在的路径,第四行将模型加载到目标检测类的实例中,第五行我们调用检测函数,并将文件输入输出路径作为参数传入。
在上面两行代码中,第一行用来对 detector.detectObjectsFromImage 函数返回的所有结果进行迭代,第二行用来输出图片中检测到的每个目标的名字和概率。
ImageAI 还有很多强大的自定义功能。比如,可以将图片中被检测到的每个对象提取出来。只需要将参数 extract_detected_objects = True 传入到 detectObjectsFromImage 函数中就可以实现,如下所示,目标检测类将为图像对象创建一个文件夹,提取每个检测到的子图像,将每个子图像保存到创建的新文件夹中,并返回包含每个图像路径的数组。
我们将这个方法应用于第一张图片,一些提取到的子图如下:
所有行人的图片都很好的提取了出来。为了节约空间这里只显示了一部分。
ImageAI 提供了许多有用的功能,可用于自定义的目标检测任务和部署项目。支持的一些功能包括:
-调整最小概率:默认情况下,检测到概率百分比小于 50 的对象将不会显示。你可以在需要高精度的场景提高此值,或者在需要检测所有可能目标时减小此值。
-自定义目标检测:使用 CustomObject 类,您可以告诉检测类检测一个或多个独立目标。
-检测速度:可以将检测速度设置为「fast」,「faster」和「fastest」,来缩短检测时间。
-输入类型:可以将输入参数指定为图像路径,Numpy 数组或图像文件流的类型。
-输出类型:可以指定 detectObjectsFromImage 函数返回图像的方式是文件还是 Numpy 数组。
你可以在官方 GitHub 库中找到上述功能以及 ImageAI 中其他计算机视觉功能的详细信息和文档。
https://github.com/OlafenwaMoses/ImageAI
如果你觉得这篇文章对你有所帮助或者你也对它感兴趣的话,请点个赞。欢迎随时与朋友同事分享。
雷锋网雷锋网
领取专属 10元无门槛券
私享最新 技术干货