官方网站-首页官方网站-首页

科技有限公司
商店{联系电话}400-86503662搜索本站
如何使用计算机视觉实现自动分拣
如何使用计算机视觉实现自动分拣
2026-09-02 20:44:03
摘要:
  (来源:OpenCV与AI深度学习)  视觉/图像重磅干货,第一时间送达!  计算机视觉分拣系统组成      使用计算机视觉进行自动分拣是一个技术驱动的过程,其中计算机视觉系统用于根据特定特征(例如大小、形状、颜色、纹理、条形码或其他视觉特征)对物品或材料进行识别、分类和排序。这种方法通常用于制造、物流、农业和回收等行业,以提高效率、降低劳动力成本并最大限度地减少错误。      以...

  (来源:OpenCV与AI深度学习)

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

  计算机视觉分拣系统组成 

     使用计算机视觉进行自动分拣是一个技术驱动的过程,其中计算机视觉系统用于根据特定特征(例如大小、形状、颜色、纹理、条形码或其他视觉特征)对物品或材料进行识别、分类和排序。这种方法通常用于制造、物流、农业和回收等行业,以提高效率、降低劳动力成本并最大限度地减少错误。

      以下是基于计算机视觉的自动分拣系统的关键组件:

    •   摄像头和传感器:高速摄像头捕捉物品沿传送带移动的图像或视频。可以使用深度相机、红外相机或激光等其他传感器来捕获详细的对象信息。

    •   计算机视觉算法:这些算法分析视觉数据以识别和分类对象。卷积神经网络 (CNN) 或机器学习模型等技术通常是这些系统的基础。

    •   分拣机构:执行器、机械臂、喷气机或分流器根据分析将物品物理分类为适当的类别。

  计算机视觉分拣系统案例

      基于计算机视觉的分拣应用于多个行业。以下是一些示例使用案例。

  农业:水果分级和分拣

      这种基于计算机视觉的系统可以根据苹果、橙子和香蕉等水果的大小、形状和颜色或其他物理特征对其进行分级。该系统使用摄像头捕捉传送带上水果的图像,分析其质量,并将其分类为优质、标准或不合格等等级。该系统提高了效率,确保了一致性,并减少了分级中的体力劳动。

  农业:种子分拣

      该种子分拣系统使用高速摄像头和 AI 模型批量识别有缺陷的种子或异物。该系统的分拣机制根据大小、质地和颜色将有活力的种子与有缺陷的种子分开。它有助于提高种植种子的质量并提高作物产量。

      农业:蔬菜缺陷分拣

      在这个蔬菜缺陷分拣系统中,计算机视觉模型可以检测土豆、西红柿、胡萝卜或其他蔬菜甚至水果中的缺陷,如裂缝、瘀伤或斑点,并自动将有缺陷的缺陷从生产线上剔除。这确保了只有健康的农产品才能到达消费者手中并减少浪费。

      制造业:不良品分拣

      该有缺陷的产品分拣系统使用计算机视觉模型来检查产品是否存在缺陷,例如装配线上的划痕、凹痕或缺失的组件。有缺陷的产品会被标记并自动删除。它有助于提高产品质量并减少客户投诉。

   制造业:金属废料分拣

      在回收设施中,这种基于计算机视觉的金属废料分拣系统根据金属的物理特性和反射特性来识别和分拣不同类型的金属。这有助于优化回收过程并减少回收材料中的污染。

  制造业:电子元件分类和分拣

      该电子元件分类和排序系统使用计算机视觉来识别电子元件,例如电阻器、电容器或芯片,并根据类型、尺寸和放置要求对其进行排序。该系统提高了 PCB 组装的效率,并减少了元件放置的错误。

  物流:仓库中的包裹分拣

      这种基于计算机视觉的系统通过自动检测和分类各种包裹(包括盒子、带衬垫的信封和塑料袋)来增强物流中的包裹分拣。通过使用计算机视觉处理数据,它可以改变包装类型,防止路线错误和设备堵塞。该系统跟踪传送带上的包裹,机械臂将它们移动到正确的箱子。它提高了分拣速度并减少了运输错误。

  供应链:垃圾和回收分拣

      该系统通过提高垃圾和回收分拣流程的效率和准确性,在废物管理中使用计算机视觉。通过使用摄像头和 AI 模型,该系统可以识别和分类传送带上的各种材料(如塑料、玻璃、金属和纸张),确保它们被引导到适当的回收类别中。这种自动化不仅提高了分拣精度,还显著减少了人工干预的需求,从而提高了可回收材料的回收率并减少了垃圾填埋场的废物。AI 引导机器人的开发是为了以高精度分拣回收材料,从而提高回收设施的整体效率。

  制药:药丸分拣

      制药行业使用计算机视觉辅助药丸分拣来提高效率和准确性。配备摄像头和计算机视觉算法的自动化系统对片剂进行检测和分拣,识别缺口、变色或尺寸不正确等缺陷,确保只有优质产品才能通过供应链。例如,药丸分拣机每分钟可以处理许多片剂(丸剂),有效去除破碎的片剂和颗粒。这种自动化减少了人工劳动,最大限度地减少了错误,并在整个配送过程中保持了产品的完整性。

      在这里,我们讨论了基于计算机视觉的分拣系统的一些用例。在其他各个领域中,用例数不胜数。计算机视觉通过自动化和提高准确性,显著增强了各个行业的分拣流程。通过将计算机视觉集成到分拣操作中,各行各业可以提高效率、准确性和生产力。

  如何构建自动分拣系统

      本节以苹果水果分拣为例,探讨了 Roboflow 如何使用计算机视觉简化自动分拣系统的创建。如前面部分所述,任何分拣系统的核心组件都是计算机视觉模型,它驱动决策过程。在这里,我们将演示 Roboflow 如何帮助构建这样的模型。下面概述的步骤为开发自动分拣系统提供了明确的路径。

      我们正在开发一个使用计算机视觉的 Apple Sorting 对象检测模型,以区分好苹果和受损苹果。此项目的类定义为 “apple” 和 “damaged_apples”。首先创建一个用于对象检测的 Roboflow 项目,以管理数据集并简化模型开发过程。

  步骤 #1:收集和注释数据集

      构建对象检测模型的第一步是收集各种苹果图像数据集。这些图像应包括各种场景,例如不同的照明条件、角度和苹果大小,以确保模型的稳健性。数据集应同时捕获好苹果和受损苹果,以有效地表示这两个类。

      收集图像后,使用边界框工具执行标注。在苹果周围绘制矩形,将它们标记为“苹果”或“damaged_apples”。这些标记的边界框用作真值数据,使模型能够在训练期间学习准确识别和分类对象。

  步骤 #2:训练模型

      对数据集进行注释后,下一步是使用 Roboflow 2.0 快速对象检测管道训练对象检测模型。

      上图显示了使用 Roboflow 2.0 Object Detection (Fast) 训练的对象检测模型用于苹果分拣的结果。该模型将苹果识别并分类为 “apple”(好)或 “damaged_apple”,并带有相应的置信度分数。性能指标(mAP:79.1%、精确率:71.1%、召回率:77.0%)表示模型在识别和分类苹果方面的有效性。

  步骤 #3:构建推理脚本

      在此步骤中,我们将学习如何使用 Roboflow Inference 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()

  步骤 #4:构建分拣机制

      图中所示的系统是一种苹果自动分拣机制,其中伺服系统用于根据苹果的分类为 “好苹果 ”或 “受损苹果 ”将苹果引导到适当的箱子中。

      该电路由一个 Arduino Uno 和两个伺服电机组成。伺服电机连接到 Arduino 的 PWM 引脚(引脚 5 用于 Good Apple Servo,引脚 6 用于损坏的 Apple Servo)。

      Arduino 通过 USB 连接与计算机视觉系统通信,通过串行端口接收命令。这些命令指示伺服位置,允许它们打开或关闭分拣门。该电路确保伺服系统与分类结果协调运行,将苹果引导到各自的箱子中。

      以下是 Arduino 的固件代码:

  #include 

  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

          } 

    }

}

  系统如何运作

  组件设置

      两个伺服器连接到 Arduino Uno,每个伺服器负责控制排序路径。Good Apple Servo 为被归类为“Good”的苹果操作路径,而 Damaged Apple Servo 管理受损苹果的路径。

  分类流程

      计算机视觉模型处理实时摄像头流,将苹果分类为“良好”或“损坏”。通过上述步骤 #3 中的推理脚本。根据分类,通过串行端口将特定命令(G_APPLE 表示好苹果或 D_APPLE 表示受损苹果)发送到 Arduino。

   伺服控制

      Arduino 接收到命令并相应地调整舵机的位置:

    •   对于一个好的苹果,Good Apple Servo 移动到 90°(打开)以允许苹果通过,而损坏的 Apple Servo 保持在 0°(关闭)。

    •   对于损坏的苹果,损坏的苹果伺服器移动到 90°(打开)以引导苹果,而 Good Apple 伺服器保持在 0°(闭合)。

  操作中的分拣

      当苹果通过相机流时,分类会触发伺服移动。伺服系统充当门,将苹果引导到单独的箱子或溜槽中,确保准确分拣。

  自动化和反馈

      该系统持续加工苹果,根据分类结果动态调整伺服位置。这种实时决策允许在无需人工干预的情况下进行高速高效的分拣。

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。