首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【壹零学院】Python编程实现TensorFlow目标检测

在Python编程中通过TensorFlow不仅可以实现“图像识别”,同样也可以进行“目标检测”——既能够识别物体的类别,同时也能够标识出其位置信息(矩形线框)。TensorFlow目标检测的实现过程与图像识别几乎一致,同样也需要下载模型和标签文件,编程代码中库模块的导入及模型加载处理等也非常类似。       

1.下载模型和标签文件

在本地安装好TensorFlow之后,再下载预训练模型(detect.tflite)和中英文标签文件(labelmap.txt、labelmap_cn.txt)。同样,两个txt标签文件内容仍然一一对应,分别保存了包括“人”、“时钟”和“红酒杯”等在内的91类物体,因编码问题其中有11行的“???”信息,有效目标的检测数目实为80类。

2.Python代码编程

(1)库模块的导入与标签文件的读取

与图像识别一样,首先仍是导入OpenCV、Numpy、tflite和PIL库模块,再建立变量file_model和file_label,赋值为“detect.tflite”、“labelmap_cn.txt”,分别对应分类模型和中文标签(加载英文标签文件则将变量file_label赋值为“labelmap.txt”);对标签文件进行读取之后,需要进行是否为无效物品种类的判断(“if labels[0] == '???':”),并执行“del(labels[0])”删除labels列表中“???”项的操作(去除背景)。

(2)分类模型的加载预处理

建立变量Min_Level并赋值为0.5,作用是设置目标检测的阈值,该数据越大表示检测得越严格越准确;接下来,仍是通过变量interpreter和Input_Details、Output_Details,分别实现分类模型的加载以及输入数据、输出数据的读取;输入图像的高度和宽度值通过语句“height,width = Input_Details[0]['shape'][1],Input_Details[0]['shape'][2]”来实现,读取摄像头画面数据则通过语句“capture = cv2.VideoCapture(0)”来实现。

(3)“while True:”循环体部分

从读取摄像头一帧图像数据、进行BGR到RGB颜色模式的转换,再到图像宽度与高度的缩放、数据的输入与识别,与之前图像识别的代码完全一致。建立变量boxes,赋值为“interpreter.get_tensor(Output_Details[0]['index'])[0]”,作用是检测物体的矩形边框,其中的Output_Details[0]对应10个检测目标的边界信息;建立变量classes,赋值为“interpreter.get_tensor(Output_Details[1]['index'])[0]”,作用是检测物体的类别,其中的Output_Details[1]对应10个检测目标的类别信息;建立变量scores,赋值为“interpreter.get_tensor(Output_Details[2]['index'])[0]”,作用是检测物体的概率分值,其中的Output_Details[2]对应10个检测目标的置信度信息。

接下来进行概率分值超过50%的目标检测显示(“for i in range(len(scores)):”),建立四个变量y_min、x_min、y_max和x_max,对应目标检测物体边框的左上角(min)和右下角(max)坐标值,并通过语句“cv2.rectangle(img,(x_min,y_min),(x_max,y_max),(0,255,0),1)”进行矩形线框的绘制;建立变量object_name,赋值为“labels[int(classes[i])]”,作用是获取目标检测的标签名称。

变量Notes、font和position,分别对应显示的文字信息、字体及坐标位置信息,通过语句“draw.text(position,Notes,(255,0,0),font)”进行显示输出。其它的代码,与之前均相同,不再赘述。

3.目标检测的运行测试

将程序保存为Object_ Detection.py,按F5键进行测试。分别在摄像头前展示人骑自行车、狗与猫、三支红酒杯、苹果香蕉与橙子、西兰花炒胡萝卜共五张图片,程序均进行了正确的识别,包括分别标注不同目标的名称及概率值,甚至切碎的胡萝卜块也被正确进行了目标检测。再将摄像头对准办公桌上的电脑键盘和鼠标(实物),目标检测的效果也非常不错。

程序源代码在“壹零社”公众号编程相关2023-27中。

编辑|张毅

审核|吴新

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O5CqSccsPjzeSmqbM4uPdwFw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券