如何对生产线上的物品进行检测并统计?

简介: 如何对生产线上的物品进行检测并统计?

前言


  最近几天被项目折腾的头痛,经过一顿收拾,理清楚了解决思路。在此特分享给大家(回想起来,完全不难,为什么当初就是想不明白呢?)





设计分析


项目需求


  现有5种颜色(颜色记为:1,2,3,4,5)的物品需要在传送带上过闸机进行检测(这里物品颜色检测可参考使用K-means在对图像进行目标颜色检测)并统计各物品的检测的总数。



已知条件


  这里需要注意的是传送带是非目标物体的颜色(这里我们记为:0),物品之间的通过为顺序且每个物品通过时有一定的间隙:


  1. 即传送带是可以视作匀速运行;


  1. 物品在传送带上匀速前进;


  1. 一次只通过一个物品;


  1. 物品颜色与传送带颜色相异;


  1. 每种物品的颜色相异;


  1. 视频画面中不会存在两个及以上的物品同时存在;


  1. 已经可以完成目标的颜色检测(return color_num)





剖析


  根据上述的已知条件进行分析我们需要注意以下问题:物品通过视频画面的时候会持续一段时间(从进入到离开),这个过程中检测函数是一直在return color_num,在后续我们进行统计该物品的时候仅需记录一次(color_lab + 1)。


  另外分析检测的过程可以得到除上述情景外还有如下情景:当检测出第一个物品和第二个物品之间必然会有一个空档期,这个空档期检测的颜色为传送带的颜色(记为:0)。 那么可以按如下逻辑进行操作:

image.png


异常分析


  如上逻辑流程图所示是建立在检测物品颜色无误的情况下,然而在实际生产中会出现各种各样的情况是需要我们考虑到的。例如在检测颜色标签为1的物品时,会出现持续return color_num 过程中,某一帧检测存在失误,没有检测到,这个时候的color_num = 0 (但也就这一个数字),后续仍然return color_num=1 ,那么按照上述的逻辑,此时的这个物品我们检测统计了两次,相当于多统计了一次。


  这个时候我们就需要建立剔除异常值的机制,对连续 return color_num 的数字是相同数字的时候,中途出现的某个不相同的数字进行剔除;当然这个不相同的数字出现的地方可能在首位,也可能在末位。




demo


  对上述流程进行简化替代,有如下代码逻辑:a = random.randint(0, 100)代表检测到的目标类别数

import random
import cv2
RawNum = 0  # 原始数据
# 各类别的总数
Lab1 = 0
Lab2 = 0
Lab3 = 0
Lab4 = 0
Lab5 = 0
while 1:
    frame = cv2.imread("111.jpg")
    a = random.randint(0, 100)
    if a != RawNum:
        if a == 1:
            RawNum = a
            Lab1 += 1
        elif a == 2:
            RawNum = a
            Lab2 += 1
        elif a == 3:
            RawNum = a
            Lab3 += 1
        elif a == 4:
            RawNum = a
            Lab4 += 1
        elif a == 5:
            RawNum = a
            Lab5 += 1
    else:
        RawNum = a
    Text1 = "Yellow-Num:%s " % Lab1
    Text2 = "Red-Num:%s " % Lab2
    Text3 = "Green-Num:%s " % Lab3
    Text4 = "black-Num:%s " % Lab4
    Text5 = "blue-Num:%s " % Lab5
    cv2.putText(frame, Text1, (5, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text2, (5, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text3, (5, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text4, (5, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text5, (5, 100), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.imshow("video", frame)
    key = cv2.waitKey(1) & 0xFF
    if key == 27:
        break



相关文章
|
5月前
|
人工智能 缓存 前端开发
通义灵码2.5+qwen3——节假日抢票不用愁,基于12306-MCP实现个人火车票智能查询小助手!
本项目作为通义灵码2.5的深度实践案例,充分展现了通义灵码2.5编程智能体调用MCP实现大模型智能化工具的强大优势。
430 10
|
6月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
10月前
|
人工智能 数据挖掘 API
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
R2R 是一款先进的 AI 检索增强生成平台,支持多模态内容处理、混合搜索和知识图谱构建,适用于复杂数据处理和分析的生产环境。
881 3
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
|
3月前
|
人工智能 弹性计算 自然语言处理
【限时福利】计算巢平台热门AI服务免费试用,零门槛体验AI创新力量!
计算巢平台推出热门AI服务免费试用活动,集成大模型、图像生成、自然语言处理等多种AI技术,提供免费GPU算力与存储资源,助力开发者零门槛体验前沿技术,加速创新落地。
134 0
|
存储 安全 网络安全
Windows安全防护:构建多层防御体系,守护系统安全
Windows系统的安全性对于保护用户个人信息和企业业务连续运行至关重要。面对日益严峻的网络威胁,我们需要构建多层防御体系,通过采用系统内置的安全防护措施、用户可采取的安全保护措施以及加强用户教育与培训、实施严格的访问控制策略、定期进行系统安全评估与审计、建立应急响应机制以及采用先进的安全防护技术等方式
1042 57
|
9月前
|
监控 数据可视化
高效销售管理全攻略:如何确保销售目标的精准实现
销售目标设定是销售管理的核心,科学的方法能提高执行力和业绩。本文探讨如何通过目标层级划分、遵循SMART原则、合理分解与资源分配及进度跟踪,确保销售目标的落地执行。借助板栗看板等工具,可进一步优化团队协作和目标达成率,助力企业持续增长。
520 25
|
运维 Devops 人工智能
AI赋能DevOps:数据驱动的全栈工程师实践
DevOps是什么? 对于传统的软件研发而言,开发,测试,运维,运营,有不同的岗位进行分工协作,以保证质量和专业度,同一件事情,依赖不同岗位的排期、沟通、协调,效率难免会有打折。而对于互联网业务来说,快速的迭代,对人力的需求非常强烈,不大可能有足够的人力支撑这么多岗位。
10531 0