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

目录

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格式内的图像从源到处理各分支转变为有向图,问题就解决了一大半。我们可以通过遍历父子节点关系,把流程图转化为图结构,并利用图结构的方法把一条条流程获取出来:

python 复制代码
    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及仿真环境资源:源码链接


相关推荐
数据智能老司机5 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机6 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i6 小时前
drf初步梳理
python·django
每日AI新事件6 小时前
python的异步函数
python
这里有鱼汤7 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook16 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室17 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三18 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试