基于OpenCV的流水线包装箱检测计数应用(附源码)

文摘   科技   2024-09-06 07:45   重庆  

点击下方卡片,关注“OpenCV与AI深度学习

视觉/图像重磅干货,第一时间送达

导  读

    本文主要介绍基于OpenCV的流水线包装箱检测计数应用,并给出源码。


      

资源下载

    完整代码和视频下载地址:

https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter

核心代码如下(cboxtest.py):

import cv2import numpy as npfrom tracker import*

cap=cv2.VideoCapture('box.mp4')lower_range=np.array([0,46,64])upper_range=np.array([43,115,160])
def RGB(event, x, y, flags, param): if event == cv2.EVENT_MOUSEMOVE : point = [x, y] print(point) tracker=Tracker()cv2.namedWindow('box-counter')cv2.setMouseCallback('box-counter', RGB)area=[(391,244),(370,443),(391,438),(410,237)]counter=[]while True: ret,frame=cap.read() if not ret: break frame=cv2.resize(frame,(640,480)) hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask=cv2.inRange(hsv,lower_range,upper_range) _,mask1=cv2.threshold(mask,254,255,cv2.THRESH_BINARY) cnts,_=cv2.findContours(mask1,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) list=[] for c in cnts: x=500 if cv2.contourArea(c)>x: x,y,w,h=cv2.boundingRect(c) list.append([x,y,w,h]) bbox_idx=tracker.update(list) for bbox in bbox_idx: x1,y1,w1,h1,id=bbox cx=int(x1+x1+w1)//2 cy=int(y1+y1+h1)//2 results=cv2.pointPolygonTest(np.array(area,np.int32),((cx,cy)),False) if results>=0: cv2.circle(frame,(cx,cy),4,(0,0,255),-1) cv2.rectangle(frame,(x1,y1),(x1+w1,y1+h1),(0,255,0),2) if counter.count(id)==0: counter.append(id) cv2.polylines(frame,[np.array(area,np.int32)],True,(255,255,255),2) c1=(len(counter))
#cvzone.putTextRect(frame,f"{c1}",(50,60),2,2) cv2.putText(frame,str(c1), (420, 350), 0, 3, (0, 0, 255), 4) cv2.imshow("box-counter",frame) if cv2.waitKey(1)&0xFF==27: breakcap.release()cv2.destroyAllWindows()

    下载测试视频box6.mp4(vid.txt中有链接):


      

实现步骤

  【1】通过track.py滑动条动态设置HSV范围,保证较好的提取去包装箱的轮廓mask,效果如下:

    通过调试设置HSV范围如下,然后做HSV轮廓提取,提取纸箱轮廓。

lower_range=np.array([0,46,64])upper_range=np.array([43,115,160])

  【2】划定多边形区域,当直线轮廓中心点经过时将目标跟踪的id添加到list中

  【3】纸箱计数:计算list中元素个数即可,具体原理可参考上篇文章:

基于OpenCV+YOLOv5实现车辆跟踪与计数(附源码)

  最终效果如下:


      

总 结

    此应用相对基于OpenCV+YOLOv5实现车辆跟踪与计数(附源码) 案例简单一点,计数原理相同。这里直接用HSV范围提取的纸箱目标,没有用深度学习目标检测方法。另外计数时也不一定使用多边形,以直线和点的距离来计算也可以,核心还是避免重复计数。

    另外实际流水线上,这种简单应用还用不到视觉,红外传感器+单片机就可以搞定了,此例仅供参考。

—THE END—

下载1:Pytorch常用函数手册

在「OpenCV与AI深度学习公众号后台回复:Pytorch函数手册即可下载学习全网第一份Pytorch函数常用手册,包括Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多处理等十四章内容。

下载2:145个OpenCV实例应用代码
在「OpenCV与AI深度学习」公众号后台回复:OpenCV145即可下载学习145个OpenCV实例应用代码(Python和C++双语言实现)。

欢迎加入CV学习交流微信

觉得有用,记得点个赞和在看 

OpenCV与AI深度学习
专注计算机视觉、深度学习和人工智能领域干货、应用、行业资讯的分享交流!
 最新文章