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

目录

  • 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及仿真环境资源:源码链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第4天|网络构建

文章目录 网络构建 网络构建 在打卡第一天就简单演示了网络构建,一个神经网络模型表示为一个Cell,由不同的子Cell构成。使用这样的嵌套结构可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。 继承nn.Cell类来定义神经网络&…

Android 界面库 (二) 之 Data binding 详细介绍

1. 简介 回顾我们在前面文章《Android 界面库 (一) 之 View binding 简单使用》中学习的 View Binding,它旨在简化 View 与代码之间的绑定过程。它会在编译时期为每个 XML 布局文件生成相应的绑定类(Binding class),该类里包含了布局文件每个有 ID 的 Vi…

centos7 安装单机MongoDB

centos7安装单机 yum 安装 1、配置yum源 vim /etc/yum.repos.d/mongodb.repo [mongodb-org-7.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…

CSS实现文字颜色渐变

直接上代码和效果图&#xff1a; <p class"linecolor">文字颜色渐变</p><style type"text/css">.linecolor{font-size: 30px;background-image:-webkit-linear-gradient(bottom,red,#fd8403,yellow);-webkit-background-clip:text;-web…

Flutter循序渐进==>基金管理APP首页

目录 查看版本 组件 组件源码学习 做个基金APP首页源代码 效果 查看版本 组件 组件的本质就是个类。 import package:flutter/material.dart;void main() {runApp(const OurFirstApp(),); } OurFirstApp()实例化&#xff0c;就是给runApp用的&#xff0c;runApp就是运行实…

AST反混淆|某练习平台混淆代码彻底还原及逆向请求

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 一.目标地址 https://match.yuanrenxue.cn/match/2 二.代码还原 初次请…

Java常量、变量、成员内部类

文章目录 1.常量2.变量3.成员内部类4.变动 1.常量 实例常量&#xff1a;只用final修饰&#xff0c;是某个具体类的实例 静态常量&#xff1a;finalstatic修饰&#xff0c;属于类&#xff0c;所有实例共享同一个类常量 2.变量 实例变量(成员变量)&#xff1a;定义在类内部但在…

【motan rpc 懒加载】异常

文章目录 升级版本解决问题我使用的有问题的版本配置懒加载错误的版本配置了懒加载 但是不生效 lazyInit"true" 启动不是懒加载 会报错一次官方回复 升级版本解决问题 <version.motan>1.2.1</version.motan><dependency><groupId>com.weibo…

Adobe Animate有必要学习AS3脚本吗?

AdobeAnimate软件已经慢慢的替代Flash系列软件在动画中的地位了&#xff0c;也越来越多的出现在各专业课中。不过还是以动画制作方面的教学为主。 Animate软件从入门到提高系列课程​http://www.bilibili.com/cheese/play/ss1826 也有不少同学知道从Flash系列开始&#xff0c;…

便携应急气象站设备—实时监测和记录气象数据

TH-BQX10便携应急气象站设备是一种高度集成、轻便易携的气象观测系统。它采用新型一体化结构设计&#xff0c;能够快速安装和拆卸&#xff0c;适用于各种复杂环境。通过集成多种气象传感器&#xff0c;该设备能够实时监测和记录温度、湿度、风向、风速、降雨量、气压等多种气象…

新手第一个漏洞复现:MS17-010(永恒之蓝)

文章目录 漏洞原理漏洞影响范围复现环境复现步骤 漏洞原理 漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt在处理FEA&#xff08;File Extended Attributes&#xff09;转换时。该函数在将FEA list转换成NTFEA&#xff08;Windows NT FEA&#xff09;list前&am…

stm32学习笔记---TIM编码器接口(代码部分)编码器接口测速

目录 编码器接口的初始化步骤 Tim.h库函数 TIM_EncoderInterfaceConfig 代码实现 Encoder.c 初始化 三种输入模式的选择原则 获取编码器的增量值的函数 调整极性 闸门时间调整 Encoder.h main.c 声明&#xff1a;本专栏是本人跟着B站江科大的视频的学习过程中记录下…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM&#xff0c;并采用它们在电影评论数据集上实现文本分类&#xff0c;会涉及以下几个知识点。 1. 词表构建&#xff1a;包括数据清洗&#xff0c;词频统计&#xff0c;词频截断&#xff0c;词表构建。 2. 预训练词向量应用&#xff1a;下载并加载Glove的…

Terraform基础概念一

Terraform基础概念一 1.Infrastructure-as-Code(IaC)概念1.1 IaC优势1.2 IaC工具1.3 IaC的两种方式 2.Terraform基础概念2.1 Terraform工作原理2.2 Terraform 工作流 3.总结 1.Infrastructure-as-Code(IaC)概念 基础设施即代码&#xff08;Infrastructure-as-Code&#xff0c;…

告别 “屎山” 代码,务必掌握这14 个 SpringBoot 优化小妙招

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

flash-Attention2安装和使用

flash-Attention2安装和使用 文章目录 flash-Attention2安装和使用写在前面解决方案 写在前面 就怕你不知道怎么查 pytorch、cuda 的版本 配置cuda&#xff1a;vim ~/.bashrc export CUDA_HOME/usr/local/cuda/ export PATH$PATH:$CUDA_HOME/bin export LD_LIBRARY_PATH$LD_LIB…

鉴源实验室·基于MQTT协议的模糊测试研究

作者 | 张渊策 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 随着物联网技术的快速发展&#xff0c;越来越多的设备加入到互联网中&#xff0c;形成了庞大的物联网系统。这些设备之间的通信…

【Sklearn-线性回归驯化】史上最为全面的预测分析的基石-线性回归大全

【Sklearn-驯化】史上最为全面的预测分析的基石-线性回归大全 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&…

Java8新特性stream的原理和使用

这是一种流式惰性计算&#xff0c;整体过程是&#xff1a; stream的使用也异常方便&#xff0c;可以对比如List、Set之类的对象进行流式计算&#xff0c;挑出最终想要的结果&#xff1a; List<Timestamp> laterTimes allRecords.stream().map(Record::getTime).filter…

电脑音频剪辑怎么操作?分享六个简单的音频剪辑技巧【常用】

音频剪辑的需求越来越多&#xff0c;大多数短视频中的音乐都是大家后期制作的&#xff0c;主要目的就就是让视频观看起来更有趣。音频剪辑的方法有很多&#xff0c;比较好用的可以借助第三方音频剪辑软件。操作简单&#xff0c;对没有任何剪辑经验的小白用户来说十分友好。 本文…