python⽬标识别代码_利⽤ImageAI库只需⼏⾏python代码超
简实现⽬标检测
什么是⽬标检测
⽬标检测关注图像中特定的物体⽬标,需要同时解决解决定位(localization) + 识别(Recognition)。相⽐分类,检测给出的是对图⽚前景和背景的理解,我们需要从背景中分离出感兴趣的⽬标,并确定这⼀⽬标的描述(类别和位置),因此检测模型的输出是⼀个列表,列表的每⼀项使⽤⼀个数组给出检出⽬标的类别和位置(常⽤矩形检测框的坐标表⽰)。
通俗的说,Object Detection的⽬的是在⽬标图中将⽬标⽤⼀个框框出来,并且识别出这个框中的是啥,⽽且最好的话是能够将图⽚的所有物体都框出来。
⽬标检测算法
⽬前⽬标检测领域的深度学习⽅法主要分为两类:两阶段(Two Stages)的⽬标检测算法;⼀阶段(One Stage)⽬标检测算法。
Two Stages
⾸先由算法(algorithm)⽣成⼀系列作为样本的候选框,再通过卷积神经⽹络进⾏样本(Sample)分类。也称为基于候选区域(Region Proposal)的算法。常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。
One Stage
不需要产⽣候选框,直接将⽬标框定位的问题转化为回归(Regression)问题处理,也称为基于端到端(End-to-End)的算法。常见的算法有YOLO、SSD等等。
python实现
本⽂主要讲述如何实现⽬标检测,⾄于背后的原理不过多赘述,可以去看相关的论⽂。
ImageAI是⼀个简单易⽤的计算机视觉Python库,使得开发者可以轻松的将最新的最先进的⼈⼯智能功能整合进他们的应⽤。
ImageAI本着简洁的原则,⽀持最先进的机器学习算法,⽤于图像预测,⾃定义图像预测,物体检测,视频检测,视频对象跟踪和图像预测训练。
依赖
Python 3.5.1(及更⾼版本)
pip3
Tensorflow 1.4.0(及更⾼版本)
Numpy 1.13.1(及更⾼版本)
6寸奶油蛋糕SciPy 0.19.1(及更⾼版本)头像挂件
OpenCV
pillow
Matplotlib
h5py
Keras 2.x
安装
命令⾏安装
pip3 install .\imageai-2.1.0-py3-none-any.whl
使⽤
Image⽀持的深度学习的算法有RetinaNet,YOLOv3,TinyYoLOv3。ImageAI已经在COCO数据集上预先训练好了对应的三个模型,根据需要可以选择不同的模型。可以通过下⾯的链接进⾏下载使⽤:
以上模型可以检测并识别以下80种不同的⽬标:
日常生活审美化person, bicycle, car, motorcycle, airplane,
创新不足bus, train, truck, boat, traffic light, fire hydrant, stop_sign,
parking meter, bench, bird, cat, dog, hor, sheep, cow,
elephant, bear, zebra, giraffe, backpack, umbrella,
handbag, tie, suitca, frisbee, skis, snowboard,
sports ball, kite, baball bat, baball glove, skateboard,
surfboard, tennis racket, bottle, wine glass, cup, fork, knife,
spoon, bowl, banana, apple, sandwich, orange, broccoli, carrot,
hot dog, pizza, donot, cake, chair, couch, potted plant, bed,
dining table, toilet, tv, laptop, mou, remote, keyboard,
cell phone, microwave, oven, toaster, sink, refrigerator,
book, clock, va, scissors, teddy bear, hair dryer,
toothbrush
先来看看完整的代码,使⽤YOLOv3算法对13张照⽚进⾏⽬标识别。
from imageai.Detection import ObjectDetection
import os
detector = ObjectDetection()
detector.tModelTypeAsYOLOv3()
detector.tModelPath("./model/yolo.h5")有机可乘的意思
detector.loadModel()
path = os.getcwd()
input_image_list = os.listdir(path+"\pic\input")
input_image_list = sorted(input_image_list, key = lambda i:len(i),rever = Fal)
size = len(input_image_list)
for i in range(size):
input_image_path = os.path.join(path+"\pic\input", input_image_list[i])
output_image_path = os.path.join(path+"\pic\output", input_image_list[i])
detections, extract_detected_objects = detector.detectObjectsFromImage(input_image=input_image_path,
output_image_path=output_image_path,
extract_detected_objects=True)
print('------------------- %d -------------------' % int(i + 1))
for eachObject in detections:
print(eachObject["name"], " : ", eachObject["percentage_probability"], " : ", eachObject["box_points"])
风言风语的意思print('------------------- %d -------------------' % int(i + 1))
⾸先第⼀⾏导⼊ImageAI Object Detection类,在第⼆⾏导⼊os库。
然后创建了ObjectDetection类的新实例,接着就可以选择要使⽤的算法。分别有以下三个函数:
.tModelTypeAsRetinaNet()
.tModelTypeAsYOLOv3()
.tModelTypeAsTinyYOLOv3()
选择好算法之后就要设置模型⽂件路径,这⾥给出的路径必须要和选择的算法⼀样。
.tModelPath()狗的眼睛>dhcp什么意思
- 参数path(必须):模型⽂件的路径
载⼊模型。
.loadModel()
- 参数detection_speed(可选):最多可以减少80%的时间,但是会导致精确度的下降。可选的值有: “normal”, “fast”, “faster”,“fastest” 和 “flash”。默认值是 “normal”。
通过os库的函数得到输⼊输出⽂件的路径等,这不是本⽂重点,跳过不表。
开始对图像进⾏⽬标检测。
.detectObjectsFromImage()
- 参数input_image(必须):待检测图像的路径
- 参数output_image(必须):输出图像的路径
- 参数parameter minimum_percentage_probability(可选):能接受的最低预测概率。默认值是50%。
- 参数display_percentage_probability(可选):是否展⽰预测的概率。默认值是True。
- 参数display_object_name(可选):是否展⽰识别物品的名称。默认值是True。
- 参数extract_detected_objects(可选):是否将识别出的物品图⽚保存。默认是Fal。
返回值根据不同的参数也有不同,但都会返回⼀个an array of dictionaries。字典包括以下⼏个属性:
* name (string)
* percentage_probability (float)
* box_points (tuple of x1,y1,x2 and y2 coordinates)
前⾯说过可以识别80种⽬标,在这⾥也可以选择只识别⾃⼰想要的⽬标。
custom = detector.CustomObjects(person=True, dog=True)
detections = detector.detectCustomObjectsFromImage( custom_objects=custom, input_image=os.p
ath.join(execution_path , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3new-custom.jpg"),
minimum_percentage_probability=30)
⾸先⽤定义⾃⼰想要的⽬标,其余的⽬标会被设置为Fal。然后配合.detectCustomObjectsFromImage()进⾏⽬标检测。
主要的代码基本如上所述,接下来看结果。先看看图⽚中只有⼀个⽬标的效果。
------------------- 10 -------------------
dog : 98.83476495742798 : (117, 91, 311, 360)
dog : 99.24255609512329 : (503, 133, 638, 364)
dog : 99.274742603302 : (338, 38, 487, 379)
------------------- 10 -------------------
效果还是不错的。再看看如果图⽚中有多个⽬标识别的结果如何。
------------------- 4 -------------------
book : 55.76887130737305 : (455, 74, 487, 146)
book : 82.22097754478455 : (466, 11, 482, 69)
tv : 99.34800863265991 : (25, 40, 182, 161)
bed : 88.7190580368042 : (60, 264, 500, 352)
cat : 99.54025745391846 : (214, 125, 433, 332)
------------------- 4 -------------------
识别度还是很⾼的,背后⼈眼都看不清的书本都能被识别。
附录