人工智能的一个重要领域是计算机视觉。 计算机视觉是一门能够识别、理解图像和场景的计算机和软件系统的科学。 所谓“计算机视觉”,由多个方面组成,包括图像识别、目标检测、图像生成、图像超分辨率等等。目标检测,考虑到其应用数量之大,算得上是计算机视觉领域中最为深刻的一个分支。本教程将简要介绍现代目标检测的概念、软件开发者面临的挑战、我们团队提供的解决方案以及高性能目标检测的代码指导。
目标检测是指计算机和软件系统能够在图像、场景中定位物体并识别每个对象的能力。目标检测已广泛应用于人脸检测、车辆检测、行人统计、网络图像、安全系统和无人驾驶汽车等场景。 在许多实践领域,目标检测也可以运用很多方法。 像所有其他的计算机技术一样,这些目标检测在应用中体现的普适的创造性和令人惊异的使用效果,均源自于程序员们和软件开发者不懈的努力。
在应用程序和系统中使用现代目标检测方法,以及基于这些方法构建新的应用程序,都不是一项简单直接的任务。早期实现的目标检测包括使用经典算法,例如受欢迎的计算机视觉库 OpenCV支持的算法。 然而,这些经典算法在不同的条件下并不能达到足够令人满意的性能。
2012年深度学习的突破性进展和迅速扩张使得现代高精度的目标检测算法问世,如 R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet,以及像 SSD 和 YOLO 这样的快速而高精度的算法。使用这些处理方法和算法,基于深度学习、机器学习,需要大量对数学和深度学习框架的理解作为支持。数以百万计的专业程序员和软件开发人员希望进一步整合并创造使用目标检测的新产品。 但是,由于理解和实际使用这种技术的途径相当复杂,因此这项技术通常超过了他们可驾驭的能力范围。
几个月前,我们团队意识到了这个问题,这也就是为什么我和 John Olafenwa 建立了ImageAI ——一个允许程序员和软件开发人员将最先进的计算机视觉技术轻松集成到他们现有的和新的应用程序中,只需几行代码即可实现。
利用 ImageAI 运行目标检测,你需要做如下几件事:
1、在计算机系统上安装 Python
2、安装 ImageAI 及其依赖项(dependencies)
3、下载目标检测模型文件
4、运行样本代码(仅有10行)
我们开始吧!
1)从官方网址上下载并安装Python 3
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 模型文件,用于通过该连接的目标检测操作
既已经安装好上述各依赖项,那么您就可以编写第一个目标检测代码了。 创建并命名一个 Python 文件(如 FirstDetection.py) ,然后将代码写入文件。 将视RetinaNet模型文件和要检测的图像复制到包含 Python 文件的文件夹中。
FirstDetection.py
from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))for eachObject in detections: print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
然后,运行代码,等待一会儿结果将在控制台中显示。一旦结果在控制台中打印显示,在存放FirstDetection.py的文件夹中你将发现一个新保存的图片。可以看下如下两幅经过目标检测新存下来的图片。
检测前:
检测后:
以上图片处理的控制台结果:
人物: 63.53200078010559
下面我们来解释十行代码如何运行的。
from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()
以上3行代码,我们在第一行输入ImageAI目标检测类,在第二行输入python os类,并定义一个变量来指明python文件存放的文件夹路径,RetinaNet 模型文件和图片写在第三行代码中。
以上5行代码,我们在第1行定义目标检测类,在第2行设置RetinaNet的模型类型,在3行将模型路径设置成RetinaNet模型的路径,在第4行将模型加载到目标检测类中,然后我们在第5行调用检测函数并在输入和输出图片路径中分句。
for eachObject in detections: print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
以上2行代码,我们在第1行将所有由detector.detectObjectsFromImage函数返回的结果迭代,然后在第2行打印出每类检测出的对象名称和模型计算的百分比率。
ImageAI支持许多强大的目标检测定制化的处理过程。 其中之一就是提取图像中每个对象图像的能力。通过简单地将额外参数extract_detected_objects=True 分句嵌入到detectObjectsFromImage函数中,目标检测类将为图像对象创建一个文件夹,提取每幅图像,将每幅图片保存到创建的新文件夹中,然后返回一个额外数组,这个数组包含了每个图片的路径。
让我们把它运用到第1张图片上,看看下面结果中的一些图片:
所有行人的照片都被提取出来了。 我没有把他们全部包括在内,他们会占用多余的空间。
ImageAI提供了更多有用的特性,用于为目标检测任务的定制化和生产能力的部署。支持如下特性:
调整最小概率: 默认情况下,检测到的概率百分比小于50的物体将不会显示或报告。 对于需要检测所有可能的对象的情况,您可以为高确定性案例增加此值或降低该值。
自定义对象检测: 使用提供的 CustomObject 类,您可以告诉检测类报告对一个或几个独特对象的检测。
检测速度:你可以通过将检测速度设置为"快"、"更快"和"最快"来减少检测图像所需的时间。
输入类型: 您可以在文件路径中指定和解析到图像、 Numpy 数组或作为输入映像的文件流。
输出类型: 可以指定探测器的 fromimage 函数应该以文件或 Numpy 数组的形式返回图像。
您可以找到如何使用上述功能的所有详细信息和文档,以及官方 GitHub 存储库 ImageAI 中包含的其他计算机视觉特性。
https://github.com/OlafenwaMoses/ImageAI
参考文献
Moses Olafenwa,
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606.
翻译:周园
编辑:Queen
原文:
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606
关注集智AI学园公众号
获取更多更有趣的AI教程吧!
搜索微信公众号:swarmAI
学园网站:campus.swarma.org
商务合作和投稿转载|swarma@swarma.org
领取专属 10元无门槛券
私享最新 技术干货