python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言
前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为:
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客
由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大,我们今天就尝试多一些花样,做一次进阶探索。
【2】代码探索
【2.1】同心圆
绘制同心圆的基本思路是,确认好圆心以后,逐个修改半径,然后输出图像即可。
还是以之前的代码为基础,增加for循环逐个输出圆即可。此处先给出完整代码:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
x0=285 #圆心横坐标
y0=285 #圆心纵坐标
for i in range(1,6,1):canvas = cv.circle(canvas, (x0, y0), 50*i, (int(255*np.cos((np.sqrt(np.square(15-i))))), int(255*np.sin(i)), int(np.abs(i-3))^5), i) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
程序运行后的输出图像为:
图1 同心圆
创造同心圆的核心代码段落为:
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(1,5,1):canvas = cv.circle(canvas, (x0, y0), 50*i, (int(255*np.cos((np.sqrt(np.square(15-i))))), int(255*np.sin(i)), int(np.abs(i-3))^5), i) #输出同心圆
首先用x0和y0确认了愿新的坐标点,然后用for循环输出5个圆形即可。
这五个圆的半径计算式为:r=50*i,i就是圆形的出现顺序;圆的颜色采用了函数的形式,不是此处重点;圆的线宽就是圆出现的顺序。
总体上,圆出现的顺序越晚,半径越大,线条越宽。
【2.2】疏密同心圆
绘制疏密同心圆的基本思路是,利用三角函数的斜率也是三角函数的原理,如果半径通过三角函数来取值,那同样的增量下,邻近半径值的差会周期性的时大时小,这样就会画出疏密同心圆。
以2π为周期,增量从0到7就可以覆盖一个周期内的所有圆。
在这个分析基础上,我们把核心代码换成:
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(0,7,1):canvas = cv.circle(canvas, (x0, y0), np.abs(int(260*np.cos(i))), (200,180,55), 2) #输出同心圆
半径取值为np.abs(int(260*np.cos(i))),这里的np.abs()是取绝对值的意思,因为半径必须为正数。
此时获得的图形为:
图2 疏密同心圆
对应的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(0,7,1):canvas = cv.circle(canvas, (x0, y0), np.abs(int(260*np.cos(i))), (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.3】变化圆心
既然圆的半径可以变化,圆形自然也可以变化,继续修改核心代码:
r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), r, (200,180,55), 2) #输出同心圆
在这里,圆心坐标被更换为((i-5)*10+280, (i-5)*20+280),这几一个动态值,只有半径是恒定的160。代码运行获得的图像为:
图3 圆心变化
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), r, (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.4】变化圆半径
在圆心变化的基础上,圆的半径可以变化,这样就会出现变化圆。
继续增添代码:
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (200,180,55), 2) #输出同心圆
在这里,半径值被修改为:int(200*np.abs(np.sin(i))),这是一个动态值。
运行后的图像为:
图4 变化圆
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.5】变化圆半径和颜色
在获得变化圆半径的基础上,继续修改代码,让圆的颜色变化:
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出圆
在这里,颜色值被修改为:(int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))),这是一个动态值。
运行后的图像为:
图5 变化圆半径和颜色
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.6】变化背景
然后我们修改背景BGR值,获得颜色变化的背景画布:
# 第一个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 1] = 150 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 50 * np.sin(j - i) # 第二个通道值# 第三个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 2] = 50 * np.tanh(i + j) + 80 * np.tanh(i - j) + 120 * np.cos(j - i) # 第三个通道值
此时获得的图像为:
图6 变化圆和画布
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 125 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 1] = 150 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 50 * np.sin(j - i) # 第二个通道值# 第三个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 2] = 50 * np.tanh(i + j) + 80 * np.tanh(i - j) + 120 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【3】总结
掌握了python+opencv灵活绘制圆形的技巧。
相关文章:

python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...

CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型
CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型 flyfish Learning Transferable Visual Models From Natural Language Supervision https://github.com/OpenAI/CLIP 摘要 CLIP Contrastive Language-Image Pre-Training Contrastive&…...
Linux 硬盘扩容 分区 挂载
Linux 硬盘扩容 分区 & 挂载 1. 添加分区 1.1. 查看新添加的硬盘 fdisk -l假设当前未挂载的盘符是/dev/sdb,后文中所有操作都按挂载/dev/sdb 操作 1.2. 分区管理 小硬盘 fdisk /dev/sdb大硬盘(2TB以上) gdisk /dev/sdb1.3. 编辑分…...
基于 Slf4j 和 AOP 的自动化方法执行时间日志记录方案
前言 其实这个需求很简单,但是这个需求又是项目中必不可少的,尤其对于性能调优这块,但是使用哪种方式更加方便呢,这就是本篇博文需要讨论的重点 系统时间 可以通过 System.currentTimeMillis() 或 System.nanoTime() 来实现。 …...

关于 K8s 的一些基础概念整理-补充【k8s系列之二】
〇、前言 本文继续整理下 K8s 的一些基础概念,作为前一篇概念汇总的补充。 前一篇博文链接:关于 K8s 的一些基础概念整理【k8s系列之一】_集群 master节点 控制节点 宿主机-CSDN博客 一、详情 1.1 Label Label 在 k8s 中是一个非常核心的概念…...

FPGA的DMA应用——pcileech
硬件通过pcie总线,访存本机的内存,并进行修改,可以进行很多操作。 学习视频:乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址:AMD-Xilinx Vivado™ 2024.1 现…...
信息安全管理:运行管理checklist
运行管理checklist内容包括日常操作与维护管理、变更管理、备份与故障恢复、应急与业务连续性管理等内容。 一、日常操作与维护管理 ▼▼制度与流程 是否建立日常运行操作制度与流程?包括网络、主机、应用等方面的操作制度与流程? 是否明确相关部门和人…...

Linux系统之stat命令的基本使用
Linux系统之stat命令的基本使用 一、stat命令 介绍二、stat命令帮助2.1 查询帮助信息2.2 stat命令的帮助解释 三、stat命令的基本使用3.1 查询文件信息3.2 查看文件系统状态3.3 使用格式化输出3.4 以简洁形式打印信息 四、注意事项 一、stat命令 介绍 stat 命令用于显示文件或文…...

云手机+Facebook:让科技与娱乐完美结合
移动互联网时代,Facebook作为全球最大的社交媒体平台之一,早已成为企业、品牌和组织竞相角逐的营销阵地。而云手机的出现,则为Facebook营销注入了新的活力,其独特的优势让营销活动更加高效、精准且灵活。本文将深入探讨云手机在Fa…...

为什么要在PHY芯片和RJ45网口中间加网络变压器
在PHY芯片和RJ45网口之间加入网络变压器是出于以下几个重要的考虑: 1. 电气隔离:网络变压器提供了电气隔离功能,有效阻断了PHY芯片与RJ45之间直流分量的直接连接。这样可以防止可能的电源冲突,降低系统故障的风险,并保…...

LeetCode 19:删除链表的倒数第N 个结点
题目: 地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 方法一: 方法二: 代码: package com.zy.leetcode.LeetCode_19;/*** Author: zy* Date: 2024-12-25-13:01* Description: 删除链表…...

RT-DETR融合[IJCV2024]LSKNet中的LSKBlock模块
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《Large Selective Kernel Network for Remote Sensing Object Detection》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2303.09030 代码链接:https:…...

C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
一、树的存储结构 1)双亲表示法实现: 定义结构数组存放树的结点,每个结点含两个域: 数据域:存放结点本身信息。双亲域:指示本结点的双亲结点在数组中的位置。 特点:找双亲简单,找孩子难 C语…...
新浪微博大数据面试题及参考答案(数据开发和数据分析)
介绍一下你所掌握的计算机网络和操作系统相关知识 计算机网络:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。我掌握了网络协议…...

OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示
本文介绍在开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙OpenHarmony5.0 Release系统,适…...

SAP GUI Scripting - 如何判断组件是否存在
总体来说,SAP Scripting 与 BDC 类似,因为是屏幕录制,就可能碰到不同的情况,比如每个录入的数据不同,可能出现一个对话框,或者出现一个状态栏消息。这种任何有变化的情况,在 Scripting 中没有考…...
Go 计算Utf8字符串的长度 不要超过mysql字段的最大长度
背景: 我有一个mysql的字段,是utf8格式的,但有时候前端传的字符串会超长,为此我需要在后端接口,先判断是否超长,如果超长,则报错提示前端。 代码: // 计算utf8下,字符串…...

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~
实际问题场景: 使用llamafactory进行微调qwen2.5 7B和14B的大模型时,会出现out of memory的报错。尝试使用降低batch_size(原本是2,现在降到1)的方式,可以让qwen2.5:7B跑起来,但时不时会不稳定…...
全局webSocket 单个页面进行监听并移除单页面监听
之前全局封装的 webSocket 在某些特定的页面中使用会直接去调用 webSocket 的 onMessage 方法 已进入页面就会调,如果退出页面移除整个监听的话全局监听就会被移除 这是修改后的 全局封装 let token uni.getStorageSync(token) const HEARTBEAT_INTERVAL 1 *…...

JVM调优实践篇
理论篇 1多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...