基于计算机视觉的自动分拣
使用计算机视觉的自动分拣是一个技术驱动的过程,其中计算机视觉系统用于根据特定特征(例如大小、形状、颜色、纹理、条形码或其他视觉特征)识别、分类和路由物品或材料。这种方法通常应用于制造业、物流业、农业和回收业等行业,以提高效率、降低劳动力成本并最大限度地减少错误。
以下是基于计算机视觉的自动分类系统的关键组件:
- 摄像机和传感器:高速摄像机捕捉沿传送带移动的物品的图像或视频。可以使用深度摄像机、红外摄像机或激光器等附加传感器来捕获详细的物体信息。
- 计算机视觉算法:这些算法分析视觉数据以识别和分类对象。卷积神经网络 (CNN) 或机器学习模型等技术通常是这些系统的基础。
- 分类机制:执行器、机械臂、气流喷射器或分流器根据分析将物品物理地分类到适当的类别中。
1、基于计算机视觉的自动分拣用例
基于计算机视觉的自动分拣应用于多个行业。以下是一些示例用例。
- 农业:水果分级和分拣
这种基于计算机视觉的系统可以根据水果的大小、形状、颜色或其他物理特征对苹果、橙子和香蕉等水果进行分级。该系统使用摄像头捕捉传送带上水果的图像,分析其质量,并将它们分为优质、标准或不合格等等级。该系统提高了效率,确保了一致性,并减少了分级中的人工劳动。
- 农业:种子分拣
这种种子分拣系统使用高速摄像机和人工智能模型批量识别有缺陷的种子或异物。该系统的分拣机制根据大小、质地和颜色将可行种子与有缺陷的种子分开。它有助于提高种植种子的质量并提高作物产量。
- 农业:蔬菜缺陷分类
在此蔬菜缺陷分类系统中,计算机视觉模型可检测土豆、西红柿、胡萝卜或其他蔬菜甚至水果中的缺陷,例如裂缝、擦伤或斑点,并自动将有缺陷的产品从生产线上移除。这确保只有健康的产品才能到达消费者手中,并减少浪费。
- 制造:缺陷产品分拣
此缺陷产品分拣系统使用计算机视觉模型检查装配线上产品是否存在划痕、凹痕或缺失部件等缺陷。有缺陷的产品会被自动标记和移除。它有助于提高产品质量并减少客户投诉。
- 制造:金属废料分拣
在回收设施中,这种基于计算机视觉的金属废料分拣系统根据金属的物理特性和反射特性识别和分类不同类型的金属。这有助于优化回收过程并减少回收材料中的污染。
- 制造业:电子元件分类和分类
该电子元件分拣系统使用计算机视觉识别电阻器、电容器或芯片等电子元件,并根据类型、尺寸和放置要求对其进行分类。该系统提高了 PCB 组装效率,减少了元件放置错误。
- 物流:仓库包裹分拣
该基于计算机视觉的系统通过自动检测和分类各种包裹(包括盒子、填充信封和塑料袋)来增强物流中的包裹分拣。通过使用计算机视觉处理数据,它可以验证包装类型,防止错误路由和设备堵塞。该系统跟踪传送带上的包裹,机械臂将它们移动到正确的箱子里。它提高了分拣速度并减少了运输错误。
- 供应链:垃圾和回收分拣
该系统通过提高垃圾和回收分拣过程的效率和准确性,在废物管理中使用计算机视觉。通过使用摄像头和人工智能模型,该系统可以识别和分拣传送带上的各种材料(例如塑料、玻璃、金属和纸张),确保它们被引导到适当的回收类别中。这种自动化不仅提高了分类精度,而且大大减少了对人工干预的需求,从而提高了可回收材料的回收率并减少了垃圾填埋场的垃圾。人工智能引导的机器人已经开发出来,用于对回收材料进行分拣,具有高精度,提高了回收设施的整体效率。
- 药品:药丸分拣
制药行业使用计算机视觉辅助药丸分拣来提高效率和准确性。配备摄像头和计算机视觉算法的自动化系统检查和分类药片,识别缺口、变色或尺寸不正确等缺陷,确保只有优质产品才能通过供应链。例如,制药药丸分拣机每分钟可以处理许多药片(药丸),有效去除破损的药片和颗粒。这种自动化减少了人工劳动,最大限度地减少了错误,并在整个分销过程中保持了产品的完整性。
这里我们讨论了一些基于计算机视觉的分拣系统的用例。其他各个领域的用例无穷无尽。计算机视觉通过自动化和提高准确性,显著增强了各个行业的分类流程。通过将计算机视觉集成到分拣操作中,行业可以实现更高的效率、准确性和生产力。
2、如何构建自动分拣系统
本节以苹果分拣为例,探讨如何使用计算机视觉简化自动分拣系统的创建。如前面章节所强调的,任何分拣系统的核心组件都是计算机视觉模型,它推动决策过程。在这里,我们将演示 Roboflow 如何帮助构建这样的模型。下面概述的步骤为开发自动分拣系统提供了一条清晰的路径。
我们正在开发一个用于苹果分拣的对象检测模型,使用计算机视觉来区分好苹果和受损苹果。这个项目的类别定义为“苹果”和“受损苹果”。首先创建一个用于对象检测的 Roboflow 项目来管理数据集并简化模型开发过程。
2.1 收集和标注数据集
构建对象检测模型的第一步是收集多样化的苹果图像数据集。这些图像应包括各种场景,例如不同的光照条件、角度和苹果大小,以确保模型的稳健性。数据集应同时捕获好苹果和受损苹果,以有效地表示这两个类别。
收集图像后,使用边界框工具进行标注。在苹果周围绘制矩形,将其标记为“苹果”或“受损苹果”。这些标记的边界框用作基准真实数据,使模型能够在训练期间学习准确识别和分类对象。
2.2 训练模型
标注数据集后,下一步是使用 Roboflow 2.0 快速对象检测管道训练对象检测模型。
上图显示了使用 Roboflow 2.0 对象检测(快速)训练的对象检测模型对苹果进行分类的结果。该模型将苹果识别并分类为“苹果”(好)或“受损苹果”,并给出相应的置信度分数。性能指标(mAP:79.1%,准确率:71.1%,召回率:77.0%)表明该模型在识别和分类苹果方面的有效性。
2.3 构建推理脚本
在此步骤中,我们将学习如何使用 Roboflow 推理 API 和 Supervision 库构建推理脚本。该脚本处理实时摄像头流以识别好苹果和损坏的苹果,并将结果发送到控制器进行自动分拣。识别的标签用于通过串行端口将控制分拣装置的命令传输到连接的控制器(例如 Arduino 开发套件)。该代码可与分拣装置无缝集成,以对好苹果和损坏的苹果进行分拣。
api_key = "YOUR_ROBOFLOW_API_KEY"
from inference import InferencePipeline
from inference.core.interfaces.camera.entities import VideoFrame
import cv2
import supervision as sv
import serial
import time
import sys
# Initialize serial communication with Arduino
arduino = serial.Serial('COM4', 9600, timeout=1)
time.sleep(2) # Allow Arduino to reset
def send_command_to_arduino(command: str):
"""Send a command to Arduino via serial."""
try:
arduino.write(command.encode()) # Send command as bytes
print(f"Sent to Arduino: {command}")
except Exception as e:
print(f"Error sending data to Arduino: {e}")
# Initialize annotators
label_annotator = sv.LabelAnnotator()
box_annotator = sv.BoxAnnotator()
# Initialize a variable to store the last sent command
last_command = None
def my_custom_sink(predictions: dict, video_frame: VideoFrame):
global last_command # Declare the variable as global to retain its value across calls
# Extract labels from predictions
labels = [p["class"] for p in predictions.get("predictions", [])]
# Convert predictions to Supervision Detections
detections = sv.Detections.from_inference(predictions)
# Annotate the frame
image = label_annotator.annotate(
scene=video_frame.image.copy(), detections=detections, labels=labels
)
image = box_annotator.annotate(image, detections=detections)
# Display the annotated image
cv2.imshow("Predictions", image)
# Determine the appropriate command based on the labels
if "apple" in labels:
current_command = "G_APPLE" # Command for damaged apples
elif "damaged_apple" in labels:
current_command = "D_APPLE" # Command for good apples
else:
current_command = None # No command for other cases
# Send the command only if it has changed
if current_command != last_command:
if current_command is not None: # Only send if there's a valid command
send_command_to_arduino(current_command)
last_command = current_command # Update the last command
if cv2.waitKey(1) & 0xFF == ord('q'):
return
pipeline = InferencePipeline.init(
model_id="apple-sorting-2bfhk/2",
video_reference=0, # Use the default webcam
on_prediction=my_custom_sink,
api_key=api_key,
)
pipeline.start()
pipeline.join()
2.4 构建分拣装置
图中所示的系统是苹果的自动分拣装置,其中伺服器用于根据苹果被分类为“好苹果”或“损坏的苹果”将其引导到适当的箱子中。
该电路由一个 Arduino Uno 和两个伺服电机组成。伺服电机连接到 Arduino 的 PWM 引脚(好苹果伺服的引脚 5 和损坏苹果伺服的引脚 6)。
Arduino 通过 USB 连接与计算机视觉系统通信,通过串行端口接收命令。这些命令决定伺服位置,允许它们打开或关闭分类门。电路确保伺服与分类结果协调运行,将苹果引导到各自的箱子中。
这是 Arduino 的固件代码:
#include <Servo.h>
int servoPin_1=5;
int servoPin_2=6;
Servo good_apple_servo, damaged_apple_servo;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
good_apple_servo.attach(servoPin_1);
damaged_apple_servo.attach(servoPin_2);
good_apple_servo.write(0);
damaged_apple_servo.write(0);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n'); // Read the command
command.trim(); // Remove extra whitespace
// Debug: Print the received command
Serial.print("Received command: ");
Serial.println(command);
if (command == "G_APPLE") {
good_apple_servo.write(90); // Opens sort line for good apple
damaged_apple_servo.write(0); // closes sort line for damaged apple
} else if (command == "D_APPLE") {
damaged_apple_servo.write(90); // Opens sort line for damaged apple
good_apple_servo.write(0); // closes sort line good apple
}
}
}
3、系统工作原理
两个伺服器连接到 Arduino Uno,每个伺服器负责控制分拣路径。好苹果伺服器操作被归类为“好”的苹果的路径,而损坏的苹果伺服器管理损坏苹果的路径。
计算机视觉模型处理实时摄像头流,将苹果分类为“好”或“损坏”。通过上述步骤 #3 中的推理脚本。根据分类,通过串行端口向 Arduino 发送特定命令(G_APPLE 表示好苹果,D_APPLE 表示损坏苹果)。
Arduino 接收命令并相应地调整伺服器的位置:
- 对于好苹果,好苹果伺服器移动到 90°(打开)以允许苹果通过,而损坏的苹果伺服器保持在 0°(关闭)。
- 对于受损的苹果,受损苹果伺服器会移动到 90°(打开)来引导苹果,而好苹果伺服器则保持在 0°(关闭)。
当苹果通过摄像头流时,分拣装置会触发伺服运动。伺服器充当门,将苹果引导到单独的箱子或滑槽中,确保准确分拣。
系统不断处理苹果,根据分类结果动态调整伺服位置。这种实时决策允许高速高效地进行分类,而无需人工干预。
此设置演示了计算机视觉和 Arduino 控制的伺服器如何协同工作以创建强大的自动分类机制。
4、结束语
在本 blog 中,我们探索了基于计算机视觉的分类系统的不同用例,并学习了如何使用计算机视觉和 Arduino 控制的伺服器组合构建自动苹果分类系统。
通过使用由 Roboflow 推理 API 和监督库提供支持的推理脚本,我们实现了将苹果实时分类为“好”或“损坏”。简单电路的集成演示了基于分类结果的分类路径的动态控制。
此设置展示了将 AI 驱动的洞察力与硬件自动化相结合以简化自动分类过程的潜力。通过一些额外的组件和定制,这个可扩展的框架可以适应不同行业的各种分类应用。
原文链接:Automated Sorting with Computer Vision
汇智网翻译整理,转载请标明出处