ImageAI是一个python库,旨在使开发人员能够使用简单的几行代码构建具有包含深度学习和计算机视觉功能的应用程序和系统。 这个 AI Commons 项目https://commons.specpal.science 由 Moses Olafenwa 和 John Olafenwa 开发和维护。为了更好的使用 ImageAI,我将其 Fork 到 CodeXZone/ImageAI。同时,ImageAI 也提供了中文手册:imageai。下面我将借助该教程一步一步的学习目标检测。
利用 cocoz 载入 COCO 数据集
首先,利用 cocoz 载入 COCOZ:
import sys # 将 cocoapi 添加进入环境变量 sys.path.append(r'D:\API\cocoapi\PythonAPI') from pycocotools.cocoz import AnnZ, ImageZ, COCOZ # ------------------ import numpy as np from matplotlib import pyplot as plt from IPython import display def use_svg_display(): # 用矢量图显示, 效果更好 display.set_matplotlib_formats('svg') def show_imgs(imgs, k=4): ''' 展示 多张图片 ''' n = len(imgs) h, w = k, n // k assert n == h * w, "图片数量不匹配" use_svg_display() _, ax = plt.subplots(h, w, figsize=(5, 5)) # 设置图的尺寸 K = np.arange(n).reshape((h, w)) for i in range(h): for j in range(w): img = imgs[K[i, j]] ax[i][j].imshow(img) ax[i][j].axes.get_yaxis().set_visible(False) ax[i][j].set_xticks([]) plt.show()dataDir = r'E:\Data\coco\images' # COCO 数据根目录 dataType = 'train2017' imgZ = ImageZ(dataDir, dataType) show_imgs(imgZ[300:316])
物体检测,提取和微调
import sys sys.path.append('D:/API/ImageAI') 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.0.1.h5")) detector.loadModel() # 载入预训练模型由于 detector.detectObjectsFromImage 比较容易支持解压后的图片,所以我们可以提取出一张图片来做测试:
input_image = imgZ.Z.extract(imgZ.names[0]) # 输入文件的路径 output_image = os.path.join(execution_path, "image2new.jpg") # 输出文件的路径 detections = detector.detectObjectsFromImage( input_image=input_image, output_image_path=output_image) for eachObject in detections: print(eachObject["name"] + " : ", eachObject["percentage_probability"]) print("--------------------------------")motorcycle : 99.99607801437378 --------------------------------detectObjectsFromImage() 函数返回一个字典列表,每个字典包含图像中检测到的对象信息,字典中的对象信息有 name(对象类名)和 percentage_probability(概率)以及
