新品Coming Soon!OAK-D-SR-PoE:使用3D+AI视觉结合ToF实现箱体测量和鉴别!

news2024/11/13 10:38:14

OAKChina 新品:OAK-D SR PoE结合ToF实现箱体检测

3D+AI解决方案提供商

手动测量箱体、缺陷、大小等操作可能是一项繁琐并且劳累而机械的任务,但OAK中国本次将提供了更好的解决方案:3D+AI视觉处理箱体的识别和检测,使用了即将发布的全新3D+AI相机:OAK-D-SR PoE,利用了前沿的视觉处理技术结合AI快速准确地确定箱子的尺寸。本文将对这款应用程序的工作原理及其背后的技术做一个简单的介绍。

6.28新品箱体检测演示

工作原理

以下是分布说明:

  1. 框检测:AI 识别框。使用 Roboflow 训练自定义对象检测 NN 模型。
    Model & API (roboflow.com)
  2. 数据捕获:ToF 深度传感器与设备上的彩色流对齐,并提供准确的 RGB-D 流。应用程序将根据(填充的)边界框裁剪深度图,并提供仅框的点云,从而获得最佳效果。
  3. 分析:使用 Open3D 库Open3D – A Modern Library for 3D Data Processing和自定义算法,我们首先估计框的顶面,然后使用 OpenCV 提取顶面的最小面积(以获得宽度和长度)。一旦我们有了框的顶面和地面,我们也可以计算框的高度。我们开发了 [BoxEstimator]类,它封装了此应用程序的数据处理。
  4. 可视化:Depthai-viewer(基于 Rerun)用于清晰、直观地表示结果;带有框检测的彩色帧(以及尺寸)、深度图和稀疏/密集点云。

行业应用

事实上,有很多行业都可以从此类解决方案中受益,这里我们列举一些用户的实际案例:

电子商务/零售:测量运输箱以优化包装尺寸并降低成本。

制造:确保产品尺寸符合规格,包装缺陷、无需人工检查,全程自动化24小时连轴运转。

物流:实现全称自动化分拣、分类,以视觉AI的方案完成全程自动化工作,加速库仓包裹分类速度。

精度尺寸

我们仍在努力改进,但视频显示每个尺寸的误差小于 5 毫米,以下是 GT 尺寸供参考:

箱子尺寸为 26.5 x 30 厘米,高 20 厘米
箱子尺寸为 18.5 x 28 厘米,高 18 厘米
箱子尺寸为 11 x 20 厘米,高 7.5 厘米

OAK-D SR PoE (短距离 带ToF)

我们以 全新产品:OAK-D-SR-POE(几周后将会首次发布!)为基础开发了此应用,因为它借助 ToF 传感器实现了最佳近距离感知。它还具有边缘 AI 推理功能,是此应用的完美候选者。

ToF传感器的深度误差在室内<1%,在室外<2%。

OAK -D SR PoE

OAK - D SR PoE

一样,附上源码:

from depthai_sdk import OakCamera
from depthai_sdk.classes.packets import DetectionPacket, PointcloudPacket
from depthai_sdk.classes.box_estimator import BoxEstimator
import depthai_viewer as viewer
import cv2
import subprocess
import select
import sys

FPS = 10.0
box = BoxEstimator(median_window=10)

with OakCamera() as oak:
    try:
        subprocess.Popen([sys.executable, "-m", "depthai_viewer", "--viewer-mode"], stdout=subprocess.PIPE,
                                        stderr=subprocess.PIPE)
    except subprocess.TimeoutExpired:
        pass
    viewer.init("Depthai Viewer")
    viewer.connect()

    color = oak.create_camera('cam_c', resolution='800p', fps=20)

    model_config = {
        'source': 'roboflow', # Specify that we are downloading the model from Roboflow
        'model':'cardboard-box-u35qd/1',
        'key':'dDOP8nC4A9rZzWUTG8ia' # Fake API key, replace with your own!
    }
    nn = oak.create_nn(model_config, color)
    nn.config_nn(conf_threshold=0.85)

    tof = oak.create_tof(fps=20)
    tof.set_align_to(color, output_size=(640, 400))
    tof.configure_tof(phaseShuffleTemporalFilter=True,
                      phaseUnwrappingLevel=2,
                      phaseUnwrapErrorThreshold=100)

    pointcloud = oak.create_pointcloud(tof)

    q = oak.queue([
        pointcloud.out.main.set_name('pcl'),
        tof.out.main.set_name('tof'),
        nn.out.main.set_name('nn'),
    ]).configure_syncing(enable_sync=True, threshold_ms=500//FPS).get_queue()
    # oak.show_graph()
    oak.start()

    viewer.log_rigid3(f"Right", child_from_parent=([0, 0, 0], [0, 0, 0, 0]), xyz="RDF", timeless=True)
    viewer.log_rigid3(f"Cropped", child_from_parent=([0, 0, 0], [1, 0, 0, 0]), xyz="RDF", timeless=True)

    def draw_mesh():
        pos,ind,norm = box.get_plane_mesh(size=500)
        viewer.log_mesh("Right/Plane", pos, indices=ind, normals=norm, albedo_factor=[0.5,1,0], timeless=True)

    if box.is_calibrated():
        draw_mesh()
    else:
        print("Calibrate first, write 'c' in terminal when most of the view is flat floor!!")

    while oak.running():
        packets = q.get()

        nn: DetectionPacket = packets["nn"]
        cvFrame = nn.frame[..., ::-1] # BGR to RGB
        depth = packets["tof"].frame
        pcl_packet: PointcloudPacket = packets["pcl"]
        points = pcl_packet.points

        # Convert 800P into 400P into 256000x3
        colors_640 = cv2.pyrDown(cvFrame).reshape(-1, 3)
        viewer.log_points("Right/PointCloud", points.reshape(-1, 3), colors=colors_640)
        # Depth map visualize
        viewer.log_depth_image("depth/frame", depth, meter=1e3)
        viewer.log_image("video/color", cvFrame)

        if box.is_calibrated():
            if 0 == len(nn.detections):
                continue # No boxes found
            # Currently supports only 1 detection (box) at a time
            det = nn.detections[0]
            # Get the bounding box of the detection (relative to full frame size)
            # Add 10% padding on all sides
            box_bb = nn.bbox.get_relative_bbox(det.bbox)
            padded_box_bb = box_bb.add_padding(0.1)
            points_roi = pcl_packet.crop_points(padded_box_bb).reshape(-1, 3)

            dimensions, corners = box.process_points(points_roi)
            if corners is None:
                continue

            viewer.log_points("Cropped/Box_PCL", box.box_pcl)
            viewer.log_points("Cropped/Plane_PCL", box.plane_pcl, colors=(0.2,1.0,0.6))
            # viewer.log_points("Cropped/TopSide_PCL", box.top_side_pcl, colors=(1,0.3,0.6))
            viewer.log_points(f"Cropped/Box_Corners", corners, radii=8, colors=(1.0,0,0.0))

            corners = box.inverse_corner_points()
            viewer.log_points(f"Right/Box_Corners", corners, radii=8, colors=(1.0,0,0.0))
            viewer.log_line_segments(f"Right/Box_Edges", box.get_3d_lines(corners), stroke_width=4, color=(1.0,0,0.0))

            l,w,h = dimensions
            label = f"{det.label_str} ({det.confidence:.2f})\n{l/10:.1f} x {w/10:.1f}\nH: {h/10:.1f} cm"
            viewer.log_rect('video/bbs',
                    box_bb.to_tuple(cvFrame.shape),
                    label=label,
                    rect_format=viewer.RectFormat.XYXY)
            viewer.log_rect('depth/bbs',
                    padded_box_bb.to_tuple(depth.shape),
                    label="Padded BoundingBox",
                    rect_format=viewer.RectFormat.XYXY)

        key = oak.poll()
        ready, _, _ = select.select([sys.stdin], [], [], 0.001) # Terminal input
        if ready:
            key = sys.stdin.readline().strip()
        if key == 'c':
            if box.calibrate(points):
                print(f"Calibrated Plane: {box.ground_plane_eq}")
                draw_mesh()

OAK中国 丨 3D+AI 解决方案提供商

如果你初次遇见OAK,请看这个视频:BV1u84y1p73d
或者来这里系统查看一下:https://www.oakchina.cn/intro/
shopping直通车在这里:https://www.oakchina.cn/shop/
私信我发送1,邀请加入OAK官方群,每周开源项目、免费CV模型、优惠活动及时掌握,还可以咨询技术、项目应用等等。😉


```
OAK中国 | 追踪AI技术和产品新动态
公众号 | OAK视觉人工智能开发
戳「+关注」获取最新资讯↗↗
如果喜欢,请一键三连吧~比心❤️
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KVM性能优化之网络性能优化

1、使用virtio半虚拟化网卡 在Virt- Manager图形界面里指定下&#xff1a; 当然也可以编辑XML文件&#xff0c;添加<model typevirtio/> 如果你不指定&#xff0c;那么虚拟机会默认使用8139的全虚拟化网卡&#xff0c;8139网卡是Realtek的百兆。 2、使用vhost_net v…

Windows和Linux C++判断磁盘空间是否充足

基本是由百度Ai写代码生成的&#xff0c;记录一下。实现此功能需要调用系统的API函数。 对于Windows&#xff0c;可调用函数GetDiskFreeSpaceEx&#xff0c;使用该函数需要包含头文件windows.h。该函数的原型&#xff1a; 它的四个参数&#xff1a; lpDirectoryName&#xff0…

Gitlab上传代码时自动触发Jenkins构建代码配置

Jenkins配置构建触发器&#xff0c;勾选Build when a change is pushed to GitLab 记得记住对应url 在下面生成一个Jenkins的Secret token 打开Gitlab配置Webhooks 保存后测试 可正常构建并推送

DIY:在您的 PC 上本地使用 Stable Diffusion AI 模型生成图像

前言 随着DALL-E-2和Midjourney的发布&#xff0c;您可能听说过最近 AI 生成艺术的繁荣。这些人工智能模型如何在几秒钟内创造性地生成逼真的图像&#xff0c;这绝对是令人兴奋的。您可以在这里查看其中的一些&#xff1a;DALL-E-2 gallery和Midjourney gallery 但是这些模型…

Linux-引导过程与服务控制

目录 一、Linux操作系统引导过程 1、引导过程总览 2、引导过程详解 2.1、开机自检&#xff08;BIOS&#xff09; 2.2、 MBR引导 2.3、GRUB菜单 2.4、加载内核(kernel) 2.5、init进程初始化 3、系统初始化进程 3.1、Systemd单元类型 3.2、运行级别所对应的 Systemd 目…

湖北大学2024年成人高考函授报名专升本汉语言文学专业介绍

湖北大学&#xff0c;这所历史底蕴深厚的学府&#xff0c;自创办以来&#xff0c;始终致力于为社会各界人士提供高质量的成人高等继续教育。而今&#xff0c;为了满足广大成年人对于知识更新的渴求&#xff0c;学校特别开放了专升本汉语言文学专业的报名通道&#xff0c;为那些…

揭开免费可视化工具流行背后的原因

免费可视化工具为什么越来越受欢迎&#xff1f;在大数据时代&#xff0c;数据可视化已经成为各行各业的重要工具。它不仅帮助企业和个人更直观地理解数据&#xff0c;还在决策过程中起到关键作用。尽管市场上有许多付费的数据可视化工具&#xff0c;但免费工具的受欢迎程度却在…

rtthread 设备驱动 示例

添加自定义驱动效果 驱动 my_test_driver.c #include <stdint.h> #include <stdio.h> #include <rtthread.h> /*** brief 驱动初始化设备* * param device 需要初始化的设备* return rt_err_t 返回初始化状态*/ rt_err_t my_test_driver_init(struct rt_de…

RAID在VPS主机中的作用是什么?

您是否担心过网站的可靠性&#xff1f;有时候网站会崩溃。服务器会不稳定。 在高峰时段&#xff0c;即使最好的网站也会变得很慢&#xff0c;让人很烦。 这就是VPS主机发挥作用的地方——为您的在线网络奠定坚实的基础。 想进一步提升稳定和可扩展&#xff1f;这就是RAID…

【YOLOv8模型onnx部署详解】YOLOv8模型转onnx格式并使用onnxruntime 进行推理部署

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

讲透一个强大算法模型,Transformer !!

好像一直以来都没有和大家讨论过一个贼牛的模型 – Transformer&#xff01; 首先&#xff0c;咱们先用很直白的语言描述一下&#xff1a;想象你在读一本书&#xff0c;每一页都有很多词。如果你每次只能看到一个词&#xff0c;那么理解整本书会很慢。而Transformer模型就像是…

备忘录标签怎么弄 备忘录标签设置方法

在繁忙的生活中&#xff0c;我们常常需要记录各种琐事、工作任务和灵感闪现。备忘录成了我们不可或缺的助手&#xff0c;但随着时间的推移&#xff0c;备忘录里的内容越来越多&#xff0c;如何高效地管理和查找这些信息成了一个大问题。这时&#xff0c;备忘录的标签功能就显得…

TDengine 推出新连接器,与 Wonderware Historian 无缝连接

在最新发布的TDengine 3.2.3.0 版本中&#xff0c;我们进一步更新了 TDengine 的数据接入功能&#xff0c;推出了一款新的连接器&#xff0c;旨在实现 Wonderware Historian&#xff08;现称为 AVEVA Historian&#xff09;与 TDengine 的集成。这一更新提供了更加便捷和高效的…

【新手友好】计算机SCI期刊,IF=3+,编辑负责,修改稿件认真

一、期刊名称 Journal of Communications and Networks 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;3.6 中科院分区&#xff1a;3区 三、期刊征稿范围 《通信与网络杂志》每年出版六期&#xff0c;致力于发表高质量的…

【NeRF】ExtraNeRF:基于扩散模型的NeRF可见性视角外延

项目主页&#xff1a;https://shihmengli.github.io/extranerf-website/ 来源&#xff1a;华盛顿大学&#xff0c;康奈尔大学&#xff0c;谷歌研究&#xff0c;加州大学伯克利分校 标题&#xff1a;ExtraNeRF: Visibility-Aware View Extrapolation of Neural Radiance Fields …

OurBMC运营委员会2024年上半年度例会顺利召开

6 月 27 日&#xff0c;OurBMC 社区运营委员会 2024 年上半年度例会顺利召开。本次会议采用线上线下结合的方式&#xff0c;各委员在会上听取了 2024 年上半年社区运营委员会的工作总结汇报&#xff0c;并规划了下半年运营重点工作&#xff0c;同时针对社区活动改进、运营规划开…

【系统架构设计师】七、信息安全技术基础知识(网络安全技术|网络与信息安全风险|网络安全协议)

目录 一、网络安全技术 1.1 防火墙 1.2 入侵检测系统IDS 1.3 入侵防御系统IPS 1.4 杀毒软件 1.5 蜜罐系统 二、网络与信息安全风险 三、网络安全协议 四、相关推荐 五、历年真题练习 一、网络安全技术 1.1 防火墙 防火墙是在内部网络和外部因特网之间增加的一道安全…

四川赤橙宏海商务信息咨询有限公司抖音开店靠谱吗?

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。而在这个大潮中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专业的团队和前瞻性的战略眼光&#xff0c;专注于抖音电商服务&#xff0c;为广大商家提供了一站式解决方案&#xff0c;成为了行业…

开放式耳机哪个牌子好?2024热门红榜开放式耳机测评真实篇!

当你跟朋友们聊天时&#xff0c;他们经常抱怨说长时间戴耳机会令耳朵感到不适,后台也有很多人来滴滴我&#xff0c;作为一位致力于开放式耳机的测评博主&#xff0c;在对比了多款开放式耳机之后&#xff0c;你开放式耳机在保护听力方面确实有用。开放式的设计有助于减轻耳道内的…

第31讲:K8S StorageClass使用rbd-provisioner驱动与Ceph RBD块存储集成

文章目录 1.rbd-provisioner驱动介绍2.在K8S集群中部署外部的rbd-provisioner驱动2.1.将Ceph集群的认证文件和配置上传到K8S的各个节点2.2.获取外部rbd-provisioner驱动的资源编排文件2.3.在集群中部署rbd-provisioner驱动程序2.4.进入rbd-provisioner容器中查看Ceph的配置文件…