当前位置: 首页 > news >正文

EmguCV学习笔记 VB.Net 11.9 姿势识别 OpenPose

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

 学习C#知识,请移步:C# 教程 目录_c#教程目录-CSDN博客

11.9 姿势识别 OpenPose

OpenPose模型是一种用于人体姿态估计的深度学习模型,它能够检测出包括眼睛、鼻子、手臂、腿等18个人体的关键点,并估计它们的坐标位置和置信度。

0:Nose(鼻子)、1:neck(脖子)、2:rshoulder(右肩)、3:relbow(右肘部)、4:rwrist(右手腕)、5:shoulder(左肩)、6:lelbow(左肘部)、7:lwrist(左手腕)、8:rhip(右臀部)、9:rknee(右膝盖)、10:rankle(右脚踝)、11:lhip(左臀部)、12:lknee(左膝盖)、13:lankle(左脚踝)、14:reye(右眼)、15:leye(左眼)、16:rear(右耳)、17:lear(左耳)、18:background(背景,主要是作为下一步扩展使用,在实际中不处理)

在使用OpenPose模型时,通常需要将输入图像作为模型的输入,经过处理后得到一个四维数组作为输出结果。这个四维数组,其维度为(N, P, H, W),

各个维度的含义:

  1. N:在输入图像中检测到的人体数量。
  2. P:估计的关键点数,包括了人体的身体部位和手指关节等,只需要取前18个。
  3. H:关键点的坐标信息在输出结果中的高度,在实际使用中就是DnnInvoke.BlobFromImage中size参数设置输出的Height,如果最终输出到源图像,那么应该按照比例进行还原。
  4. W:关键点的坐标信息在输出结果中的宽度,在实际使用中就是DnnInvoke.BlobFromImage中size参数设置输出的Width,如果最终输出到源图像,那么应该按照比例进行还原。

具体到某个元素的值就是该点是人体关键点的置信度,例如(0,2,10,30)返回(0,2,height,width)中的最大值为0.759,那么可以认为坐标(10,30)是右肩的可能性为75.9%。

从上面可以看出,在这个四维数组中,每个元素包含了x坐标(维度W)、y坐标(维度H)和置信度三个值。因此,可以通过遍历该四维数组并解析每个元素来获取所有关键点的坐标信息和置信度,从而进行人体姿态估计的后续处理。

【代码位置:frmChapter11】Button10_Click、getMaxPoint

   '关键点信息

    Structure Keypoint

        Dim conf As Single  '置信度

        Dim p As Point     '关键点坐标

    End Structure

    '使用openpose显示人体关键点

    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click

        '人体关键点

        Dim body_Keypoint() As String = {"nose", "neck", "rshoulder", "relbow", "rwrist", "lshoulder",

     "lelbow", "lwrist", "rhip", "rknee", "rankle", "lhip",

     "lknee", "lankle", "reye", "leye", "rear", "lear", "background"}

        Dim m As New Mat("C:\learnEmgucv\action.jpg", ImreadModes.Color)

        Dim net As Dnn.Net = DnnInvoke.ReadNetFromTensorflow("C:\learnEmgucv\openpose\graph_opt.pb")

        Dim blob As Mat = DnnInvoke.BlobFromImage(m, 1.0, New Drawing.Size(360, 360), New MCvScalar(127.5, 127.5, 127.5), False, False)

        net.SetInput(blob)

        Dim mout As Mat = net.Forward()

        '返回四维数组

        Dim fout(,,,) As Single

        fout = mout.GetData()

        Dim H As Integer = fout.GetLength(2)

        Dim W As Integer = fout.GetLength(3)

        Dim lkeypoint As New List(Of Keypoint)

        '获得关键点信息

        lkeypoint = getMaxPoint(fout)

        Dim x, y As Single

        For i As Integer = 0 To lkeypoint.Count - 1

            '按照比例获得关键点在源图像中的坐标

            x = (lkeypoint(i).p.X / W) * m.Width

            y = (lkeypoint(i).p.Y / H) * m.Height

            '调试时输出信息

            'Console.WriteLine(body_Keypoint(i) & " " & lkeypoint(i).conf & " " & lkeypointi).p.X & "-" & lkeypoint(i).p.Y)

            '置信度超过某个值才能认为是正确的结果

            If lkeypoint(i).conf > 0.1 Then

                CvInvoke.Circle(m, New Point(x, y), 4, New MCvScalar(255, 0, 0), -1)

            End If

        Next

        CvInvoke.Imshow("m", m)

    End Sub

    '获得人体18个关键点列表,这里考虑只有一个人体的情况

    Private Function getMaxPoint(ByVal inputarray(,,,) As Single) As List(Of Keypoint)

        Dim lkeypoint As New List(Of Keypoint)

        Dim peoplecount As Integer = 1  '考虑只有一个人体的情况,如果多个人体,请使用 inputarray.GetLength(0)

        Dim modecount As Integer = 18   '只考虑18个人体关键点, inputarray.GetLength(1)

        Dim dim3 As Integer = inputarray.GetLength(2)   '图像高度

        Dim dim4 As Integer = inputarray.GetLength(3)   '图像宽度

        '循环,检测到的人体个数

        For i As Integer = 0 To peoplecount - 1

            '循环,检测到的人体关键点

            For j As Integer = 0 To modecount - 1

                Dim maxvalue As Single = 0

                Dim maxX As Integer = 0

                Dim maxY As Integer = 0

                '循环,图像高度,即对应Y坐标

                For k As Integer = 0 To dim3 - 1

                    '循环,图像宽度,即对应X坐标

                    For l As Integer = 0 To dim4 - 1

                        '获得置信度最大的值,并获得其坐标

                        If maxvalue < inputarray(i, j, k, l) Then

                            maxvalue = inputarray(i, j, k, l)

                            maxX = l

                            maxY = k

                        End If

                    Next

                Next

                '添加到关键点列表

                Dim kp As New Keypoint

                kp.conf = maxvalue

                kp.p = New Point(maxX, maxY)

                lkeypoint.Add(kp)

            Next

        Next

        Return lkeypoint

End Function

输出结果如下图所示:

图11-9 获得人体关键点

下面的代码通过人体关键点的关联,建立关键点的连线。

【代码位置:frmChapter11】Button11_Click、PointFToPoint

    '关键点关联

    Structure Relation

        '开始关键点

        Dim startpoint As Integer

        '结束关键点

        Dim endpoint As Integer

        Sub New(ByVal startpoint As Integer, ByVal endpoint As Integer)

            Me.startpoint = startpoint

            Me.endpoint = endpoint

        End Sub

    End Structure

    '获得人体关键点,并将关键点关联起来

    Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click

        Dim body_Keypoint() As String = {"nose", "neck", "rshoulder", "relbow", "rwrist", "lshoulder",

      "lelbow", "lwrist", "rhip", "rknee", "rankle", "lhip",

      "lknee", "lankle", "reye", "leye", "rear", "lear", "background"}

        '18个关键点关联

        Dim body_Relations As New List(Of Relation)

        body_Relations.Add(New Relation(16, 14))

        body_Relations.Add(New Relation(14, 0))

        body_Relations.Add(New Relation(17, 15))

        body_Relations.Add(New Relation(15, 0))

        body_Relations.Add(New Relation(0, 1))

        body_Relations.Add(New Relation(1, 2))

        body_Relations.Add(New Relation(2, 3))

        body_Relations.Add(New Relation(3, 4))

        body_Relations.Add(New Relation(1, 5))

        body_Relations.Add(New Relation(5, 6))

        body_Relations.Add(New Relation(6, 7))

        body_Relations.Add(New Relation(1, 8))

        body_Relations.Add(New Relation(8, 9))

        body_Relations.Add(New Relation(9, 10))

        body_Relations.Add(New Relation(1, 11))

        body_Relations.Add(New Relation(11, 12))

        body_Relations.Add(New Relation(12, 13))

        Dim m As New Mat("C:\learnEmgucv\action.jpg", ImreadModes.Color)

        Dim net As Dnn.Net

        net = DnnInvoke.ReadNetFromTensorflow("C:\learnEmgucv\openpose\graph_opt.pb")

        Dim blob As Mat

        blob = DnnInvoke.BlobFromImage(m, 1.0, New Drawing.Size(360, 360), New MCvScalar(127.5, 127.5, 127.5), False, False)

        net.SetInput(blob)

        Dim mout As New Mat

        mout = net.Forward()

        Dim fout(,,,) As Single

        fout = mout.GetData()

        Dim H As Integer = fout.GetLength(2)

        Dim W As Integer = fout.GetLength(3)

        Dim lkeypoint As New List(Of Keypoint)

        lkeypoint = getMaxPoint(fout)

        Dim x, y As Single

        For i As Integer = 0 To lkeypoint.Count - 1

            '按照比例获得关键点在源图像中的坐标

            x = (lkeypoint(i).p.X / W) * m.Width

            y = (lkeypoint(i).p.Y / H) * m.Height

            '置信度超过某个值才能认为是正确的结果

            If lkeypoint(i).conf > 0.1 Then

                CvInvoke.Circle(m, New Point(x, y), 5, New MCvScalar(255, 0, 0), -1)

            End If

        Next

        Dim startpoint As PointF

        Dim startpointx, startpointy As Single

        Dim endpoint As PointF

        Dim endpointx, endpointy As Single

        For Each body_Relation As Relation In body_Relations

            startpointx = (lkeypoint(body_Relation.startpoint).p.X / W) * m.Width

            startpointy = (lkeypoint(body_Relation.startpoint).p.Y / H) * m.Height

            startpoint = New PointF(startpointx, startpointy)

            endpointx = (lkeypoint(body_Relation.endpoint).p.X / W) * m.Width

            endpointy = (lkeypoint(body_Relation.endpoint).p.Y / H) * m.Height

            endpoint = New PointF(endpointx, endpointy)

            '关键点置信度是否符合要求

            If lkeypoint(body_Relation.startpoint).conf > 0.1 And lkeypoint(body_Relation.endpoint).conf > 0.1 Then

                '关键点建立连线

                CvInvoke.Line(m, PointFToPoint(startpoint), PointFToPoint(endpoint), New MCvScalar(0, 255, 0), 3)

            End If

        Next

        CvInvoke.Imshow("m", m)

    End Sub

    'PointFPoint方法

    Public Shared Function PointFToPoint(ByVal pf As PointF) As Point

        Return New Point(CInt(pf.X), CInt(pf.Y))

End Function

输出结果如下图所示:

 

图11-10 人体关键点连线

下面代码是在上面代码基础上,实现在视频中显示人体关键点的连线。

【代码位置:frmChapter11】Button12_Click、vc_ImageGrabbed

    Dim vc As VideoCapture

    Dim body_Relations As New List(Of Relation)

    '将视频人物标注人体关键点和关键点连线

    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click

        '18个关键点关联

        body_Relations = New List(Of Relation)

        body_Relations.Add(New Relation(16, 14))

        body_Relations.Add(New Relation(14, 0))

        body_Relations.Add(New Relation(17, 15))

        body_Relations.Add(New Relation(15, 0))

        body_Relations.Add(New Relation(0, 1))

        body_Relations.Add(New Relation(1, 2))

        body_Relations.Add(New Relation(2, 3))

        body_Relations.Add(New Relation(3, 4))

        body_Relations.Add(New Relation(1, 5))

        body_Relations.Add(New Relation(5, 6))

        body_Relations.Add(New Relation(6, 7))

        body_Relations.Add(New Relation(1, 8))

        body_Relations.Add(New Relation(8, 9))

        body_Relations.Add(New Relation(9, 10))

        body_Relations.Add(New Relation(1, 11))

        body_Relations.Add(New Relation(11, 12))

        body_Relations.Add(New Relation(12, 13))

        vc = New VideoCapture("C:\learnEmgucv\action.mp4")

        If vc.IsOpened = False Then

            MessageBox.Show("打开文件失败")

            Exit Sub

        End If

        '添加ImageGrabbed事件

        AddHandler vc.ImageGrabbed, AddressOf vc_ImageGrabbed

        vc.Start()

    End Sub

    Private Sub vc_ImageGrabbed(sender As Object, e As EventArgs)

        Dim outangle As Double = 0

        Dim outpix As Double = 0

        Dim nextframe As New Mat

        vc.Retrieve(nextframe)

        If vc.Get(CapProp.PosFrames) >= vc.Get(CapProp.FrameCount) Then

            vc.Stop()

            vc.Dispose()

            RemoveHandler vc.ImageGrabbed, AddressOf vc_ImageGrabbed

            Exit Sub

        End If

        Dim net As Dnn.Net

        net = DnnInvoke.ReadNetFromTensorflow("graph_opt.pb")

        Dim blob As Mat

        blob = DnnInvoke.BlobFromImage(nextframe, 1.0, New Drawing.Size(360, 360), New MCvScalar(127.5, 127.5, 127.5), True, False)

        net.SetInput(blob)

        Dim mout As New Mat

        mout = net.Forward()

        Dim fout(,,,) As Single

        fout = mout.GetData()

        Dim H As Integer = fout.GetLength(2)

        Dim W As Integer = fout.GetLength(3)

        Dim lkeypoint As New List(Of Keypoint)

        lkeypoint = getMaxPoint(fout)

        Dim x, y As Single

        For i As Integer = 0 To lkeypoint.Count - 1

            x = (lkeypoint(i).p.X / W) * nextframe.Width

            y = (lkeypoint(i).p.Y / H) * nextframe.Height

            If lkeypoint(i).conf > 0.1 Then

                CvInvoke.Circle(nextframe, New Point(x, y), 5, New MCvScalar(0, 0, 255), -1)

            End If

        Next

        Dim startpoint As PointF

        Dim startpointx, startpointy As Single

        Dim endpoint As PointF

        Dim endpointx, endpointy As Single

        For Each body_Relation As Relation In body_Relations

            startpointx = (lkeypoint(body_Relation.startpoint).p.X / W) * nextframe.Width

            startpointy = (lkeypoint(body_Relation.startpoint).p.Y / H) * nextframe.Height

            startpoint = New PointF(startpointx, startpointy)

            endpointx = (lkeypoint(body_Relation.endpoint).p.X / W) * nextframe.Width

            endpointy = (lkeypoint(body_Relation.endpoint).p.Y / H) * nextframe.Height

            endpoint = New PointF(endpointx, endpointy)

            If lkeypoint(body_Relation.startpoint).conf > 0.15 And lkeypoint(body_Relation.endpoint).conf > 0.15 Then

                CvInvoke.Line(nextframe, PointFToPoint(startpoint), PointFToPoint(endpoint), New MCvScalar(0, 255, 0), 4)

            End If

        Next

        ImageBox1.Image = nextframe

        Threading.Thread.Sleep(30)

End Sub

输出结果如下图所示:

 

图11-11 视频中使用人体关键点连线

相关文章:

EmguCV学习笔记 VB.Net 11.9 姿势识别 OpenPose

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

2024.9.26 Spark学习

资料&#xff1a; Spark基础入门-第一章-1.1-Spark简单介绍_哔哩哔哩_bilibili &#xff08;1&#xff09;基础知识 Apache Spark 是用于大规模数据&#xff08;large-scale data&#xff09;处理的统一分析引擎。 分布式处理数据 PySpark模块 Spark 和 Hadoop 有区别&…...

我与Linux的爱恋:进程地址空间

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 1.来段代码2.引入最基本的理解3.尝试理解 1.来段代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h&g…...

C++的哲学思想

C的哲学思想 文章目录 C的哲学思想&#x1f4a1;前言&#x1f4a1;C的哲学思想☁️C底层不应该基于任何其他语言&#xff08;汇编语言除外&#xff09;☁️只为使用的东西付费&#xff08;不需要为没有使用到的语言特性付费&#xff09;☁️以低成本提供高级抽象&#xff08;更…...

IO(输入输出流)

1.IO a.介绍 i.IO是指Input和Output&#xff0c;即输入和输出&#xff0c;以内存为中心&#xff1a; 1.Input是指从外部读入数据到内存。 2.Output是指把数据从内存输出到外部。 ii.IO流是一种顺序读写数据的模式&#xff0c;它的特点是单向流动。数据类似自…...

python爬虫:从12306网站获取火车站信息

代码逻辑 初始化 (init 方法)&#xff1a; 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法)&#xff1a; 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法)&#xff1a; 从服务器响应中提取车站信息字符串。去掉字符串末尾的…...

Android个性名片界面的设计——约束布局的应用

节选自《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年7月出版 做最简单的安卓入门教程&#xff0c;手把手视频、代码、答疑全配齐 【任务目标】 使用约束布局、TextView控件实现一个个性名片界面的设计&#xff0c;界面如图1所示。 图1 个性名片…...

Python 课程18-SQLAlchemy

前言 SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射&#xff08;ORM&#xff09;库&#xff0c;它使得开发者能够通过 Python 代码与数据库进行交互&#xff0c;而不必编写 SQL 查询。SQLAlchemy 提供了对多种数据库的支持&#xff0c;包括 MySQL、PostgreSQL…...

Module did not self-register: ‘drivelist.node‘报错解决

报错如下&#xff1a; node_modules/bindings/bindings.js:121throw e;^Error: Module did not self-register: xxxx/node_modules/drivelist/build/Release/drivelist.node.at process.func [as dlopen] (electron/js2c/asar.js:140:31)at Object.Module._extensions..node (…...

zabbix基本概念与组件

文章目录 一、zabbix简介二、​​​​​​​zabbix构成三、​​​​​​​zabbix监控对象四、​​​​​​​zabbix常用术语五、 Zabbix 6.0 新特性1.Zabbix server高可用防止硬件故障或计划维护期的停机2.Kubernetes系统从多个维度采集指标 六、zabbix 工作原理1、主动模式2、…...

Linux常用网络工具及示例

Linux系统中有许多用于网络管理、监控和故障排除的工具。以下是一些常用的网络工具及其基本用法示例&#xff1a; 1. ping - 测试主机之间的网络连接。 ping www.google.com 2. netstat - 显示网络连接、路由表、接口统计等信息。 netstat -an # 显示所有网络连接和监听…...

Go容器化微服务系统实战

1-1 本课的go微服务有什么不同&#xff1f; 聚焦于容器化可观测的购物微服务系统实战&#xff0c;通过介绍Go语言的应用趋势、容器化优势及微服务适用性&#xff0c;旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…...

研究生三年概括

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、研一1.上学期2. 下学期 二、研二1.研二上2.研二下 三、研三1.研三上2.研三下 前言 不知道是谁说的了&#xff0c;人生的路很长&#xff0c;关键的就那么几…...

MongoDB在Linux系统中的安装与配置指南

在这篇文章中&#xff0c;我们将介绍如何在CentOS 7服务器上安装MongoDB&#xff0c;并通过DataX将数据从MongoDB迁移到MySQL数据库。这将包括MongoDB的安装、配置、数据准备以及使用DataX进行数据迁移的详细步骤。 MongoDB简介 MongoDB是一个高性能、开源、无模式的文档型数据…...

Linux下如何实现不用加路径调用启动脚本

配置Systemctl启动 Linux下便于启停服务&#xff0c;可以配置systemcl,配置如下描述 说明 只有root用户可配置,文件路径为 /etc/systemd/system/XXX.service&#xff0c;本文将用nginx.service举例说明 1、创建文件 首先创建一个nginx.service文件&#xff0c;用于配置ngi…...

编程练习2 数据单元的变量替换

示例1: 1,2<A>00 示例2: 1,2<A>00,3<A>00 示例3: <B>12,1,2<B>1 示例4: <B<12,1 输出依次如下&#xff1a; #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…...

mysql的查询操作

MySQL的查询操作是数据库管理和数据检索的核心。通过SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;语句&#xff0c;用户可以执行包括数据检索、数据插入、更新和删除在内的多种操作。在本文中&#xff0c;我们将重点讨论数据检索&#xff…...

0基础学前端 day2

大家好&#xff0c;欢迎来到无限大的频道。 今天继续带领大家开始0基础学前端。 一、CSS简介与基础 层叠样式表&#xff08;CSS&#xff0c;Cascading Style Sheets&#xff09;是用来进行网页样式和布局设计的语言。通过CSS&#xff0c;开发者可以控制网页中元素的颜色、字体…...

Invalid Executable The executable contains bitcode

Invalid Executable The executable contains bitcode xcode世界xcode16后&#xff0c;打包上传testflight时三方库报错&#xff1a;Invalid Executable - The executable ***.app/Frameworks/xxx.framework/xxx contains bitcode. 解决方案&#xff1a; 执行一下指令删除该f…...

音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件

一、引言 有很多工具可以分析FLV格式&#xff0c;这里推荐flvAnalyser。其支持&#xff1a; 1.FLV 文件分析&#xff08;Tag 列表、时间戳、码率、音视频同步等&#xff09;&#xff0c;HEVC(12)/AV1(13) or Enhanced RTMP v1 with fourCC(hvc1/av01)&#xff1b; 2.RTMP/HTT…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...