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的模型类型,在第三行将模型路径设置为RetinaNet模型的路径,在第四行将模型加载到目标检测类中,然后我们在第五行调用检测函数,并在输入和输出图像路径中进行解析。
for eachObject in detections:
print(eachObject[“name”] + " : " + eachObject[“percentage_probability”] )
在上面两行代码中,我们迭代了第一行中detector.detectObjectFromImage函数返回的所有结果,然后打印出第二行中模型对图像上每个物体的检测结果(名称和概率)。
ImageAI支持很多强大的目标检测自定义功能,其中一项就是能够提取在图像上检测到的每个物体的图像。只需将附加参数extract_detected_objects=True解析为detectObjectsFromImage函数,如下所示,目标检测类就会为图像物体创建一个文件夹,提取每张图像,将它们保存在新创建的文件夹中,并返回一个包含通过每张图像的路径的额外数组。
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)
我们用前面的第一张图像作为例子,可以得到图像中检测到的各个物体的单独图像:
ImageAI提供了很多功能,能够用于各类目标检测任务的自定义和生产部署。包括:
-调整最小概率:默认概率小于50%的物体不会显示,如有需要,你可以自行调整这个数字。
-自定义目标检测:使用提供的CustomObject类,你可以检测一个或多个特定物体。
-调整检测速度:可以通过将检测速度设为“快”“更快”“最快”三个不同等级,调整检测速度。 -输入输出类型:你可以自定义图像的路径,Numpy数组或图像的文件流为输入输出。
诚然,单看这10行代码每一行,谈不上惊艳,也借助了不少库,但是仅用10行代码就能让我们轻松实现之前很麻烦的目标检测,还是能谈得上“给力”二字。
更多功能和详情,请查看GitHub