入门机器视觉的正确打开方式——徒手撸一个python+opencv实现的机器视觉简易调试工具(下)

news2024/12/25 1:00:12

目录

  • 1.引言
  • 2.框架思路
  • 3.图像处理流程化的实现
    • 3.1如何解析图像流程数据结构
    • 3.2 使用networkx网络图库
    • 3.3 python实现
  • 4.结论
  • 5.python源码
  • PS.扩展阅读
    • ps1.六自由度机器人相关文章资源
    • ps2.四轴机器相关文章资源
    • ps3.移动小车相关文章资源

1.引言

在当今AI时代,关于视觉识别似乎已被深度学习所统治,而深度学习是个黑箱,无法看到里面运行的机制,并且它是一个疯狂的吞大数据的野兽,且运行需要极高的CPU或GPU的配置,对于初学者,尤其是手上没有高配置的机器的人,进入视觉识别设置了一道高高的门栏。
机器视觉作为人工智能领域的一个重要分支,正逐渐渗透到工业自动化、智能监控、医疗诊断、自动驾驶等众多领域。机器视觉技术赋予了机器“看”的能力,使得机器能够感知环境、理解图像内容,并做出相应的决策。
对于初学者来说,入门机器视觉可能会感到无从下手,市面上虽然有许多成熟的机器视觉软件,但它们往往价格昂贵,且功能复杂,不够灵活。幸运的是,Python语言以其简洁易懂的特性,结合OpenCV这一强大的计算机视觉库,为初学者提供了一个低成本、高效率的学习平台。
在这里插入图片描述
本文将引导读者通过编写一个简易的机器视觉调试工具,来深入理解机器视觉的基本概念和操作流程。我们将从零开始,一步步构建一个基于Python和OpenCV的应用程序,不仅能够帮助初学者快速入门,还能作为进一步探索机器视觉领域的知识储备。
效果如下:
在这里插入图片描述

2.框架思路

如上所示,我们可以把opencv这个极开源世界优秀视觉处理的知识库,从抽象的代码,变成一条条流程化的知识流,并且利用将超级参数的调整可视化,即视化实现对机器视觉处理模块或算法的快速直观理解,极端时间内建立对算法的“手感”。便于在实际问题中,快速思考获得解决方案。
视觉识别的过程就是一个图像信息的流处理过程:

在这里插入图片描述
基于以上思考,可以把我们的调试工具设计成一个类似流水线一样的解读执行过程,就是我们先根据场景特点确定上下游的处理模块,把它们做成一个草图,然后我们的主程序负责把它按流程图执行,并且可以随时打开流水线的某个处理盒子,对参数进行方便的调节。总得来说这个工具应该是这样的:
在这里插入图片描述

3.图像处理流程化的实现

上篇讲到,我们可以用JSON格式来把整个图像处理过程结构化,形成一个树状结构的,把父节点子节点进行上下游关联。然后通过一个对JSON结构解析的一个解析器进行解析,顺序调用相应的opencv图像处理模块,进行流程化处理,最终获得结果。

3.1如何解析图像流程数据结构

这里为了处理图像的流程结构,需要有一些技术手段。特别是涉及到不是单个流程的时候,图像流程数据结构为树状结构有分支,且有很多串联,像这样子:
在这里插入图片描述
如何去读取这种结构,把图像从节点1,进行按顺序处理,知道节点4。我们选择了一个比较强大的库networkx。

3.2 使用networkx网络图库

以下是大模型对networkx网络图库的解释:

NetworkX 是一个用 Python 编写的开源软件包,用于创建、操作和研究复杂网络的结构、动态和功能。它提供了丰富的数据结构和方法,使得处理网络数据变得简单和直观。以下是 NetworkX 的一些主要特点:多种网络类型:NetworkX 支持多种类型的网络,包括无向图、有向图、多图、加权图等。
丰富的算法:NetworkX 提供了大量用于分析网络的算法,如最短路径、连通性、聚类系数、中心性分析等。
图形绘制:NetworkX 可以与 Matplotlib 等图形库结合使用,方便地绘制网络图形,帮助用户直观地理解网络结构。
数据读取和写入:NetworkX 支持多种数据格式的读取和写入,包括边列表、邻接矩阵、Pickle 文件、GraphML、GML 等。
交互式工具:NetworkX 还提供了一些交互式工具,如网络分析工具箱(NetworkX Toolkit)和网络分析浏览器(NetworkX Explorer)。
扩展性:NetworkX 的设计允许用户根据自己的需求扩展新的功能。
社区支持:NetworkX 是一个活跃的开源项目,拥有一个庞大的用户和开发者社区,提供了大量的文档、教程和示例代码。
跨平台:NetworkX 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。
NetworkX 广泛应用于社会学、生物学、计算机科学、物理学等领域,用于研究社交网络、生物网络、互联网结构等复杂网络系统。

3.3 python实现

我们利用networkx库的nx.DiGraph() ,有向图结构,把以上JSON格式内的图像从源到处理各分支转变为有向图,问题就解决了一大半。我们可以通过遍历父子节点关系,把流程图转化为图结构,并利用图结构的方法把一条条流程获取出来:

    def draw_module(module,layout):
        """
        解释并画出模型流程
        """
        dG= nx.DiGraph() #有向图
        edges=[]
        for key in module:            
            if key[:1]!='@':
                if len(module[key]['son']):
                    for son in module[key]['son']:
                        edges.append((key,son))
        dG.add_edges_from(edges)
        for key in module:            
            if key[:3]=='图像源':                
                endnodes=[]
                searchson(key,module,endnodes)
                if len(endnodes):
                    for b in endnodes:
                        link=nx.dijkstra_path(dG,key, b) 
                        layout.append([sg.Button(bu) for bu in link])

以上程序中找到一个有效的图像处理链路,是利用了在 NetworkX 库中,nx.dijkstra_path 函数,此函数是用于计算图中从一个源节点到其他所有节点的最短路径。
于是就可以生成了如下流程:
在这里插入图片描述

4.结论

通过图像处理流程的结构化(或者序列化)我们把图像处理流程的模型进行了持久化,把处理的流程顺序处理模块关系,以及调整的参数都可以进行保存,甚至可以持久保存到硬盘,这样就可以进行经验模型的复用了。还有就是,我们实现了把opencv等视觉处理模型的参数调整进行了可视化套壳,使得抽象的参数变得易于调试,直接看效果,快速掌握参数的作用。在一个是我们巧妙的利用了NetworkX 库,把复杂流程图进行了转化,转化成有向图,并利用最小路径查找,实现了流程的解析。利用这三个方法,我们就可以构建任意符合流程化图像处理的庞大的图像处理库,和图像处理知识模型和参数调试工具。可以助力踏入机器视觉领域的初学者快速积累经验。

5.python源码

关于本工具的源码已上传至资源链接仅供研究学习,未经允许不得商用。

[------------本篇完--------------------------]

PS.扩展阅读

————————————————————————————————————————

对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询

ps1.六自由度机器人相关文章资源

(1) 对六自由度机械臂的运动控制及python实现(附源码)
在这里插入图片描述

(2) N轴机械臂的MDH正向建模,及python算法
在这里插入图片描述

ps2.四轴机器相关文章资源

(1) 文章:python机器人编程——用python实现一个写字机器人
在这里插入图片描述

在这里插入图片描述

(2)python机器人实战——0到1创建一个自动是色块机器人项目-CSDN直播

(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(4)实现了语音输入+大模型指令解析+机器视觉+机械臂流程打通
在这里插入图片描述
在这里插入图片描述

ps3.移动小车相关文章资源

(1)python做了一个极简的栅格地图行走机器人,到底能干啥?[第五弹]——解锁蒙特卡洛定位功能-CSDN博客
(2) 对应python资源:源码地址
在这里插入图片描述
在这里插入图片描述

(3)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(上篇)_agv编程-CSDN博客
(4)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)_agv路线规划原则python-CSDN博客
对应python及仿真环境资源:源码链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【JPCS独立出版】第四届机电一体化技术与航空航天工程国际学术会议(ICMTAE 2024,8月2-4)

第四届机电一体化技术与航空航天工程国际学术会议(ICMTAE 2024)将围绕“机电一体化”、“电工与电子技术”、“航天工程”与“航空工程”等相关最新研究领域, 为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供…

【语言模型】Xinference的部署过程

一、引言 Xinference,也称为Xorbits Inference,是一个性能强大且功能全面的分布式推理框架,专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家,都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…

【MTK平台】如何学习Bluedroid A2DP Code

一 Bluedroid A2DP架构图 备注: vendor/mediatek/proprietary/packages/modules/Bluetooth/system/audio_a2dp_hw/src 目录下编译生成audio.a2dp.default.so,主要实现a2dp做为设备的功能 二 A2DP File Hierarchy ModuleFileDescriptionAudio HAL (hardware/libhardware/…

好用的兼容性测试工具推荐

兼容性测试确保软件在不同系统和环境中的一致性。本指南探讨了开发人员和QA专业人员有效检测和解决问题的工具,从而提高应用程序的稳健性和用户满意度。 好用的兼容性测试工具推荐 1.Lambda测试 它是一个由AI驱动的测试编排和执行平台,可让您使用超过300…

微信小程序在线客服源码系统 附带完整的安装代码包以及搭建部署教程

系统概述 微信小程序在线客服源码系统是一款基于微信小程序的客服解决方案,它集成了实时通讯、聊天记录保存、智能机器人客服、自定义消息通知、多客服协同工作、客户信息管理、数据统计与分析等多项功能。该系统采用云端架构,确保数据的安全性和可恢复…

北京小程序开发如何选择开发团队与开发语言?

随着移动互联网的飞速发展,小程序的开发与使用也变得越来越频繁。对于商户来说,市面上的小程序开发团队数量众多又鱼龙混杂,应该如何选择合适的开发团队与开发语言呢? 一. 北京小程序的开发语言的种类及不同 北京小程…

正版软件 | WIFbox:智能化文件管理工具,让效率与隐私并行

在数字化办公日益普及的今天,文件管理成为了提升工作效率的关键。WIFbox 一款智能文件管理工具,利用强大的人工智能技术,帮助您快速对文件进行分类,完成复杂的智能文件分类任务。 智能分类,效率倍增 WIFbox 通过精细化…

三河市寄大件物品快递多少钱?

在三河市,如果你需要寄送大件物品,费用问题无疑是你最关心的。不同的快递公司收费标准各异,今天,就让我们来探讨一下,从三河市寄大件物品,哪家快递更划算。 1. 祺祺寄快递: “祺祺寄快递”是一…

Vscode lanuch.json

Intro 使用launch.json 能够方便的运行需要传很多参数的代码文件 如下: import math import argparse # 1、导入argpase包def parse_args():parse argparse.ArgumentParser(descriptionCalculate cylinder volume) # 2、创建参数对象parse.add_argument(--rad…

【原创教程】FX5UCPU扩展FX3模拟量模块应用案例(新手篇)

模块配置 名称 型号 数量 PLC FX5U-64MR/ES 1个 总线转换模块 FX5U-CNV-BUS 1个 FX3U模拟量输入模块 FX3U-4AD 2个 ①硬件配置 扩展FX3模块时,若在总线转换模块后面添加了FX3扩展电源模块,则最多可添加8个FX3智能模块,否则最多6个。 ②软件配置

程序猿大战Python——Python与MySQL交互三

SQL注入 目标:了解什么是SQL注入? SQL注入指的是:恶意篡改或注入SQL条件。 当开发者的数据条件若被恶意篡改,那就达不到预期的查询效果。 为了了解SQL注入是怎么回事?通过一个案例来分析。 例如,使用命令…

vue3【实战】创建项目、创建并提交代码到远程仓库,安装 SASS, 清除浏览器默认样式 reset-css, 清除模板代码,提升开发效率的必要集成

新建远程仓库(码云) https://gitee.com/ 得到远程仓库地址 https://gitee.com/sunshine39/ec-web-vue3.git创建项目 vscode 安装插件 vue3-snippets-for-vscode安装 node v20.12.2设置淘宝镜像 npm config set registry https://registry.npmmirror.c…

Linux 的启动流程

第一步、加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 以我的电脑为例,/boot 目录下面大概是这样一些文件: $ ls /bootconfig-3.2.0-3-amd64config-3.2.0-4-amd64grubinitrd.img-3.2.0-3-amd64initrd.img-3.2.0-4-amd6…

laravel对接百度智能云 实现智能机器人

创建API Key和 Secret Key进入网址:百度智能云千帆大模型平台 如下图操作: 填写完毕点击确认后,即可得到sk和ak 后端接口实现代码: //调用百度智能云第三方机器人接口public function run($text) {$curl curl_init();curl_setop…

I/O系统

1. I/O接口 接口可以看做两个系统或两个部件之间的交接部分,它既可以是两种硬设备之间的连接电路,也可以是两个软件之间的共同逻辑边界。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。 2. 程序查询方式 程序查询方式是一…

代码统计工具V1.0.0(支持各种文件类型)

点击下载《代码统计工具(支持各种文件类型)》 1. 前言 本文介绍了一款使用C#开发的代码行数统计软件。该软件允许用户通过选择文件目录和设置统计项目类型,来统计指定目录下的代码行数。软件提供了三种统计方式:按文件名统计、按…

虹科技术丨Linux环境再升级:PLIN驱动程序正式发布

来源:虹科技术丨Linux环境再升级:PLIN驱动程序正式发布 原文链接:https://mp.weixin.qq.com/s/N4zmkYXTPr7xm-h2s7QiLw 欢迎关注虹科,为您提供最新资讯! #PLIN #LIN #LIN接口 导读 Linux驱动程序领域再添新成员&am…

关于RAG优化的几个小技巧

一、背景说明 RAG技术为大型语言模型(LLMs)提供了从数据源检索到的信息,以支撑其生成的答案。简而言之,RAG就是搜索加上LLM提示,你让模型在提供的信息上下文中回答问题。查询和检索到的上下文都被注入到发送给LLM的提…

js删除el-table删除新增项,有的已经保存有的未经保存

有时候在弹窗中的弹窗要删除数据,有的是刚新增进来的,没有经过保存就没有id,有的已经保存过就有id 根据情况设定是否为编辑模式,如果为编辑模式就需要进行筛选删除及接口,如果不是编辑模式,只需要进行筛选删除 this.editFlag true; // 为编辑模式// 删除伤亡名单handelDel() …

基于高通8155的SNPE-PTQ量化方法介绍

一、基于高通8155的SNPE-PTQ量化与打包 量化位置与工作目录,snpe1.51与1.43环境结构相同,下面以1.51为例介绍: SNPE1.51量化:172.20.84.162:/media/share_31.106SNPE1.43量化:172.20.65.2:/media/share_31.106 脚本…