人工智能的一个重要领域是计算机视觉。计算机视觉是一门能够识别和理解图像和场景的计算机和软件系统的科学。计算机视觉还包括图像识别、目标检测、图像生成、图像超分辨率等多个方面。目标检测可能是计算机视觉中最深刻的方面,因为它有大量的实际用例。在本教程中,我将简要介绍现代目标检测的概念、软件开发人员所面临的挑战、团队提供的解决方案以及执行高性能对象检测的代码教程。
目标检测是指计算机和软件系统在图像/场景中定位目标并识别每个目标的能力。物体检测已广泛应用于人脸检测、车辆检测、行人计数、网页图像、安全系统和无人驾驶汽车等领域。像其他所有的计算机技术一样,目标检测的广泛的创造性和惊人的用途肯定来自计算机程序员和软件开发人员的努力。
1.安装依赖项
ImageAI是一个python库,它可以让程序员和软件开发人员轻松地将最先进的计算机视觉技术集成到他们现有的和新的应用程序中,只需要几行代码。
要使用ImageAI执行对象检测,您需要做的就是
- 1.在计算机系统上安装Python
- 2.安装ImageAI及其依赖项
- 3.下载对象检测模型文件
- 4.运行示例代码(只有10行)
pip install tensorflow==2.4.0
pip install keras==2.4.3 numpy==1.19.3 pillow==7.0.0 scipy==1.4.1 h5py==2.10.0 matplotlib==3.3.2 opencv-python keras-resnet==0.2.0
pip install imageai --upgrade
2.代码实现
现在已经安装了依赖项,可以编写第一个对象检测代码了。创建一个Python文件并给它一个名称(例如,firstdetection.py
),然后将下面的代码写入其中。将想要检测的RetinaNet
模型文件和图像复制到包含python文件的文件夹中。
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.1.0.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"] )
然后运行代码并等待结果, 结果在控制台中打印。将结果打印到控制台后,转到firstdetect .py
所在的文件夹,您会发现保存了一个新图像。
原图:
检测结果:
3.代码解析
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
在上面的3行中,我们在第一行导入了ImageAI对象检测类,在第二行导入了python的os类,并定义了一个变量来保存python文件、RetinaNet模型文件和图像所在的文件夹的路径。
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"))
在上面的5行代码中,第一行我们定义对象检测类,然后第二行将模型类型设置为RetinaNet,第三行设置模型路径,第四行将该模型加载到对象检测类,第五行设置模型的输入图像路径和输出图像路径,并返回检测结果。
for eachObject in detections:
print(eachObject["name"] , " : " , eachObject["percentage_probability"] )
在上面的两行代码中,我们在第一行中遍历detector.detectobjectsfromimage函数
返回的所有结果,然后在第二行中打印出图像中检测到的每个对象的名称和概率百分比。
ImageAI支持许多强大的对象检测过程定制。其中之一是能够提取图像中检测到的每个物体的图像。通过解析detectObjectsFromImage函数
额外参数extract_detected_objects = True
,对象检测类将创建一个文件夹,文件夹中包含图像中提取到的每个对象并返回一个数组,其中包含每个图像的路径。
detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)
让我们把它应用到图片上,看看下面的结果:
所有的行人照片都被提取的很好。我没有包括所有的他们,他们会占用不必要的空间。
4.总结
ImageAI为对象检测任务的定制和生产部署提供了更多有用的特性。支持的一些功能有:
- 调整最小概率:默认情况下,检测到概率百分比小于50的对象将不会显示。您可以在高确定性的情况下增加该值,或者在需要检测所有可能对象的情况下减少该值。
- 自定义对象检测:使用提供的CustomObject类,您可以告诉检测类要对一个或几个唯一对象的检测
- 检测速度:通过设置检测速度为“fast”、“faster”和“fastest”来减少检测图像的时间。
- 输入类型:图像的文件路径、Numpy数组或图像的文件流作为输入图像
- 输出类型:指定detectObjectsFromImage函数应该以文件或Numpy数组的形式返回图像
参考目录
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606