【python】OpenCV—Aruco

在这里插入图片描述

文章目录

  • Detect Aruco
  • Guess Aruco Type

Detect Aruco

学习参考来自:OpenCV基础(19)使用 OpenCV 和 Python 检测 ArUco 标记

更多使用细节可以参考:【python】OpenCV—Color Correction

源码:

链接:https://pan.baidu.com/s/1bEPuiix0MrtL7Fu3paoRug
提取码:123a

在这里插入图片描述

# -----------------------------
#   USAGE
# -----------------------------
# python detect_aruco_image.py --image images/example_01.png --type DICT_5X5_100
# python detect_aruco_image.py --image images/example_02.png --type DICT_ARUCO_ORIGINAL# -----------------------------
#   IMPORTS
# -----------------------------
# Import the necessary packages
import argparse
import imutils
import cv2
import sys# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the input image containing the ArUCo tag")
ap.add_argument("-t", "--type", type=str, default="DICT_ARUCO_ORIGINAL", help="Tpe of ArUCo tag to detect")
args = vars(ap.parse_args())# Define the names of each possible ArUco tag that OpenCV supports
ARUCO_DICT = {"DICT_4X4_50": cv2.aruco.DICT_4X4_50, "DICT_4X4_100": cv2.aruco.DICT_4X4_100,"DICT_4X4_250": cv2.aruco.DICT_4X4_250, "DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,"DICT_5X5_50": cv2.aruco.DICT_5X5_50, "DICT_5X5_100": cv2.aruco.DICT_5X5_100,"DICT_5X5_250": cv2.aruco.DICT_5X5_250, "DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,"DICT_6X6_50": cv2.aruco.DICT_6X6_50, "DICT_6X6_100": cv2.aruco.DICT_6X6_100,"DICT_6X6_250": cv2.aruco.DICT_6X6_250, "DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,"DICT_7X7_50": cv2.aruco.DICT_7X7_50, "DICT_7X7_100": cv2.aruco.DICT_7X7_100,"DICT_7X7_250": cv2.aruco.DICT_7X7_250, "DICT_7X7_1000": cv2.aruco.DICT_7X7_1000,"DICT_ARUCO_ORIGINAL": cv2.aruco.DICT_ARUCO_ORIGINAL,"DICT_APRILTAG_16h5": cv2.aruco.DICT_APRILTAG_16h5,"DICT_APRILTAG_25h9": cv2.aruco.DICT_APRILTAG_25h9,"DICT_APRILTAG_36h10": cv2.aruco.DICT_APRILTAG_36h10,"DICT_APRILTAG_36h11": cv2.aruco.DICT_APRILTAG_36h11}# Load the input image from disk and resize it
print("[INFO] Loading image...")
image = cv2.imread(args["image"])
image = imutils.resize(image, width=600)# Verify that the supplied ArUCo tag exists is supported by OpenCV
if ARUCO_DICT.get(args["type"], None) is None:print("[INFO] ArUCo tag of '{}' is not supported!".format(args["type"]))sys.exit(0)# Load the ArUCo dictionary, grab the ArUCo parameters and detect the markers
print("[INFO] Detecting '{}' tags...".format(args["type"]))
arucoDict = cv2.aruco.Dictionary_get(ARUCO_DICT[args["type"]])
arucoParams = cv2.aruco.DetectorParameters_create()
(corners, ids, rejected) = cv2.aruco.detectMarkers(image, arucoDict, parameters=arucoParams)# Verify *at least* one ArUCo marker was detected
if len(corners) > 0:# Flatten the ArUCo IDs listids = ids.flatten()# Loop over the detected ArUCo cornersfor (markerCorner, markerID) in zip(corners, ids):# Extract the markers corners which are always returned in the following order:# TOP-LEFT, TOP-RIGHT, BOTTOM-RIGHT, BOTTOM-LEFTcorners = markerCorner.reshape((4, 2))(topLeft, topRight, bottomRight, bottomLeft) = corners# Convert each of the (x, y)-coordinate pairs to integerstopRight = (int(topRight[0]), int(topRight[1]))bottomRight = (int(bottomRight[0]), int(bottomRight[1]))bottomLeft = (int(bottomLeft[0]), int(bottomLeft[1]))topLeft = (int(topLeft[0]), int(topLeft[1]))# Draw the bounding box of the ArUCo detectioncv2.line(image, topLeft, topRight, (0, 255, 0), 2)cv2.line(image, topRight, bottomRight, (0, 255, 0), 2)cv2.line(image, bottomRight, bottomLeft, (0, 255, 0), 2)cv2.line(image, bottomLeft, topLeft, (0, 255, 0), 2)# Compute and draw the center (x, y) coordinates of the ArUCo markercX = int((topLeft[0] + bottomRight[0]) / 2.0)cY = int((topLeft[1] + bottomRight[1]) / 2.0)cv2.circle(image, (cX, cY), 4, (0, 0, 255), -1)# Draw the ArUco marker ID on the imagecv2.putText(image, str(markerID), (topLeft[0], topLeft[1] - 15), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)print("[INFO] ArUco marker ID: {}".format(markerID))# write the output imagecv2.imwrite("{}_{}.jpg".format(args["type"], markerID), image)# Show the output imagecv2.imshow("Image", image)cv2.waitKey(0)

输入图像

在这里插入图片描述
依次输出 DICT_5X5_100_42
在这里插入图片描述
DICT_5X5_100_24
在这里插入图片描述
DICT_5X5_100_70
在这里插入图片描述
DICT_5X5_100_66
在这里插入图片描述

DICT_5X5_100_87
在这里插入图片描述


再来一组

输入图片

在这里插入图片描述

依次输出

DICT_ARUCO_ORIGINAL_241

在这里插入图片描述

DICT_ARUCO_ORIGINAL_1007

在这里插入图片描述
DICT_ARUCO_ORIGINAL_1001

在这里插入图片描述

DICT_ARUCO_ORIGINAL_923

在这里插入图片描述

演示了如何检测图片,下面是检测视频的代码

# -----------------------------
#   USAGE
# -----------------------------
# python detect_aruco_video.py# -----------------------------
#   IMPORTS
# -----------------------------
# Import the necessary packages
from imutils.video import VideoStream
import argparse
import imutils
import time
import cv2
import sys# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-t", "--type", type=str, default="DICT_ARUCO_ORIGINAL", help="Type of ArUCo tag to detect")
args = vars(ap.parse_args())# Define the names of each possible ArUCo tag that OpenCV supports
ARUCO_DICT = {"DICT_4X4_50": cv2.aruco.DICT_4X4_50, "DICT_4X4_100": cv2.aruco.DICT_4X4_100,"DICT_4X4_250": cv2.aruco.DICT_4X4_250, "DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,"DICT_5X5_50": cv2.aruco.DICT_5X5_50, "DICT_5X5_100": cv2.aruco.DICT_5X5_100,"DICT_5X5_250": cv2.aruco.DICT_5X5_250, "DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,"DICT_6X6_50": cv2.aruco.DICT_6X6_50, "DICT_6X6_100": cv2.aruco.DICT_6X6_100,"DICT_6X6_250": cv2.aruco.DICT_6X6_250, "DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,"DICT_7X7_50": cv2.aruco.DICT_7X7_50, "DICT_7X7_100": cv2.aruco.DICT_7X7_100,"DICT_7X7_250": cv2.aruco.DICT_7X7_250, "DICT_7X7_1000": cv2.aruco.DICT_7X7_1000,"DICT_ARUCO_ORIGINAL": cv2.aruco.DICT_ARUCO_ORIGINAL,"DICT_APRILTAG_16h5": cv2.aruco.DICT_APRILTAG_16h5,"DICT_APRILTAG_25h9": cv2.aruco.DICT_APRILTAG_25h9,"DICT_APRILTAG_36h10": cv2.aruco.DICT_APRILTAG_36h10,"DICT_APRILTAG_36h11": cv2.aruco.DICT_APRILTAG_36h11}# Verify that the supplied ArUCo tag exists and is supported by OpenCV
if ARUCO_DICT.get(args["type"], None) is None:print("[INFO] ArUCo tag of '{}' is not supported".format(args["type"]))sys.exit(0)# Load the ArUCo dictionary and grab the ArUCo parameters
print("[INFO] Detecting '{}' tags...".format(args["type"]))
arucoDict = cv2.aruco.Dictionary_get(ARUCO_DICT[args["type"]])
arucoParams = cv2.aruco.DetectorParameters_create()# Initialize the video stream and allow the camera sensor to warm up
print("[INFO] Starting video stream...")
vs = VideoStream(src=0).start()
time.sleep(2.0)# Loop over the frames from the video stream
while True:# Grab the frame from the threaded video stream and resize it to have a maximum width of 600 pixelsframe = vs.read()frame = imutils.resize(frame, width=1000)# Detect ArUco markers in the input frame(corners, ids, rejected) = cv2.aruco.detectMarkers(frame, arucoDict, parameters=arucoParams)# Verify *at least* one ArUco marker was detectedif len(corners) > 0:# Flatten the ArUco IDs listids = ids.flatten()# Loop over the detected ArUCo cornersfor (markerCorner, markerID) in zip(corners, ids):# Extract the marker corners (which are always returned# in top-left, top-right, bottom-right, and bottom-left order)corners = markerCorner.reshape((4, 2))(topLeft, topRight, bottomRight, bottomLeft) = corners# Convert each of the (x, y)-coordinate pairs to integerstopRight = (int(topRight[0]), int(topRight[1]))bottomRight = (int(bottomRight[0]), int(bottomRight[1]))bottomLeft = (int(bottomLeft[0]), int(bottomLeft[1]))topLeft = (int(topLeft[0]), int(topLeft[1]))# Draw the bounding box of the ArUCo detectioncv2.line(frame, topLeft, topRight, (0, 255, 0), 2)cv2.line(frame, topRight, bottomRight, (0, 255, 0), 2)cv2.line(frame, bottomRight, bottomLeft, (0, 255, 0), 2)cv2.line(frame, bottomLeft, topLeft, (0, 255, 0), 2)# Compute and draw the center (x, y)-coordinates of the ArUco markercX = int((topLeft[0] + bottomRight[0]) / 2.0)cY = int((topLeft[1] + bottomRight[1]) / 2.0)cv2.circle(frame, (cX, cY), 4, (0, 0, 255), -1)# Draw the ArUco marker ID on the framecv2.putText(frame, str(markerID), (topLeft[0], topLeft[1] - 15),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# Show the output framecv2.imshow("Frame", frame)key = cv2.waitKey(1) & 0xFF# If the `q` key was pressed, break from the loopif key == ord("q"):break# Do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()

Guess Aruco Type

学习参考来自:OpenCV基础(20)使用 OpenCV 和 Python 确定 ArUco 标记类型

源码:

链接:https://pan.baidu.com/s/1DmjKL1tVbQX0YkDUzki2Jw
提取码:123a

# ------------------------
#   USAGE
# ------------------------
#  python guess_aruco_type.py --image images/example_01.png
#  python guess_aruco_type.py --image images/example_02.png
#  python guess_aruco_type.py --image images/example_03.png
# -----------------------------
#   IMPORTS
# -----------------------------
# Import the necessary packages
import argparse
import imutils
import cv2# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the input image containing ArUCo tag")
args = vars(ap.parse_args())# Define the names of each possible ArUCo tag that the OpenCV supports
ARUCO_DICT = {"DICT_4X4_50": cv2.aruco.DICT_4X4_50, "DICT_4X4_100": cv2.aruco.DICT_4X4_100,"DICT_4X4_250": cv2.aruco.DICT_4X4_250, "DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,"DICT_5X5_50": cv2.aruco.DICT_5X5_50, "DICT_5X5_100": cv2.aruco.DICT_5X5_100,"DICT_5X5_250": cv2.aruco.DICT_5X5_250, "DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,"DICT_6X6_50": cv2.aruco.DICT_6X6_50, "DICT_6X6_100": cv2.aruco.DICT_6X6_100,"DICT_6X6_250": cv2.aruco.DICT_6X6_250, "DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,"DICT_7X7_50": cv2.aruco.DICT_7X7_50, "DICT_7X7_100": cv2.aruco.DICT_7X7_100,"DICT_7X7_250": cv2.aruco.DICT_7X7_250, "DICT_7X7_1000": cv2.aruco.DICT_7X7_1000,"DICT_ARUCO_ORIGINAL": cv2.aruco.DICT_ARUCO_ORIGINAL,"DICT_APRILTAG_16h5": cv2.aruco.DICT_APRILTAG_16h5,"DICT_APRILTAG_25h9": cv2.aruco.DICT_APRILTAG_25h9,"DICT_APRILTAG_36h10": cv2.aruco.DICT_APRILTAG_36h10,"DICT_APRILTAG_36h11": cv2.aruco.DICT_APRILTAG_36h11}# Load the input image from disk and resize it
print("[INFO] Loading image...")
image = cv2.imread(args["image"])
image = imutils.resize(image, width=800)# Loop over the types of ArUCo dictionaries
for (arucoName, arucoDictionary) in ARUCO_DICT.items():# Load the ArUCo dictionary, grab the ArUCo parameters and attempt to detect the markers for the current dictionaryarucoDict = cv2.aruco.Dictionary_get(arucoDictionary)arucoParams = cv2.aruco.DetectorParameters_create()(corners, ids, rejected) = cv2.aruco.detectMarkers(image, arucoDict, parameters=arucoParams)# If at least one ArUCo marker was detected display the ArUCo marker and its type name in the terminalif len(corners) > 0:print("[INFO] Detected {} markers for '{}'".format(len(corners), arucoName))

输入
在这里插入图片描述
输出

[INFO] Loading image...
[INFO] Detected 2 markers for 'DICT_5X5_50'
[INFO] Detected 5 markers for 'DICT_5X5_100'
[INFO] Detected 5 markers for 'DICT_5X5_250'
[INFO] Detected 5 markers for 'DICT_5X5_1000'

输入
在这里插入图片描述

输出

[INFO] Loading image...
[INFO] Detected 1 markers for 'DICT_4X4_50'
[INFO] Detected 1 markers for 'DICT_4X4_100'
[INFO] Detected 1 markers for 'DICT_4X4_250'
[INFO] Detected 1 markers for 'DICT_4X4_1000'
[INFO] Detected 4 markers for 'DICT_ARUCO_ORIGINAL'

输入

在这里插入图片描述

输出

[INFO] Loading image...
[INFO] Detected 5 markers for 'DICT_APRILTAG_36h11'

猜出来了 Aruco 的类型,我们就可以设定检测了

# ------------------------
#   USAGE
# ------------------------
#  python detect_aruco_image_type.py --image images/example_03.png# -----------------------------
#   IMPORTS
# -----------------------------
# Import the necessary packages
import argparse
import imutils
import cv2
import sys# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the input image containing ArUCo tag")
args = vars(ap.parse_args())# Define the names of each possible ArUCo tag that the OpenCV supports
ARUCO_DICT = {"DICT_4X4_50": cv2.aruco.DICT_4X4_50, "DICT_4X4_100": cv2.aruco.DICT_4X4_100,"DICT_4X4_250": cv2.aruco.DICT_4X4_250, "DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,"DICT_5X5_50": cv2.aruco.DICT_5X5_50, "DICT_5X5_100": cv2.aruco.DICT_5X5_100,"DICT_5X5_250": cv2.aruco.DICT_5X5_250, "DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,"DICT_6X6_50": cv2.aruco.DICT_6X6_50, "DICT_6X6_100": cv2.aruco.DICT_6X6_100,"DICT_6X6_250": cv2.aruco.DICT_6X6_250, "DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,"DICT_7X7_50": cv2.aruco.DICT_7X7_50, "DICT_7X7_100": cv2.aruco.DICT_7X7_100,"DICT_7X7_250": cv2.aruco.DICT_7X7_250, "DICT_7X7_1000": cv2.aruco.DICT_7X7_1000,"DICT_ARUCO_ORIGINAL": cv2.aruco.DICT_ARUCO_ORIGINAL,"DICT_APRILTAG_16h5": cv2.aruco.DICT_APRILTAG_16h5,"DICT_APRILTAG_25h9": cv2.aruco.DICT_APRILTAG_25h9,"DICT_APRILTAG_36h10": cv2.aruco.DICT_APRILTAG_36h10,"DICT_APRILTAG_36h11": cv2.aruco.DICT_APRILTAG_36h11}# Load the input image from disk and resize it
print("[INFO] Loading image...")
image = cv2.imread(args["image"])
image = imutils.resize(image, width=800)# Verify that the supplied ArUCo tag exists is supported by OpenCV
# if ARUCO_DICT.get(args["type"], None) is None:
#     print("[INFO] ArUCo tag of '{}' is not supported!".format(args["type"]))
#     sys.exit(0)# Loop over the types of ArUCo dictionaries
for (arucoName, arucoDictionary) in ARUCO_DICT.items():# Load the ArUCo dictionary, grab the ArUCo parameters and attempt to detect the markers for the current dictionaryarucoDict = cv2.aruco.Dictionary_get(arucoDictionary)arucoParams = cv2.aruco.DetectorParameters_create()(corners, ids, rejected) = cv2.aruco.detectMarkers(image, arucoDict, parameters=arucoParams)# If at least one ArUCo marker was detected display the ArUCo marker and its type name in the terminalif len(corners) > 0:print("[INFO] Detected {} markers for '{}'".format(len(corners), arucoName))# Flatten the ArUCo IDs listIDS = ids.flatten()# Loop over the detected ArUCo cornersfor (markerCorner, markerID) in zip(corners, IDS):# Extract the markers corners which are always returned in the following order:# TOP-LEFT, TOP-RIGHT, BOTTOM-RIGHT, BOTTOM-LEFTcorners = markerCorner.reshape((4, 2))(topLeft, topRight, bottomRight, bottomLeft) = corners# Convert each of the (x, y)-coordinate pairs to integerstopRight = (int(topRight[0]), int(topRight[1]))bottomRight = (int(bottomRight[0]), int(bottomRight[1]))bottomLeft = (int(bottomLeft[0]), int(bottomLeft[1]))topLeft = (int(topLeft[0]), int(topLeft[1]))# Draw the bounding box of the ArUCo detectioncv2.line(image, topLeft, topRight, (0, 255, 0), 2)cv2.line(image, topRight, bottomRight, (0, 255, 0), 2)cv2.line(image, bottomRight, bottomLeft, (0, 255, 0), 2)cv2.line(image, bottomLeft, topLeft, (0, 255, 0), 2)# Compute and draw the center (x, y) coordinates of the ArUCo markercX = int((topLeft[0] + bottomRight[0]) / 2.0)cY = int((topLeft[1] + bottomRight[1]) / 2.0)cv2.circle(image, (cX, cY), 4, (0, 0, 255), -1)# Get marker type namemarkerType = "{} -> {}".format(markerID, arucoName)# Draw the ArUco marker ID on the imagecv2.putText(image, str(markerType), (topLeft[0], topLeft[1] - 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0, 255, 0), 2)print("[INFO] ArUco marker ID: {}".format(markerID))# Write the output imagecv2.imwrite(f"{markerID}_{arucoName}.jpg", image)# Show the output imagecv2.imshow("Image", image)cv2.waitKey(0)

输入

在这里插入图片描述

依次输出

7_DICT_APRILTAG_36h11
在这里插入图片描述
3_DICT_APRILTAG_36h11
在这里插入图片描述

5_DICT_APRILTAG_36h11
在这里插入图片描述

14_DICT_APRILTAG_36h11

在这里插入图片描述
8_DICT_APRILTAG_36h11
在这里插入图片描述

再看看另外一个的案例

DICT_5X5_100
在这里插入图片描述

87_DICT_5X5_250
在这里插入图片描述

87_DICT_5X5_1000

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opengl箱子的显示

VS环境配置: /JMC /ifcOutput "Debug\" /GS /analyze- /W3 /Zc:wchar_t /I"D:\Template\glfwtemplate\glfwtemplate\assimp" /I"D:\Template\glfwtemplate\glfwtemplate\glm" /I"D:\Template\glfwtemplate\glfwtemplate\LearnOp…

复分析——第10章——Θ函数应用(E.M. Stein R. Shakarchi)

第10章 Θ函数的应用 (Applications of Theta Functions) The problem of the representation of an integer n as the sum of a given number k of integral squares is one of the most celebrated in the theory of numbers. Its history may be traced back to Diopha…

数据结构:期末考 第六次测试(总复习)

一、 单选题 (共50题,100分) 1、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为( D ).(2.0) A、 &am…

线性代数|机器学习-P21概率定义和Markov不等式

文章目录 1. 样本期望和方差1.1 样本期望 E ( X ) \mathrm{E}(X) E(X)1.2 样本期望 D ( X ) \mathrm{D}(X) D(X) 2. Markov 不等式&Chebyshev不等式2.1 Markov不等式公式 概述2.2 Markov不等式公式 证明:2.3 Markov不等式公式 举例:2.4 Chebyshev不…

反向沙箱技术:安全隔离上网

在信息化建设不断深化的今天,业务系统的安全性和稳定性成为各公司和相关部门关注的焦点。面对日益复杂的网络威胁,传统的安全防护手段已难以满足需求。深信达反向沙箱技术,以其独特的设计和强大的功能,成为保障政务系统信息安全的…

【论文阅读】-- TimeNotes:时间序列数据的有效图表可视化和交互技术研究

TimeNotes: A Study on Effective Chart Visualization and Interaction Techniques for Time-Series Data 摘要1 介绍和动机2 文献2.1 时间序列数据探索2.1.1 数据聚合2.1.2 基于透镜2.1.3 基于布局 3 任务和设计3.1 数据3.2 领域表征3.3 探索、分析和呈现 4 TimeNotes4.1 布局…

安装KB5039212更新卡在25% 或者 96% 进度

系统之家7月1日消息,微软在6月11日的补丁星期二活动中,为Windows 11系统推出了KB5039212更新。然而,部分用户在Windows社区中反映,安装过程中出现失败,进度条在25%或96%时卡住。对于遇到此类问题的Windows 11用户&…

AI基本概念(人工智能、机器学习、深度学习)

人工智能 、 机器学习、 深度学习的概念和关系 人工智能 (Artificial Intelligence)AI- 机器展现出人类智慧机器学习 (Machine Learning) ML, 达到人工智能的方法深度学习 (Deep Learning)DL,执行机器学习的技术 从范围…

构建高效的数字风控系统:应对现代网络威胁的策略与实践

文章目录 构建高效的数字风控系统:应对现代网络威胁的策略与实践1. 数字风控基本概念1.1 数字风控(数字化风控)1.2 数字风控的原理1.3 常见应用场景 2. 数字风控的必要性3. 构建高效的数字风控系统3.1 顶层设计与规划3.2 数据基础建设3.3 风险…

Python从0到100(三十三):xpath和lxml类库

1. 为什么要学习xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息 2. 什么是xpath XPath,全称为XML Path Language,是一种用于在XML文档中进行导航和数据提取的…

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测(程…

中国网络安全审查认证和市场监管大数据中心数据合规官CCRC-DCO

关于CCRC-DCO证书的颁发机构,它是由中国网络安全审查认证与市场监管大数据中心(简称CCRC)负责。 该中心在2006年得到中央机构编制委员会办公室的批准成立,隶属于国家市场监督管理总局,是其直辖的事业单位。 依据《网络…

技术派全局异常处理

前言 全局的异常处理是Java后端不可或缺的一部分,可以提高代码的健壮性和可维护性。 在我们的开发中,总是难免会碰到一些未经处理的异常,假如没有做全局异常处理,那么我们返回给用户的信息应该是不友好的,很抽象的&am…

认识100种电路之耦合电路

在电子电路的世界中,耦合电路宛如一座精巧的桥梁,连接着各个功能模块,发挥着至关重要的作用。 【为什么电路需要耦合】 在复杂的电子系统中,不同的电路模块往往需要协同工作,以实现特定的功能。然而,这些模…

QuickBooks 2024 for Mac:财务智慧,触手可及

QuickBooks 2024 for Mac是一款专为Mac用户设计的专业财务管理软件,它集成了多种实用功能,助力企业和个人用户高效管理财务事务。 📊 全面的财务管理工具:QuickBooks 2024 for Mac 提供了一套全面的财务管理功能,包括…

基于昇腾AI | Yolov7模型迁移到昇腾平台EA500I边缘计算盒子的实操指南

近年来,国产化替代的进程正在加快。在众多国产平台中,昇腾平台具有高性能、低功耗、易扩展、软件栈全面成熟等优势,其产品和技术在国内众多领域实现了广泛应用;作为昇腾的APN伙伴和IHV合作伙伴,英码科技携手昇腾推出了…

数据结构之“刷链表题”

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 目录 前言 一、相交链表 题目链接 大致思路 代码实现 二、环形链表1 题目链接 大致思路 代码实现 三、环形链表2 题目链接 大致思路 代码实…

python sklearn机械学习模型-分类

🌈所属专栏:【机械学习】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您…

WIN11,如何同时连接有线网络与WLAN无线网络

之前写了两篇文章,一篇是双网卡多网卡时win11如何设置网卡优先级_多网卡设置网卡优先级-CSDN博客 另一篇是win11 以太网和WLAN冲突 连接网线时导致WiFi掉线 解决_win11 以太网和wifi不能同时生效-CSDN博客 这篇是对上面两篇的补充:主要解决电脑重启后&…

适用于高海拔地区的工业路由器产品

1、西藏背景 西藏,这个位于中国西南部的神秘之地,以其雄伟壮观、神奇瑰丽的自然风光和深厚的文化底蕴,被无数人视为心中的圣地。这里属于高原性气候,具有气温低、气压低,降水少,生态环境十分恶劣。西藏被誉…