【首款ARMv9开源芯片“星睿“O6测评】在“周易”NPU上部署Yolov8l模型并实现实时目标检测
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
博客内容主要围绕:
5G/6G协议讲解
高级C语言讲解
Rust语言讲解
文章目录
- 在"星睿"O6的“周易”NPU上部署Yolov8l模型并实现实时目标检测
- 一、准备基础运行环境
- 二、下载NPU SDK
- 2.1 安装NPU驱动和UMD
- 三、下载CIX AI Model HUb
- 3.1 下载项目
- 3.2 创建虚拟环境
- 3.3 安装依赖库
- 四、执行推理任务
- 4.1 NPU上执行推理任务
- 4.2 CPU上执行推理任务
- 4.3 运行结果
- 五、实时目标检测开发
- 5.1 使用opencv获取摄像头数据
- 5.2 将获取的视频帧传入模型进行推理
- 5.3 运行效果
- 5.4 完整代码参考
在"星睿"O6的“周易”NPU上部署Yolov8l模型并实现实时目标检测
瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力,支持 INT4、INT8、INT16、FP16、BF16 和 TF32 类型的加速。
一、准备基础运行环境
安装python库,编写当前博客时最新的python版本是3.11。
sudo apt install libpython3.11-dev
sudo apt install python3.11-venv
二、下载NPU SDK
NPU SDK 包含 NOE Compiler 与 CIX AI Model Hub, 要获取 SDK 需要通过申请 CIX 早鸟计划获取。 申请链接: CIX 早鸟计划
2.1 安装NPU驱动和UMD
sudo dpkg -i ./cix-npu-driver_1.0.0_arm64.deb
sudo dpkg -i ./cix-noe-umd_1.0.0_arm64.deb
安装完成之后一定要断电重启!!!
三、下载CIX AI Model HUb
通过CIX 早鸟计划申请后,会有邮件发送到注册邮箱,请按邮件内容获取 AI Model Hub 仓库。
3.1 下载项目
git clone https://e.coding.net/g-uaqh1479/ai-model-hub/ai_model_hub.git
CIX AI Model Hub 里面涉及的例子,我们可以直接从 ModelScope 上下载 onnx 模型和预编译好的模型,无需在x86 Linux上重新编译。
3.2 创建虚拟环境
cd ~/ai_model_hub
python3 -m venv --system-site-packages .venv
3.3 安装依赖库
cd ~/ai_model_hub
.venv/bin/pip3 install -r requirements.txt
四、执行推理任务
4.1 NPU上执行推理任务
进入项目目录,下载最新的CIX模型文件并在NPU上执行推理。
cd ~/ai_model_hub/models/ComputeVision/Object_Detection/onnx_yolov8_l# 下载cix模型
wget https://modelscope.cn/models/cix/ai_model_hub_25_Q1/resolve/master/models/ComputeVision/Object_Detection/onnx_yolov8_l/yolov8_l.cix# 执行NPU推理
../../../../.venv/bin/python3 inference_npu.py --image_path ./test_data/ --model_path ./yolov8_l.cix
推理时间如下所示:
运行报错,提示
RuntimeError: npu: noe_init_context fail
可能是因为NPU Driver或者UDM版本太低,建议获取最新的NPU Driver和UDM版本,重新安装后断电重启
4.2 CPU上执行推理任务
进入项目目录,下载最新的ONNX模型文件并在CPU上执行推理,按照习惯会创建一个model目录将ONNX模型放到model目录中。
cd ~/ai_model_hub/models/ComputeVision/Object_Detection/onnx_yolov8_l# 创建onnx模型目录
mkdir model
cd model# 下载onnx模型
wget https://modelscope.cn/models/cix/ai_model_hub_25_Q1/resolve/master/models/ComputeVision/Object_Detection/onnx_yolov8_l/model/yolov8l.onnx# 退回到上级目录
cd ../# 执行CPU推理
../../../../.venv/bin/python3 inference_onnx.py --image_path ./test_data/ --onnx_path ./model/yolov8l.onnx
运行时间如下所示:
4.3 运行结果
推理的结果保存在当前目录的output下:
五、实时目标检测开发
我们使用opencv获取摄像头数据,将获取的视频帧进行实时推理,将推理结果显示出来。
5.1 使用opencv获取摄像头数据
下面是具体的实现代码,仅供参考:
# 文件名 realtime_object_detection.pyimport cv2
import globdef opencv_camera_test(device_path):try:cap = cv2.VideoCapture(device_path)if not cap.isOpened():print(f"无法打开设备: {device_path}")return False# 读取测试帧ret, frame = cap.read()cap.release()if ret and frame is not None:print(f"设备 {device_path} 成功读取")return Trueelse:print(f"设备 {device_path} 读取失败")return Falseexcept Exception as e:print(f"设备 {device_path} 异常: {str(e)}")return False# 检测可用的视频设备
video_device = 0
for device in sorted(glob.glob("/dev/video*")):if opencv_camera_test(device) == True:video_device = device break# 初始化摄像头
cap = cv2.VideoCapture(video_device)
if not cap.isOpened():print("摄像头初始化失败")exit()# 设置分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# 设置帧率
cap.set(cv2.CAP_PROP_FPS, 30)while True:# 读取一帧图像ret, frame = cap.read()# 如果正确读取帧,ret为Trueif not ret:print("无法获取摄像头数据")break# 显示图像cv2.imshow('Camera', frame)# 按'q'键退出循环if cv2.waitKey(1) == ord('q'):break# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()
使用下面的命令运行python脚本,查看摄像头是否可以正常打开:
../../../../.venv/bin/python3realtime_object_detection.py
运行结果如下所示:
5.2 将获取的视频帧传入模型进行推理
我们将通过OpenCV获取的视频帧数据进行简单的格式转换后传入模型进行推理,并将推理地结果实时展示出来。关键参考代码如下所示:
# Preprocess the image for inference
image = np.array(frame)
show_image = copy.deepcopy(image)# 记录原始图片shape和新图片shape
src_shape = show_image.shape[:2]
new_shape = (640, 640)# 将原始图片shape调整为新shape
image = cv2.resize(image, dsize=new_shape)# Normalize the image pixel values to the range [0, 1]
image = normalize_image(image).astype(np.float32)# 调整数据结构并增加batch维度
data = np.expand_dims(image.transpose(2, 0, 1), axis=0)
5.3 运行效果
星睿O6测评-yolov8实时推理视频
5.4 完整代码参考
import cv2
import glob
import numpy as np
import argparse
import os
import sys
import time
import copy
from tqdm import tqdm_abs_path = os.path.join(os.path.dirname(__file__), "../../../../")
sys.path.append(_abs_path)
from utils.tools import get_file_list
from utils.image_process import *
from utils.object_detect_postprocess import postprocess_yolo, xywh2xyxy
from utils.draw import draw_coco as draw
from utils.NOE_Engine import EngineInferdef opencv_camera_test(device_path):try:cap = cv2.VideoCapture(device_path)if not cap.isOpened():print(f"无法打开设备: {device_path}")return False# 读取测试帧ret, frame = cap.read()cap.release()if ret and frame is not None:print(f"设备 {device_path} 成功读取")return Trueelse:print(f"设备 {device_path} 读取失败")return Falseexcept Exception as e:print(f"设备 {device_path} 异常: {str(e)}")return Falsedef get_args():parser = argparse.ArgumentParser()parser.add_argument("--image_path",default="test_data",help="path to the image file",)parser.add_argument("--realtime",default=False,help="read data from camera.",)parser.add_argument("--model_path",default="yolov8_l.cix",help="path to the quant model file",)parser.add_argument("--output_dir", default="./output_npu", help="path to the result output")parser.add_argument("--conf_thr",type=float,default=0.3,help="Score threshould to filter the result.",)parser.add_argument("--nms_thr", type=float, default=0.45, help="NMS threshould to the object.")parser.add_argument("--benchmark",default=False,help="benchmark on COCO val dataset.",)args = parser.parse_args()return argsif __name__ == "__main__":args = get_args()benchmark = args.benchmarkos.makedirs(args.output_dir, exist_ok=True)# Get list of images from the specified pathif args.realtime:video_device = 0for device in sorted(glob.glob("/dev/video*")):if opencv_camera_test(device) == True:video_device = device break# 初始化摄像头cap = cv2.VideoCapture(video_device)if not cap.isOpened():print("摄像头初始化失败")exit()# 设置分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)#cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)#cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)# 设置帧率cap.set(cv2.CAP_PROP_FPS, 30)# 加载模型model = EngineInfer(args.model_path)while True:# 读取一帧图像ret, frame = cap.read()# 如果正确读取帧,ret为Trueif not ret:print("无法获取摄像头数据")break#print("{}".format(frame.shape))#记录开始时间start_time = time.time()#临时保存当前视频帧#img_name = "frame.jpg"#success = cv2.imwrite(img_name, frame)#if not success:# print(f"保存图片 {img_name} 失败")# continue# Preprocess the image for inference#src_shape, new_shape, show_image, data = preprocess_object_detect_method1(# img_name, target_size=(640, 640), mode="BGR"#)# Preprocess the image for inferenceimage = np.array(frame)show_image = copy.deepcopy(image)src_shape = show_image.shape[:2]new_shape = (640, 640)#print(f"src_shape: {src_shape}, new_shape: {new_shape}")image = cv2.resize(image, dsize=new_shape)# Normalize the image pixel values to the range [0, 1]image = normalize_image(image).astype(np.float32)data = np.expand_dims(image.transpose(2, 0, 1), axis=0)# Run inference and get predictionspred = model.forward(data.astype(np.float32))[0]pred = np.reshape(pred, (84, 8400))pred = np.transpose(pred, (1, 0))# bboxes, conf, class_idresults = postprocess_yolo(pred, args.conf_thr, args.nms_thr)if len(results) != 0:bbox_xywh = results[:, :4]bbox_xyxy = xywh2xyxy(bbox_xywh)x_scale = src_shape[1] / new_shape[1]y_scale = src_shape[0] / new_shape[0]bbox_xyxy *= (x_scale, y_scale, x_scale, y_scale)show_image = draw(show_image, bbox_xyxy, results[:, 5], results[:, 4])#统计时延mslatency_ms = (time.time() - start_time) * 1000#输出时延信息cv2.putText(show_image,f"Inference Latency: {latency_ms} ms",(10, 30), #字体位置cv2.FONT_HERSHEY_SIMPLEX,0.7, #字体大小(0,255,0), #字体颜色2) #线宽# 显示图像cv2.imshow('Camera', show_image)# 按'q'键退出循环if cv2.waitKey(1) == ord('q'):break# 释放摄像头资源cap.release()cv2.destroyAllWindows()else:image_list = get_file_list(args.image_path)model = EngineInfer(args.model_path)if benchmark:from utils.evaluate.coco_metric import COCO_Metricsave_pred_json = "pred_yolov8_l_npu.json"coco_metric = COCO_Metric(saved_json_path=save_pred_json)# get all test image pathimage_list = coco_metric.get_image_ids()else:image_list = get_file_list(args.image_path)for img_name in tqdm(image_list):if benchmark:# image info and image pathimg_id = img_nameimg_name = coco_metric.get_image_path(img_id)# Preprocess the image for inferencesrc_shape, new_shape, show_image, data = preprocess_object_detect_method1(img_name, target_size=(640, 640), mode="BGR")# Run inference and get predictionspred = model.forward(data.astype(np.float32))[0]pred = np.reshape(pred, (84, 8400))pred = np.transpose(pred, (1, 0))# bboxes, conf, class_idresults = postprocess_yolo(pred, args.conf_thr, args.nms_thr)if len(results) == 0:if benchmark:continueelse:output_path = os.path.join(args.output_dir, os.path.basename(img_name))# Save the resulting image to the output directorycv2.imwrite(output_path, show_image)continuebbox_xywh = results[:, :4]bbox_xyxy = xywh2xyxy(bbox_xywh)x_scale = src_shape[1] / new_shape[1]y_scale = src_shape[0] / new_shape[0]bbox_xyxy *= (x_scale, y_scale, x_scale, y_scale)if benchmark:coco_metric.append_bboxes(img_id, bbox_xyxy, results[:, 5], results[:, 4])else:ret_img = draw(show_image, bbox_xyxy, results[:, 5], results[:, 4])output_path = os.path.join(args.output_dir, os.path.basename(img_name))# Save the resulting image to the output directorycv2.imwrite(output_path, ret_img)if benchmark:coco_metric.saved_json()coco_metric.evaluate()model.clean()
相关文章:
【首款ARMv9开源芯片“星睿“O6测评】在“周易”NPU上部署Yolov8l模型并实现实时目标检测
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 在"星睿"O6的“周易”NPU上部署Yolov8l模型并实现…...
[ctfshow web入门] web4
前置知识 robots.txt是机器人协议,在使用爬虫爬取网站内容时应该遵循的协议。协议并不能阻止爬虫爬取,更像是一种道德规范。 假设robots.txt中写道 Disallow: /admind.php,那我就暴露了自己的后台,这属于信息泄漏,攻击…...
Golang的Goroutine(协程)与runtime
目录 Runtime 包概述 Runtime 包常用函数 1. GOMAXPROCS 2. Caller 和 Callers 3. BlockProfile 和 Stack 理解Golang的Goroutine Goroutine的基本概念 特点: Goroutine的创建与启动 示例代码 解释 Goroutine的调度 Gosched的作用 示例代码 输出 解…...
与Linux操作系统相关的引导和服务
目录 一.Linux操作系统引导过程 1.1引导过程总览 1.2系统初始化进程 1.2.1init进程 1.2.2sysmted 1.3systemd单元类型 二.排除启动类故障 2.1MBR扇区故障 2.1.1故障原因 2.1.2故障现象 2.1.3解决办法 2.1.4模拟修复MBR扇区故障 1)添加新的硬盘 2)进行…...
JS API 事件监听
焦点事件案例:搜索框激活下拉菜单 事件对象 事件对象存储事件触发时的相关信息 可以判断用户按键,点击元素等内容 如何获取 事件绑定的回调函数中的第一个形参就是事件对象 一般命名为e,event 事件对象常用属性 type类型 click mouseenter client…...
【8】搭建k8s集群系列(二进制部署)之安装node节点组件(kubelet)
一、下载k8s二进制文件 下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和 Worker Node 二进制文件。…...
Harmony OS“一多” 详解:基于窗口变化的断点自适应实现
一、一多开发核心概念(18N模式) 目标:一次开发多端部署 解决的问题: 1、界面级一多:适配不同屏幕尺寸 2、功能级一多:设备功能兼容性处理(CanIUser) 3、工…...
Rust切片、结构体、枚举
文章目录 切片类型字符串切片其他结构的切片 结构体结构体实例元组结构体结构体所有权输出结构体结构体的方法结构体关联函数单元结构体 枚举match语法Option枚举类if let 语句 切片类型 切片(Slice)是对数据值的部分“引用” 我们可以从一个数据集合中…...
量子纠错码实战:从Shor码到表面码
引言:量子纠错的必要性 量子比特的脆弱性导致其易受退相干和噪声影响,单量子门错误率通常在10⁻~10⁻量级。量子纠错码(QEC)通过冗余编码测量校正的机制,将逻辑量子比特的错误率降低到可容忍水平。本文从首个量子纠错…...
Pod的生命周期
概念 Pod对象自从其创建开始至其终止退出的时间范围称为其生命周期。在这段时间中,Pod会处于多种不同的状态,并执行一些操作;其中,创建主容器(main container)为必需的操作,其他可选的操作还包…...
使用QAction编辑器添加QAction到ui里
在 Qt Designer 或 Qt Creator 的 UI 设计器 中,可以直接通过 Action Editor 可视化添加和管理 QAction,无需手动编写代码。以下是详细步骤: 步骤 1:打开 Action Editor 在 Qt Creator 中打开 .ui 文件(双击项目中的…...
Unity:标签(tags)
为什么需要Tags? 在游戏开发中,游戏对象(GameObject)数量可能非常多,比如玩家、敌人、子弹等。开发者需要一种简单的方法来区分这些对象,并根据它们的类型执行不同的逻辑。 核心需求: 分类和管…...
深入解析 Python 正则表达式:全面指南与实战示例
深入解析 Python 正则表达式:全面指南与实战示例 📌 引言 正则表达式(Regular Expressions, regex)是用于文本匹配、查找和替换的强大工具。在 Python 中,我们可以使用 re 模块来处理正则表达式。无论是数据清洗、日…...
Nginx介绍及使用
1.Nginx介绍 Nginx是一款开源的、高性能的HTTP和反向代理服务器 1.正向代理和反向代理 正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服…...
【Block总结】自适应矩形卷积,即插即用|CVPR2025
论文信息 标题: Adaptive Rectangular Convolution for Remote Sensing Pansharpening年份: 2025年会议: CVPR论文地址: arXiv代码地址: GitHub任务: 遥感图像融合(Pansharpening) 创新点 本论文提出了一种新颖的自适应矩形卷积模块(ARCon…...
第2课:JSX语法与组件基础
第2课:JSX语法与组件基础 学习目标 深入理解JSX语法掌握组件的基本结构和用法学习使用Props传递数据掌握React中的样式添加方法创建任务卡片组件 一、JSX语法深入 1. 什么是JSX? JSX是JavaScript XML的缩写,它允许我们在JavaScript中编写…...
DevOps与Docker的关系
DevOps 与 Docker 是相辅相成的关系。DevOps 是一种强调开发(Development)与运维(Operations)之间协作的文化、实践和工具链,而 Docker 是一种容器化技术,为 DevOps 的实现提供了高效的技术支撑。 Docker …...
嵌入式AI简介
嵌入式AI是一种将人工智能算法部署在终端设备中运行的技术,使智能硬件能够在本地实时完成感知、交互和决策功能,无需依赖云端计算。以下是其核心要点: 一、核心特点 1. 本地化处理:数据在设备端直接处理,无需联网&a…...
多GPU训练
写在前面 限于财力不足,本机上只有一个 GPU 可供使用,因此这部分的代码只能够稍作了解,能够使用的 GPU 也只有一个。 多 GPU 的数据并行:有几张卡,对一个小批量数据,有几张卡就分成几块,每个 …...
JVM虚拟机篇(三):JVM运行时数据区与方法区详解
JVM虚拟机篇(三):JVM运行时数据区与方法区详解 JVM虚拟机篇(三):JVM运行时数据区与方法区详解一、引言二、JVM运行时数据区2.1 概述2.2 各部分的作用与交互2.2.1 堆与其他区域的关系2.2.2 方法区与其他区域…...
Rust学习日记:编写一个Python扩展
参考https://segmentfault.com/a/1190000044555330 命令行创建一个新的Rust项目cargo new --lib rust_python_ext 配置Cargo.toml [package] name "rust_python_ext" version "0.1.0" edition "2024"[lib] name "rust_python_ext"…...
Pod的调度
在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上&…...
系统思考:思考的快与慢
在做重大决策之前,什么原因一定要补充碳水化合物?人类的大脑其实有两套运作模式:系统1:自动驾驶模式,依赖直觉,反应快但易出错;系统2:手动驾驶模式,理性严谨,…...
[ 计算机网络 ] | HTTP协议(一)
目录 前置知识: URL URL的URLENCODE和URLDECODE HTTP协议的宏观格式 如何保证报文是完整的?怎么做序列,反序列化的? 前置知识: URL 我们把数据给别人,别人把数据给我们,不是在做IO嘛~&am…...
大模型快速 ASGI 服务器uvicorn
基础概念类 1. 什么是 Uvicorn,它的作用是什么? 答案:Uvicorn 是一个基于 Python 的快速 ASGI(异步服务器网关接口)服务器。它的主要作用是作为 Web 应用程序的服务器,负责接收客户端的请求,并…...
android studio 基础
1.android Module not specified 今天做一个实验时出现:Android Studio Run/Debug configuration error: Module not specified,要想解决这个问题: 1、打开根目录的 settings.gradle,删除 include :exampleapp 2、在 Android Stu…...
python爬虫爬取淘宝热销(热门)零食商品加数据清洗、销量、店铺及词云数据分析_源码及相关说明文档;售后可私博主
TOC 如有侵权,联系删除 一、环境说明 使用前必须检查以下环境 (1)python编译环境 (2)python脚本执行所需要的库,具体看代码(main.py)import导入的部分库 (3)确保电脑可…...
Android /proc/meminfo解释
高通8295设备 msmnile_gvmq:/proc # cat meminfo MemTotal: 16433968 kB MemFree: 7709832 kB…...
VScode 玩 MCP的server
vscode 1.99版本刚支持MCP server,我就测试了一下 翻到一个gitte的MCP sever 我本身是Mac版本1.99居然没更新agent,所以我就直接用1.100版本的vscode inside了来掩饰一下了 点击setting,然后你要edit一下这个json配置文件 主要修改的其实是…...
详解 MySQL 索引的最左前缀匹配原则
MySQL 的最左前缀匹配原则主要是针对复合索引(也称为联合索引)而言的。其核心思想是:只有查询条件中包含索引最左侧(第一列)开始的连续一段列,才能让 MySQL 有效地利用该索引。 一、 复合索引的结构 复合…...
ROS Master多设备连接
Bash Shell Shell是位于用户与操作系统内核之间的桥梁,当用户在终端敲入命令后,这些输入首先会进入内核中的tty子系统,TTY子系统负责捕获并处理终端的输入输出流,确保数据正确无误的在终端和系统内核之中。Shell在此过程不仅仅是…...
【Mysql】数据库备份与恢复
一、备份类型 物理备份:直接对数据库的数据文件、日志文件、索引文件进行备份 逻辑备份:对数据库对象(库、表)以SQL语句的形式导出进行备份 二、备份工具 1、使用tar、gzip等方式压缩打包数据库文件(完全备份、物理冷…...
Java HttpURLConnection修仙指南:从萌新到HTTP请求大能的渡劫手册
一、筑基篇:初识HttpURLConnection 1.1 基础开光(创建连接) URL url new URL("https://api.example.com/data"); HttpURLConnection conn (HttpURLConnection) url.openConnection(); // 注意!此处可能抛出Malforme…...
python 重要易忘 语言基础
Collections 1、Counter 计数器 counter:计数器 类似字典 统计可迭代对象中元素的出现次数, Counter({b: 3, c: 2, a: 1, d: 1}) 相当于字典{b: 3, c: 2, a: 1, d: 1} a.items() 取键值对 对应为dict_items([(a, 1), (b, 3), (c, 2), (d, 1)]) 也可以是 list(a.items…...
【新能源汽车研发测试数据深度分析:从传感器到智能决策的硬核方法论】
摘要: 本文系统性解构新能源汽车(NEV)研发测试中的数据采集、处理及分析全链条,覆盖传感器融合、大数据清洗、AI算法优化等核心技术,并引入行业顶级案例(如特斯拉Autopilot验证、宁德时代BMS算法迭代&#…...
GD32H759IMT6 Cortex-M7 OpenHarmony轻量系统移植——接管中断修改为不接管
笔者在去年利用国庆时间,将Cortex-M7 的国产厂商兆易创新GD32H459移植OpenHarmony轻量系统,但是适配不太完善——只能选择liteos-m接管中断。这样导致使用中断非常麻烦。于是笔者最近将接管中断模式修改为不接管,这样可以方便的使用gd32提供的…...
MySQL基础学习笔记
学习笔记 1. 基础小知识1.1 数据库分类1.2 下载安装、变量配置过程(略)1.3 连接命令1.4 连接mysql服务端的软件选择1.4.1 要求不高的话,选择有很多1.4.2 适合做企业级管理的工具(适合团队协作)1.4.3 总结 1.5 编程语言…...
[Linux]进程状态、僵尸进程处理回收、进程优先级 + 图例展示
目录 一、进程状态 1.一般操作系统学科的进程状态 二、Linux操作系统的进程状态 运行状态(R) 睡眠状态(S) 深度睡眠状态(D) 暂停状态(T) 追踪暂停状态&#x…...
2022 年 6 月青少年软编等考 C 语言七级真题解析
目录 T1. 有多少种二叉树思路分析T2. 城堡问题T3. 快速堆猪思路分析T4. 重建二叉树思路分析T1. 有多少种二叉树 题目链接:SOJ D1189 输入 n ( 1 < n < 13 ) n\ (1<n<13) n (1<n<13),求 n n n 个结点的二叉树有多少种形态? 思路分析 此题考查 C a…...
flutter修改 Container 中的 Text 和 Image 的样式
在Flutter中,Container 是一个常用的布局组件,它可以包含子组件(如文本、图片等),并允许你通过设置各种属性来自定义样式。如果你需要修改 Container 中的 Text 和 Image 的样式,可以通过以下方式实现。 1.…...
零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...
【设计模式】命令模式
简介 假设你有一个智能家居遥控器,上面有多个按钮,每个按钮对应不同的设备操作(如开灯、关灯、调空调温度)。 命令模式的解决方案是: 将每个操作(如“开灯”)封装成一个独立的命令对象&#x…...
Python作业3 字符田字格绘制
字符田字格绘制:编写程序,用字符方式打印输出一个简单的田字格,要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。 def draw(n):line 3 * n 1for i in range(1, line 1):if i % 3 1:print(n * " —— —— ", end"&quo…...
文章记单词 | 第23篇(六级)
一,单词释义 occupy /ˈɒkjupaɪ/v. 占用,占领,使忙碌thermal /ˈθɜːml/adj. 热的,热量的,保暖的;n. 热气流persistent /pəˈsɪstənt/adj. 执着的,坚持不懈的,持续存在的wee…...
【算法】滑动窗口
什么是滑动窗口算法? 滑动窗口算法本质上就是双指针的一种情况,当两个指针进行移动的方向是同一个方向,并且这两个指针并不会向后回退,一直是往一个方向进行移动的。这也就是滑动窗口的使用场景。 滑动窗口算法的一般步骤 进窗…...
可视化工具
在PyTorch中,可视化工具对于模型调试、性能分析和结果解释至关重要。以下是常用的可视化工具及其应用场景: 1. 训练过程监控 TensorBoard (PyTorch官方集成) 用途:跟踪训练指标(损失、准确率)、可视化模型结构、分析…...
hashtable遍历的方法有哪些
在 Java 中,遍历 Hashtable(或其现代替代品 HashMap)有多种方式,以下是 6 种常用方法的详细说明和代码示例: 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …...
LeetCode --- 443周赛
题目列表 Q1. 到达每个位置的最小费用 Q2. 子字符串连接后的最长回文串 I Q3. 子字符串连接后的最长回文串 II Q4. 使 K 个子数组内元素相等的最少操作数 一、到达每个位置的最小费用 题目要求返回从队尾到达任意位置的最小费用,规则:如果下标 i i i …...
从零构建大语言模型全栈开发指南:附录与资源-3.面试与进阶-200道大模型面试真题与职业发展路线图-基础理论篇50题
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录与资源-3. 面试与进阶:200道大模型面试真题与职业发展路线图一、大模型面试真题分类与解析1. 基础理论篇(50+题精选)2. 进阶实战篇(50+题精选)3. 应用场景篇(70题精选)二、职业发展路线图1. …...
使用Android Studio开发基于Java+xml的安卓app之环境搭建
以下是使用Android Studio搭建基于Java和XML的Android应用开发环境的详细步骤: 一、系统要求 操作系统:Windows 7/8/10/11(64位)内存:建议8GB及以上磁盘空间:至少5GB空闲(建议预留10GB以上&…...