【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.mzph.cn/web/36852.shtml

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

相关文章

在Ubuntu 18.04上安装和配置GitLab的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 GitLab 是一个开源应用程序,主要用于托管 Git 仓库,并提供额外的与开发相关的功能,如问题跟踪…

为什么IP地址会被列入黑名单?

您是否曾经历过网站访客数量骤减或电子邮件投递失败的困扰?这背后或许隐藏着一个常被忽略的原因:您的IP地址可能已经被列入了黑名单内。尽管您并没有进行任何违法的网络操作,但这个问题依然可能出现。那么,究竟黑名单是什么&#…

PostgreSQL 性能优化与调优(六)

1. 索引优化 1.1 创建索引 索引可以显著提高查询性能。创建索引的基本语法如下: CREATE INDEX index_name ON table_name (column_name);例如,为 users 表的 username 列创建索引: CREATE INDEX idx_username ON users (username); 1.2 …

【VMware】VMware 开启的虚拟机无法联网的解决方案

目录 🌊1. 问题说明 🌊2. 解决方案 🌍2.1 查看虚拟网络编辑器 🌍2.2 设置 vmnet 🌍2.3 设置虚拟机网络 🌍2.4 Xshell连接虚拟机 🌊1. 问题说明 虚拟机 ping 其他网页显示失败,比如&#…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档,当前数据质量评价指标框架中包含6评价指标,在实际的数据治理过程中,存在一个关联性指标。7个指标中存在4个定性指标,3个定量指标; 定性指标&am…

Linux内存管理--系列文章陆——可执行文件的装载

应届生面试时,经常会有人问程序和进程有什么区别。简单来讲,程序是一个静态物品,就是存放在磁盘上的一些预先编译好的指令和数据的文件。而进程是一种运行的实例,它是程序在操作系统中的一次运行活动,具有生命周期。进…

汇编语言中的内存管理与寻址方式

在计算机科学中,内存管理是确保程序和数据能够高效、安全地存储和访问的关键环节。汇编语言,作为最接近硬件的编程语言,为程序员提供了直接控制内存的能力。 内存管理基础 内存管理涉及到数据如何在内存中存储、访问和操作。在汇编语言层面…

创建一个快速、高效的网络爬虫:PHP和Selenium示例

随着互联网的不断发展,数据爬取已经成为了许多人的必备技能。而网络爬虫则是实现数据爬取的重要工具之一。 网络爬虫可以自动化地访问网站、获取内容、分析页面并提取所需数据。其中,Selenium是一款非常优秀的网络自动化测试工具,能够模拟真…

Window安全配置

任何本地登录的用户都属于Interactive组Ipconfig/all :用于显示所有网络适配器的完整TCP/IP配置信息route print:用于显示路由表中的当前项目tracert –d:禁止tracert将中间路由器的IP地址解析为名称。这样可以加速显示tracert的结果nslookup…

面向对象分析与设计

文章目录 设计的重点在于模块间的通信,而不在于模块的属性和方法程序就是一群对象,通过消息要求对方做点事情对象间相互协作(消息)以完成系统功能 设计的重点在于模块间的通信,而不在于模块的属性和方法 程序就是一群对象,通过消…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间,安装依赖:3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

前端git约定式规范化提交-commitizen

当使用commitizen进行代码提交时,commitizen会提示你在提交代码时填写所必填的提交字段信息内容。 1、全局安装commitizen npm install -g commitizen4.2.4 2、安装并配置 cz-customizeable 插件 2.1 使用 npm 下载 cz-customizeable npm i cz-customizeable6.…

Spark SQL----Troubleshooting

Spark SQL----Troubleshooting JDBC驱动程序类必须对客户端会话和所有executor上的原始类加载器可见。这是因为Java的DriverManager类进行安全检查,导致它在打开连接时忽略所有原始类加载器不可见的驱动程序。一种方便的方法是在所有worker节点上修改compute_classp…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

办公软件WPS与Office的区别

临近计算机考试很多同学在纠结我是报wps好?还是ms office好?下面就来详细说说。 1、wps属于国内金山公司的办公软件,里面包含word、Excel和PPT。考试是2021年开始的! 2、MS(Microsoft 微软) office属于美…

AI产品经理面试

把优秀当习惯把优秀当习惯肯定不是口头说说,那有什么判断标准吗? 当我做完一件事儿的时候,我会看它有没有突破我的舒适圈、能不能惊艳到我自己。这就是我的判断标准。 在自我介绍和经历介绍时,面试者应该注重以下几个方面&#xf…

核方法总结(四)——高斯过程回归学习笔记

一、定义 基于核方法的线性回归模型和传统线性回归一样,可以用未知数据进行预测,但不能确定 预测的可信度。在参考书第二章中可知,基于贝叶斯方法可以实现对未知数据依概率预测,进而可得到预测的可信度。这一方法中,通…

爬虫是什么 | Python爬虫应该学习什么知识点?

什么是爬虫 如果说把互联网比喻成蜘蛛网,那么爬虫就是在这张网上的蜘蛛,它可以在上面爬来爬去。在互联网中,爬虫就是机器人,你应该对百度和 Google 很熟悉吧,为什么我们可以很快的从它们的搜索引擎中获取到资料呢&…

嵌入式Linux系统编程 — 4.7 regcomp、regexec、regfree正则表达式函数

目录 1 为什么需要正则表达式 2 正则表达式简介 3 正则表达式规则 4 regcomp、regexec、regfree函数 4.1 函数介绍 4.2 URL格式案例 1 为什么需要正则表达式 在许多的应用程序当中, 有这样的应用场景: 给定一个字符串,检查该字符串是否…

分布式锁及其实现与应用场景

分布式锁及其实现与应用场景 分布式锁是一种用于在分布式系统中协调多个进程或线程对共享资源进行访问的机制。它的主要目的是确保在同一时间只有一个进程或线程可以访问特定资源,从而避免数据竞争和不一致问题。分布式锁通常用于集群环境中,例如微服务…