【OPENMV】学习记录 (持续更新)

news2024/11/25 20:48:12

一、基础知识

1 设置彩色/黑白:

  • sensor.set_pixformat() 设置像素模式。
    • sensor.GRAYSCALE: 灰度,每个像素8bit。
    • sensor.RGB565: 彩色,每个像素16bit。

2 设置图像大小:

  • sensor.set_framesize() 设置图像的大小
    • sensor.QQCIF: 88x72
    • sensor.QCIF: 176x144
    • sensor.CIF: 352x288
    • sensor.QQSIF: 88x60
    • sensor.QSIF: 176x120
    • sensor.SIF: 352x240
    • sensor.QQQQVGA: 40x30
    • sensor.QQQVGA: 80x60
    • sensor.QQVGA: 160x120
    • sensor.QVGA: 320x240
    • sensor.VGA: 640x480
    • sensor.HQQQVGA: 80x40
    • sensor.HQQVGA: 160x80
    • sensor.HQVGA: 240x160
    • sensor.B64X32: 64x32 (用于帧差异 image.find_displacement())
    • sensor.B64X64: 64x64 用于帧差异 image.find_displacement())
    • sensor.B128X64: 128x64 (用于帧差异 image.find_displacement())
    • sensor.B128X128: 128x128 (用于帧差异 image.find_displacement())
    • sensor.LCD: 128x160 (用于LCD扩展板)
    • sensor.QQVGA2: 128x160 (用于LCD扩展板)
    • sensor.WVGA: 720x480 (用于 MT9V034)
    • sensor.WVGA2:752x480 (用于 MT9V034)
    • sensor.SVGA: 800x600 (仅用于 OV5640 感光元件)
    • sensor.XGA: 1024x768 (仅用于 OV5640 感光元件)
    • sensor.SXGA: 1280x1024 (仅用于 OV5640 感光元件)
    • sensor.UXGA: 1600x1200 (仅用于 OV5640 感光元件)
    • sensor.HD: 1280x720 (仅用于 OV5640 感光元件)
    • sensor.FHD: 1920x1080 (仅用于 OV5640 感光元件)
    • sensor.QHD: 2560x1440 (仅用于 OV5640 感光元件)
    • sensor.QXGA: 2048x1536 (仅用于 OV5640 感光元件)
    • sensor.WQXGA: 2560x1600 (仅用于 OV5640 感光元件)
    • sensor.WQXGA2: 2592x1944 (仅用于 OV5640 感光元件)

3 自动增益/白平衡/曝光:

  • sensor.set_auto_gain() ——自动增益开启(True)或者关闭(False)。
  • 在使用颜色追踪时,需要关闭自动增益。

  1. 自动调节图像亮度:

    • 当光线较暗时,摄像头会自动增加增益,使得图像变得更加明亮。

    • 当光线过强时,摄像头会减少增益,以防止图像过曝。

  2. 适应不同的光照条件:

    • 适用于光照变化频繁的场景,如从室内到室外的转换。

    • 在无人值守的监控设备中,可以保证全天候图像质量。

  3. 简化图像处理:

    • 不需要手动调整增益参数,简化了图像处理和摄像头配置的复杂性。

    • 提高了图像处理算法的鲁棒性,因为图像亮度的一致性更好。

  • sensor.set_auto_whitebal()——自动白平衡开启(True)或者关闭(False)。

  • 在使用颜色追踪时,需要关闭自动白平衡。                  

  • sensor.set_auto_exposure(enable[\, exposure_us])

    • enable 打开(True)或关闭(False)自动曝光。默认打开。
    • 如果 enable 为False, 则可以用 exposure_us 设置一个固定的曝光时间(以微秒为单位)。

4 设置窗口ROI

sensor.set_windowing(roi)

sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_windowing((640, 80)) #取中间的640*80区域

roi的格式是(x, y, w, h)。你可以只传递 (w,h),而 roi 将会在图像中居中。

5 设置翻转

sensor.set_hmirror(True)
# 水平方向翻转

sensor.set_vflip(True)
# 垂直方向翻转

二、画图

1 画线

  • image.draw_line(line_tuple, color=White) 在图像中画一条直线。
    • line_tuple的格式是(x0, y0, x1, y1),意思是(x0, y0)到(x1, y1)的直线。
    • 颜色可以是灰度值(0-255),或者是彩色值(r, g, b)的tupple。默认是白色

2 画框

  • image.draw_rectangle(rect_tuple, color=White) 在图像中画一个矩形框。
    • rect_tuple 的格式是 (x, y, w, h)。

3 画十字

  • image.draw_cross(x, y, size=5, color=White) 在图像中画一个十字
    • x,y是坐标
    • size是两侧的尺寸

三、AprilTag标记跟踪

AprilTag

AprilTag测距代码:

import sensor, image, time, math

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
sensor.skip_frames(30)
sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
sensor.set_hmirror(True)
clock = time.clock()

# f_x 是x的像素为单位的焦距。
# f_y 是y的像素为单位的焦距。
# c_x 是图像的x中心位置
# c_y 是图像的y中心位置

f_x = (2.8 / 3.984) * 160 # 默认值
f_y = (2.8 / 2.952) * 120 # 默认值
c_x = 160 * 0.5 # 默认值(image.w * 0.5)
c_y = 120 * 0.5 # 默认值(image.h * 0.5)

def degrees(radians):
    return (180 * radians) / math.pi

while(True):
    clock.tick()
    img = sensor.snapshot()
    for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        distance = math.sqrt(tag.x_translation()**2 + tag.y_translation()**2 + tag.z_translation()**2) * 2.550108137

        # 位置的单位是未知的,旋转的单位是角度
        print("Dis:",distance)

四、模块识别

    1. 多模版匹配

        使用NCC算法,可识别区域仅支持离中心左右30°范围内。

# Template Matching Example - Normalized Cross Correlation (NCC)
import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
# 仅引入SEARCH_EX, SEARCH_DS两个需要的部分

sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.QQVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
clock = time.clock()

templates = ["/0.pgm", "/1.pgm", "/2.pgm", "/6.pgm"]

while (True):
    clock.tick()
    img = sensor.snapshot()

    for t in templates:
        template = image.Image(t)

        r = img.find_template(template, 0.50, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    #find_template(template, threshold, [roi, step, search])
    #threshold是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
    #注意roi的大小要比模板图片大,比frambuffer小
        if r:
            img.draw_rectangle(r)
            print(t)

五、图像滤波处理

   1. 直方图均衡

img = sensor.snapshot().histeq()

   2. 高斯模糊

img.gaussian(1,unsharp=True)

   3. 核滤波

kernel_size = 1 # 3x3==1, 5x5==2, 7x7==3, etc.

kernel = [-2, -1,  0, \
          -1,  1,  1, \
           0,  1,  2]

    # Run the kernel on every pixel of the image.
    # 在图像的每个像素上运行核
    img.morph(kernel_size, kernel)

   4. 双边滤波:去噪保边

img.bilateral(2, color_sigma=0.1, space_sigma=1)

双边滤波对高斯噪声可以平滑掉,但对孤立点的滤波效果不好

灰度图与彩图的双边滤波

   5. 白光去除

# 彩图光线去除例程
# 从图像中删除明亮的光线允许您在图像上使用histeq(),
# 而不会使图像的过饱和部分的异常值破坏算法...

```
sensor.set_pixformat(sensor.RGB565)
thresholds = (4, 97, -22, 40, -24, 43)

while(True):
    clock.tick()
    img = sensor.snapshot().binary([thresholds], invert=True, zero=True)





# 灰度滤波例程
```
sensor.set_pixformat(sensor.GRAYSCALE)

thresholds = (0, 200)

while(True):
    clock.tick()
    img = sensor.snapshot().binary([thresholds], invert=True, zero=True)

   6. 边缘检测

```
sensor.set_pixformat(sensor.GRAYSCALE)


while(True):
    clock.tick()
    img = sensor.snapshot()

    # 使用Canny算法进行边缘检测
    # 可以调整阈值以适应不同的光照条件和线条粗细
    edges = img.find_edges(image.EDGE_CANNY, threshold=(50, 80))

   7. 腐蚀和膨胀

# 腐蚀和膨胀
# 这个例子展示了可以在二进制图像上运行的腐蚀和膨胀函数来消除噪声。

```
sensor.set_pixformat(sensor.GRAYSCALE)
grayscale_thres = (170, 255)


while(True):
    img = sensor.snapshot()
    img.binary([grayscale_thres])
    
    img.erode(2)
    #对图像边缘进行侵蚀
    #侵蚀函数erode(size, threshold=Auto),size为kernal的大小,去除边缘相邻处多余的点。
    #threshold用来设置去除相邻点的个数,threshold数值越大,被侵蚀掉的边缘点越多,边缘旁边白色杂点少;
    
    img.dilate(2)
    #对图像边缘进行膨胀
    #膨胀函数image.dilate(size, threshold=Auto),size为kernal的大小,使边缘膨胀。
    #threshold用来设置去除相邻点的个数,threshold数值越大,边缘越膨胀;     

   8. 灰度二值化

# 灰度二值化图像滤波
import sensor, image, math

sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.GRAYSCALE)

low_threshold = (0, 50)
high_threshold = (205, 255)

while(True):
    # 测试低阈值
    for i in range(300):
        img = sensor.snapshot()
        img.binary([low_threshold])
        #image.binary(thresholds, invert=False)此函数将在thresholds内的
        #图像部分的全部像素变为1白,将在阈值外的部分全部像素变为0黑。invert将图像
        #的0 1(黑 白)进行反转,默认为false不反转。

    # 测试高阈值
    for i in range(300):
        img = sensor.snapshot()
        img.binary([high_threshold])

   9. 畸变矫正

# 畸变校正
# 这个例程展示了如何使用畸变矫正方法来修复图像失真问题。在二维码/条形码/矩形码检测时需要使用此方法。
# 增加下面的strength直到直线在视图中。
# zoom是在对图像进行缩放的数值。默认值为1。



while(True):
    clock.tick()
    img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0)

   10. 直线滤波

# 直线滤波例程
# 传感器模块可以在图像读取期间执行一些基本的图像处理而无需额外的开销。

```
# 将源复制到目标
# 注意源是YUYV 目标是1BPP灰度
def line_filter_copy(src, dst):
    for i in range(0, len(dst), 1):
        dst[i] = src[i<<1]


# 按照阈值分割图像。
# 注意源是YUYV目标 是1BPP灰度
def line_filter_bw(src, dst):
    for i in range(0, len(dst), 1):
        if (src[i<<1] > 100 and src[i<<1] < 255):
            dst[i] = 0xFF
        else:
            dst[i] = 0x00


while(True):
    clock.tick()
    lines = 0
    img = sensor.snapshot(line_filter = line_filter_copy)

   11. 均值滤波

# 均值滤波例程
# 这个例子展示了均值滤波。均值滤波是NxN邻域的标准均值滤波。
# 均值滤波通过模糊所有内容来消除图像中的噪点。
# 但是,这是最快的内核过滤器操作

```

while(True):
    clock.tick()
    img = sensor.snapshot()

    # 唯一的参数是内核大小。N对a ((N*2)+1)^2的核大小有响应。
    # 例如:1 == 3x3内核,2 == 5x5内核,等等。
    # 注意:不应该使用大于2的值。
    img.mean(1)

   12. 中值滤波

# 中值滤波
# 中值滤波用其NxN邻域的中位数替换每个像素。中值滤波对于在保留边缘的同时去除图像中的噪声是很好的。
# 中值滤波对椒盐噪声有很强的抑制能力,可以很好地去除图像中的瞬时脉冲干扰。
# 对于高斯噪声等其他类型噪声,中值滤波的效果不如均值滤波等线性滤波器。

while(True):
    clock.tick()
    img = sensor.snapshot()

    img.median(1, percentile=0.25)
    # Size是内核的大小。取1 (3x3 内核)、2 (5x5 内核)或更高值。
    # percentile控制内核中所使用值的百分位数。默认情况下,每个像素都使用相邻的第五
    # 十个百分位数(中心)替换。使用最小滤波时,您可将此值设置为0,使用下四分位数滤
    # 波时设置为0.25,使用上四分位数滤波时设置为0.75,使用最大滤波时设置为1。
    

   13. 中点滤波

# 中点滤波例程
# 中点滤波用NxN邻域的最小和最大像素值的平均值代替每个像素。
# 中点滤波对于去除包含极大和极小值的噪声(如椒盐噪声)具有良好效果。


while(True):
    clock.tick()
    img = sensor.snapshot()

    # size 是内核的大小。取1 (3x3 内核)、2 (5x5 内核)或更高值。
    # bias 控制图像混合的最小/最大程度。0只适用于最小滤波,1仅用于最大滤波。您可以
    # 通过对图像进行最小/最大化过滤。
    img.midpoint(1, bias=0.25)

  • 在处理大窗口噪声的方面,由于需要对所有像素值进行排序以找出中值或中点,所以两者的计算复杂度都相对较高。
  • 中值滤波对窗口大小比较敏感,窗口过大可能导致图像细节丢失,过小则去噪效果不明显。而中点滤波对非椒盐噪声(如高斯噪声)的处理能力则不如中值滤波。

   14. 众数滤波

# 众数滤波例程
# 众数滤波是一种高度非线性的操作,它会在图像边缘造成伪影.
# 众数滤波特别适合去除椒盐噪声和胡椒噪声
# 不适用于噪声模式复杂或不规则的噪声处理

while(True):
    clock.tick()
    img = sensor.snapshot()

    # Size是内核的大小。取1 (3x3 内核)、2 (5x5 内核)。
    img.mode(1)

六、其他图像处理

   1. 图像锐化

while(True):
    clock.tick()
    img = sensor.snapshot()

    # 在图像的每个像素上运行核
    img.laplacian(2, sharpen=True)

   2. 垂直水平镜像转置图像

# 垂直翻转 - 水平镜像 - 转置图像

# vflip=False, hmirror=False, transpose=False -> 0 degree rotation
# vflip=True,  hmirror=False, transpose=True  -> 90 degree rotation
# vflip=True,  hmirror=True,  transpose=False -> 180 degree rotation
# vflip=False, hmirror=True,  transpose=True  -> 270 degree rotation

import sensor
import time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
clock = time.clock()
ticks = time.ticks_ms()
counter = 0

while True:
    clock.tick()

    img = sensor.snapshot().replace(
        vflip=(counter // 2) % 2,
        hmirror=(counter // 4) % 2,
        transpose=(counter // 8) % 2,
    )

    if time.ticks_diff(time.ticks_ms(), ticks) > 1000:
        ticks = time.ticks_ms()
        counter += 1

七、感光元件控制

1 感光元件自动增益控制

# 感光元件自动增益控制

# 增益和曝光控制之间有什么区别?
# 通过增加图像的曝光时间,您可以在相机上获得更多光线。这为您提供了最佳的信噪比。
# 您通常总是希望增加曝光时间...除非,当您增加曝光时间时,您会降低最大可能的帧速率,
# 如果图像中有任何移动,它将在更长的曝光时间内开始模糊。 
# 增益控制允许您使用模拟和数字乘法器增加每像素的输出......但是,它也会放大噪声。 
# 因此,最好尽可能让曝光增加,然后使用增益控制来弥补任何剩余的地画面。

# 我们可以通过在自动增益控制算法上设置增益上限来实现上述目的。 
# 一旦设置完毕,算法将不得不增加曝光时间以满足任何增益需求,而不是使用增益。 
# 然而,当照明变化相对于曝光恒定且增益变化时,这是以曝光时间的变化为代价的。

import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)

sensor.set_auto_gain(True, gain_db_ceiling = 16.0)
#注意!如果在不调整曝光控制目标值的情况下将增益上限设置为低,那么如果曝光控制打开,您将从曝光控制中获得大量振荡。
sensor.skip_frames(time = 2000)
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    print("FPS %f, Gain %f dB, Exposure %d us" % \
        (clock.fps(), sensor.get_gain_db(), sensor.get_exposure_us()))

2 曝光控制

# 感光元件曝光控制
# 增益和曝光控制之间有什么区别?
# 通过增加图像的曝光时间,您可以在相机上获得更多光线。这为您提供了最佳的信噪比。
# 您通常总是希望增加曝光时间...除非,当您增加曝光时间时,您会降低最大可能的帧速率,
# 如果图像中有任何移动,它将在更长的曝光时间内开始模糊。 
# 增益控制允许您使用模拟和数字乘法器增加每像素的输出......但是,它也会放大噪声。 
# 因此,最好尽可能让曝光增加,然后使用增益控制来弥补任何剩余的地画面。
# 我们可以通过在自动增益控制算法上设置增益上限来实现上述目的。 
# 一旦设置完毕,算法将不得不增加曝光时间以满足任何增益需求,而不是使用增益。 
# 然而,当照明变化相对于曝光恒定且增益变化时,这是以曝光时间的变化为代价的。

import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
# 您必须关闭自动增益控制和自动白平衡,否则他们将更改图像增益以撤消您放置的任何曝光设置...
sensor.set_auto_gain(False)
sensor.set_auto_whitebal(False)

# 更改此值以调整曝光。试试10.0 / 0.1 /等。
EXPOSURE_TIME_SCALE = 1.0
sensor.skip_frames(time = 2000)
clock = time.clock()

current_exposure_time_in_microseconds = sensor.get_exposure_us()
# 默认情况下启用自动曝光控制(AEC)。调用以下功能可禁用传感器自动曝光控制。 
# 另外“exposure_us”参数在AEC被禁用后覆盖自动曝光值。
sensor.set_auto_exposure(False, \
    exposure_us = int(current_exposure_time_in_microseconds * EXPOSURE_TIME_SCALE))

while(True):
    clock.tick()                    # 更新FPS帧率时钟。
    img = sensor.snapshot()         # 拍一张照片并返回图像。

八、测距

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(100)
sensor.set_auto_whitebal(False)
sensor.set_auto_gain(False)
sensor.set_auto_exposure(False)
clock = time.clock()


K = 850                           #the value should be measured 距离参数
Target_Threshold = (0, 25, -25, 30, -28, 13)


while(True):
    clock.tick()
    img = sensor.snapshot().histeq(adaptive=True, clip_limit=3)
    img.laplacian(1, sharpen=True)
    img.binary([Target_Threshold],invert=True)

    blobs = img.find_blobs([Target_Threshold])
    if len(blobs) == 1:
        # Draw a rect around the blob.
        b = blobs[0]
        img.draw_rectangle(b[0:4]) # rect
        img.draw_cross(b[5], b[6]) # cx, cy
        Lm = (b[2]+b[3])/2
        length = K/Lm
        print(length)

九、神经网络目标检测

训练神经网络目标检测实际道路环境交通标志

1. 开启数据集,存放数据图片

2. 对准目标对象,点击进行拍摄

    拍摄约2、3百张

3. 登录训练神经网络网站,创建新项目

Edge Impulse


4. 点击上传已有数据

5. 上传数据文件 / 文件夹

6. 添加检测标签

    直至添加完所有标签

7. 配置Impulse

8. 配置图像参数并保存

点击生成特征

 

9. 配置物体检测

10. 存储项目版本

11. 配置部署

配置完毕,会提示下载压缩包,解压后将其中文件导入OpenMV内存中运行即可

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

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

相关文章

day51 动态规划 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 动态规划 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金 &#xff0c;这里可能有同学疑惑&#xff0c;本题中只能买卖一次&#xff0c;持有股票之后哪还有现金呢&#xff1f; 其实一开始现…

解密智慧校园解决方案:赋能数字化教育的未来

在当今数字化时代&#xff0c;智慧校园解决方案正以惊人的速度改变着教育界的面貌。随着科技的快速发展&#xff0c;数字化教育已经逐渐成为现代教育的核心。智慧校园解决方案作为一个集技术、教育和创新于一体的综合性项目&#xff0c;为学校提供了许多机遇和挑战。本文将揭示…

期望18K,4年前端Cvte 视源股份一面挂

一面 1、自我介绍&#xff1f;毕业的时候一直在 xx 公司&#xff0c;你基本都在做什么项目&#xff1f; 2、你讲一下你主要负责哪一块的&#xff1f;balabala 3、你们的 json 是怎么定义组件间的联动的&#xff1f; 4、怎么确定区分两个 input&#xff1f; 5、你们是怎么触…

Vue3入门 - vue3相比于vue2的优点,及如何创建Vue3项目

目录 一、认识Vue3 1. Vue2 选项式 API vs Vue3 组合式API 2. Vue3的优势 二、使用create-vue搭建Vue3项目 1. 认识create-vue 2. 使用create-vue创建项目 3.熟悉项目和关键文件 一、认识Vue3 1. Vue2 选项式 API vs Vue3 组合式API <script>export default …

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑发用电相似性的海上风电中长期双边协商交易优化决策模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【CV算法工程师必看】作为一个图像算法工程师,需要会什么,要学哪些技术栈?

作为一个图像算法工程师,除了基本的编程技能和理论知识,还需要掌握一系列的技术栈。以下是详细的技能和技术栈分类: 编程语言 Python: 主要用于快速开发和原型设计。常用库:OpenCV、Pillow、NumPy、SciPy、Scikit-image、TensorFlow、PyTorch。C++: 高性能要求的项目中广…

使用Ollama+OpenWebUI部署和使用Phi-3微软AI大模型完整指南

&#x1f3e1;作者主页&#xff1a; 点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月6日23点50分 &#x1f004;️文章质量&#xff1a;96分 欢迎来到Phi-3模型的奇妙世界&#xff01;Phi-3是由微软…

零售数据分析围绕人、货、场分析了什么?

零售数据分析围绕人、货、场分析了什么&#xff1f;通过全面分析零售业务中的人、货、场三个核心要素&#xff0c;为零售商提供深入的市场洞察和业务优化建议。通过对客流量、商品销售、场地布局等数据的收集和数据可视化分析&#xff0c;帮助企业更好地了解消费者行为、商品销…

一起学大模型 - 一起动笔练习prompt的用法

文章目录 前言一、代码演示二、代码解析1. 导入所需的库和模块&#xff1a;2. 设置日志记录和初始化模型&#xff1a;3. 定义一个函数用于清理GPU内存&#xff1a;4. 定义一个继承自LLM基类的QianWenChatLLM类&#xff0c;并实现对话生成的逻辑&#xff1a;5. 示例代码的主体部…

【Linux】ip命令详解

Linux网络排查 目录 一、ip命令介绍 1.1 ip命令简介 1.2 ip命令的由来 二、ip命令使用帮助 2.1 ip命令的help帮助信息 2.2 ip命令对象介绍 2.3 ip命令选项介绍 三、查看网络信息 3.1 显示当前网络接口信息 3.2 显示网络设备运行状态 3.3 显示详细设备信息 3.4 查看…

【多模态】37、TextSquare | 借助 Gemini-Pro 通过四个步骤来生成高质量的文本问答数据

文章目录 一、背景二、方法2.1 Square-10M2.2 模型结构2.3 使用 Square-10M 进行有监督微调 三、效果3.1 实验设置3.2 Benchmark 测评 论文&#xff1a;TextSquare: Scaling up Text-Centric Visual Instruction Tuning 代码&#xff1a;暂无 出处&#xff1a;字节 | 华中科技…

大学生必备搜题神器app?分享3个软件和公众号,来对比看看吧 #媒体#其他#笔记

以下分享的软件提供了各种实用的功能&#xff0c;如数学公式计算、语文阅读辅助等&#xff0c;让大学生们在学习过程中更加高效和便利。 1.同声传译王 譬如我们在搜题或是浏览一些资料文档到时候&#xff0c;经常会访问到一些外文网页或文档&#xff0c;所以一款趁手的翻译工…

2024年四川省国家大学科技园申报条件对象和支持政策

2024年四川省国家大学科技园申报对象 国家大学科技园是以具有较强科研实力的大学为依托&#xff0c;将大学的综合智力资源优势与其它社会优势资源相结合&#xff0c;为高等学校&#xff08;以下简称为高校&#xff09;科技成果转化、高新技术企业孵化、创新创业人才培养、产学…

白酒:茅台镇白酒的丰富历史与文化传承

茅台镇&#xff0c;位于中国贵州省仁怀市&#xff0c;是中国著名的白酒产区&#xff0c;以其得天独厚的自然环境和与众不同的酿造工艺而闻名于世。作为茅台镇的白酒品牌之一&#xff0c;云仓酒庄豪迈白酒承载着丰富的历史与文化传承。 茅台镇的历史可以追溯到汉代&#xff0c;当…

@vue-office/excel 解决移动端预览excel文件触发软键盘

先直接上代码 不耽误大家时间 标明下插件库 非常感谢作者提供预览插件 vue-office/excel 只需要控制CSS :deep(.x-spreadsheet-overlayer) {.x-spreadsheet-selectors {display: none !important;} } :deep(.x-spreadsheet-bottombar) {li.active {user-select: none !import…

visual studio打包qt算子时,只生成dll没有生成lib等文件

问题&#xff1a;在visual studio配置了qt项目&#xff0c;并打包成dll&#xff0c;原则上会生成一堆文件&#xff0c;包括dll,lib等文件。 解决办法&#xff1a; 挨个右击源代码的所有头文件-》属性-》项类型。改成qt头文件形式&#xff0c;如下。

4秒惊艳!Stable Cascade AI绘画神器,设计师和普通用户的无限创意新选择

近日&#xff0c;一款AI绘画模型Stable Cascade发布。 只需输入一段描述文字&#xff0c;即可在4秒钟内获得令人惊艳的图像。 无论你是设计师、艺术家&#xff0c;还是普通用户&#xff0c;都能轻松上手&#xff0c;释放无限创意。 Stable Cascade不仅在使用上极具便捷性&am…

tomcat-valve通过servlet处理请求

上一节说到请求url定位servlet的过程&#xff0c;tomcat会把请求url和容器的映射关系保存到MappingData中&#xff0c;org.apache.catalina.connector.Request类实现了HttpServletRequest&#xff0c;其中定义了属性mappingDataprotected final MappingData mappingData new M…

机器学习笔记 - stable diffusion web-ui安装教程

一、Stable Diffusion WEB UI 屌丝劲发作了,所以本地调试了Stable Diffusion之后,就去看了一下Stable Diffusion WEB UI,网络上各种打包套件什么的好像很火。国内的也就这个层次了,老外搞创新,国内跟着屁股后面搞搞应用层,就叫大神了。 不扯闲篇了,我们这里从git源码直接…

Python深度学习基于Tensorflow(15)OCR验证码 文本检测与识别实例

文章目录 文本检测文本识别CTC层生成验证码并制作数据集建立模型模型推理 参考 文本检测 文本检测和目标检测类似&#xff0c;其不同之处在于文本目标具有序列特征&#xff0c;有连续性&#xff0c;可以通过结合 Faster R-CNN 和 LSTM 的方式进行文本检测&#xff0c;如 CTPN …