数码相框-显示JPG图片
LCD控制器会将LCD上的屏幕数据映射在相应的显存位置上。
通过libjpeg把jpg图片解压出来RGB原始数据。
libjpeg是使用c语言实现的读写jpeg文件的库。
使用libjpeg的应用程序是以"scanline"为单位进行图像处理的。
libjpeg解压图片的步骤:
libjpeg的使用
Directory Listing of /files (ijg.org)
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg$ tar -vxzf jpegsrc.v9f.tar.gz
生成配置文件:
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg$ ls
jpeg-9f jpegsrc.v9f.tar.gz
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg$ cd jpeg-9f/
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f$ mkdir tmp
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f$ ./configure --prefix=/home/bleaaach/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f/tmp/ --host=arm-gnueabihf-linux
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f$ sudo make install
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f$ ls tmp
bin include lib share
今天仔细看了一下arm-linux-gnueabihf的头文件在/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/
:
bleaaach@bleaaach-virtual-machine:/usr/local/include$ ls
freetype2 jconfig.h jerror.h jmorecfg.h jpeglib.h
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f/tmp/lib$ sudo cp * /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -rf
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/jpeg-9f/tmp/lib$ sudo cp ../include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/ -rf
输出图像信息
把韦东山老师写的代码拷进来:
编译1th:
#include <stdio.h>
#include "jpeglib.h"
#include <setjmp.h>/*
Allocate and initialize a JPEG decompression object // 分配和初始化一个decompression结构体
Specify the source of the compressed data (eg, a file) // 指定源文件
Call jpeg_read_header() to obtain image info // 用jpeg_read_header获得jpg信息
Set parameters for decompression // 设置解压参数,比如放大、缩小
jpeg_start_decompress(...); // 启动解压:jpeg_start_decompress
while (scan lines remain to be read)jpeg_read_scanlines(...); // 循环调用jpeg_read_scanlines
jpeg_finish_decompress(...); // jpeg_finish_decompress
Release the JPEG decompression object // 释放decompression结构体
*//* Uage: jpg2rgb <jpg_file>*/int main(int argc, char **argv)
{struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE * infile;// 分配和初始化一个decompression结构体cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header获得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 设置解压参数,比如放大、缩小// 启动解压:jpeg_start_decompressjpeg_start_decompress(&cinfo);/* 输出的图象的信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);// 循环调用jpeg_read_scanlines来一行一行地获得解压的数据jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0;
}
bleaaach@bleaaach-virtual-machine:~/linux/IMX6ULL/frame/04_libjpeg/1th$ arm-linux-gnueabihf-gcc -o jpg2rgb jpg2rgb.c -ljpeg
把文件拷贝到开发板:
在开发板上测试:
调整压缩比
// 设置解压参数,比如放大、缩小
printf("enter M/N:\n");
scanf("%d/%d", &cinfo.scale_num, &cinfo.scale_denom);
printf("scale to : %d/%d\n", cinfo.scale_num, cinfo.scale_denom);
有些缩放比例并没有实现,所以没有效果。
输出JPG图片
#include <stdio.h>
#include "jpeglib.h"
#include <setjmp.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <string.h>
#include <stdlib.h>#define FB_DEVICE_NAME "/dev/fb0"
#define DBG_PRINTF printfstatic int g_fd;static struct fb_var_screeninfo g_tFBVar;
static struct fb_fix_screeninfo g_tFBFix;
static unsigned char *g_pucFBMem;
static unsigned int g_dwScreenSize;static unsigned int g_dwLineWidth;
static unsigned int g_dwPixelWidth;static int FBDeviceInit(void)
{int ret;g_fd = open(FB_DEVICE_NAME, O_RDWR);if (0 > g_fd){DBG_PRINTF("can't open %s\n", FB_DEVICE_NAME);}ret = ioctl(g_fd, FBIOGET_VSCREENINFO, &g_tFBVar);if (ret < 0){DBG_PRINTF("can't get fb's var\n");return -1;}ret = ioctl(g_fd, FBIOGET_FSCREENINFO, &g_tFBFix);if (ret < 0){DBG_PRINTF("can't get fb's fix\n");return -1;}g_dwScreenSize = g_tFBVar.xres * g_tFBVar.yres * g_tFBVar.bits_per_pixel / 8;g_pucFBMem = (unsigned char *)mmap(NULL , g_dwScreenSize, PROT_READ | PROT_WRITE, MAP_SHARED, g_fd, 0);if (0 > g_pucFBMem){DBG_PRINTF("can't mmap\n");return -1;}g_dwLineWidth = g_tFBVar.xres * g_tFBVar.bits_per_pixel / 8;g_dwPixelWidth = g_tFBVar.bits_per_pixel / 8;return 0;
}static int FBShowPixel(int iX, int iY, unsigned int dwColor)
{unsigned char *pucFB;unsigned short *pwFB16bpp;unsigned int *pdwFB32bpp;unsigned short wColor16bpp; /* 565 */int iRed;int iGreen;int iBlue;if ((iX >= g_tFBVar.xres) || (iY >= g_tFBVar.yres)){DBG_PRINTF("out of region\n");return -1;}pucFB = g_pucFBMem + g_dwLineWidth * iY + g_dwPixelWidth * iX;pwFB16bpp = (unsigned short *)pucFB;pdwFB32bpp = (unsigned int *)pucFB;switch (g_tFBVar.bits_per_pixel){case 8:{*pucFB = (unsigned char)dwColor;break;}case 16:{iRed = (dwColor >> (16+3)) & 0x1f;iGreen = (dwColor >> (8+2)) & 0x3f;iBlue = (dwColor >> 3) & 0x1f;wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;*pwFB16bpp = wColor16bpp;break;}case 32:{*pdwFB32bpp = dwColor;break;}default :{DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);return -1;}}return 0;
}static int FBCleanScreen(unsigned int dwBackColor)
{unsigned char *pucFB;unsigned short *pwFB16bpp;unsigned int *pdwFB32bpp;unsigned short wColor16bpp; /* 565 */int iRed;int iGreen;int iBlue;int i = 0;pucFB = g_pucFBMem;pwFB16bpp = (unsigned short *)pucFB;pdwFB32bpp = (unsigned int *)pucFB;switch (g_tFBVar.bits_per_pixel){case 8:{memset(g_pucFBMem, dwBackColor, g_dwScreenSize);break;}case 16:{iRed = (dwBackColor >> (16+3)) & 0x1f;iGreen = (dwBackColor >> (8+2)) & 0x3f;iBlue = (dwBackColor >> 3) & 0x1f;wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;while (i < g_dwScreenSize){*pwFB16bpp = wColor16bpp;pwFB16bpp++;i += 2;}break;}case 32:{while (i < g_dwScreenSize){*pdwFB32bpp = dwBackColor;pdwFB32bpp++;i += 4;}break;}default :{DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);return -1;}}return 0;
}static int FBShowLine(int iXStart, int iXEnd, int iY, unsigned char *pucRGBArray)
{int i = iXStart * 3;int iX;unsigned int dwColor;//边界处理if (iY >= g_tFBVar.yres)return -1;if (iXStart >= g_tFBVar.xres)return -1;if (iXEnd >= g_tFBVar.xres){iXEnd = g_tFBVar.xres;}for (iX = iXStart; iX < iXEnd; iX++){/* 0xRRGGBB */dwColor = (pucRGBArray[i]<<16) + (pucRGBArray[i+1]<<8) + (pucRGBArray[i+2]<<0);i += 3;FBShowPixel(iX, iY, dwColor);}return 0;
}/*
Allocate and initialize a JPEG decompression object // 分配和初始化一个decompression结构体
Specify the source of the compressed data (eg, a file) // 指定源文件
Call jpeg_read_header() to obtain image info // 用jpeg_read_header获得jpg信息
Set parameters for decompression // 设置解压参数,比如放大、缩小
jpeg_start_decompress(...); // 启动解压:jpeg_start_decompress
while (scan lines remain to be read)jpeg_read_scanlines(...); // 循环调用jpeg_read_scanlines
jpeg_finish_decompress(...); // jpeg_finish_decompress
Release the JPEG decompression object // 释放decompression结构体
*//* Uage: jpg2rgb <jpg_file>*/int main(int argc, char **argv)
{struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE * infile;int row_stride;unsigned char *buffer;if (argc != 2){printf("Usage: \n");printf("%s <jpg_file>\n", argv[0]);return -1;}if (FBDeviceInit()){return -1;}FBCleanScreen(0);// 分配和初始化一个decompression结构体cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header获得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 设置解压参数,比如放大、缩小printf("enter scale M/N:\n");scanf("%d/%d", &cinfo.scale_num, &cinfo.scale_denom);printf("scale to : %d/%d\n", cinfo.scale_num, cinfo.scale_denom);// 启动解压:jpeg_start_decompressjpeg_start_decompress(&cinfo);/* 输出的图象的信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);// 一行的数据长度row_stride = cinfo.output_width * cinfo.output_components;buffer = malloc(row_stride);// 循环调用jpeg_read_scanlines来一行一行地获得解压的数据while (cinfo.output_scanline < cinfo.output_height) {(void) jpeg_read_scanlines(&cinfo, &buffer, 1);// 写到LCD去FBShowLine(0, cinfo.output_width, cinfo.output_scanline, buffer);}free(buffer);jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0;
}
这段代码使用libjpeg
库将一个JPEG格式的图片文件解码并显示到Linux系统的Framebuffer设备上。以下是详细的代码功能解读:
-
包含头文件与定义常量:
- 引入了
stdio.h
、jpeglib.h
、setjmp.h
等C标准库头文件以及sys/types.h
、sys/stat.h
、fcntl.h
、sys/ioctl.h
、sys/mman.h
、linux/fb.h
等系统相关头文件。 - 定义了Framebuffer设备名
FB_DEVICE_NAME
、调试打印宏DBG_PRINTF
以及全局变量g_fd
、g_tFBVar
、g_tFBFix
、g_pucFBMem
、g_dwScreenSize
、g_dwLineWidth
、g_dwPixelWidth
。
- 引入了
-
Framebuffer设备初始化函数:
FBDeviceInit()
函数负责打开Framebuffer设备文件、获取其变量信息(g_tFBVar
)和固定信息(g_tFBFix
),计算屏幕尺寸、内存映射,并初始化行宽和像素宽度。
-
Framebuffer显示相关函数:
-
FBShowPixel()
函数根据给定的颜色值和坐标,在Framebuffer上显示一个像素。 -
FBCleanScreen()
函数清除整个Framebuffer,用指定颜色填充。 -
FBShowLine()
函数接收一个RGB数据数组,将该数组表示的一行像素数据按照指定坐标写入Framebuffer。int iXStart
: 要绘制的线条起点的 x 坐标。int iXEnd
: 要绘制的线条终点的 x 坐标。int iY
: 线条在屏幕上的固定 y 坐标。unsigned char *pucRGBArray
: 指向一个包含 RGB 像素值的字节数组,数组中的每个连续三个字节表示一个像素的 R、G、B 分量(各占 8 位)。
-
-
JPEG解码相关函数:
- 这部分代码未直接定义JPEG解码函数,而是使用
libjpeg
库提供的接口。 main()
函数中,首先检查命令行参数是否正确(需要提供一个JPEG文件路径),然后调用FBDeviceInit()
初始化Framebuffer设备。- 初始化
jpeg_decompress_struct
结构体cinfo
和错误处理结构体jerr
,并关联标准错误处理方法。 - 打开指定的JPEG文件,将其作为解码源设置到
cinfo
结构体中。 - 调用
jpeg_read_header()
读取JPEG文件头信息,获取原始图像尺寸、颜色组件数等。 - 提示用户输入缩放比例(M/N),并设置到
cinfo
结构体中。 - 调用
jpeg_start_decompress()
启动解码过程。
- 这部分代码未直接定义JPEG解码函数,而是使用
-
JPEG图像解码与显示:
-
根据解码后输出的图像尺寸分配临时缓冲区
buffer
,用于存放一行像素数据。 -
使用循环调用
jpeg_read_scanlines()
,每次读取一行像素数据并将其存储在buffer
中。buffer
是一个指针数组,存储一行数据的起始位置。我们要把buffer传入到这个
typedef unsiged char** JSAMPARRAY
变量里,buffer[0]
实际上是一个unsigned char *
地址的指针,是指针的指针。 -
对于每一行解码得到的像素数据,调用
FBShowLine()
将其显示到Framebuffer对应行上。 -
解码完成后,释放
buffer
,调用jpeg_finish_decompress()
和jpeg_destroy_decompress()
完成解码过程的清理工作。
综上所述,这段代码的主要目的是将一个JPEG格式的图片文件解码,根据用户指定的缩放比例调整图像尺寸,然后逐行将解码后的像素数据写入Linux系统的Framebuffer设备,最终在连接到该设备的屏幕上显示解码后的图像。
-
测试
相关文章:

数码相框-显示JPG图片
LCD控制器会将LCD上的屏幕数据映射在相应的显存位置上。 通过libjpeg把jpg图片解压出来RGB原始数据。 libjpeg是使用c语言实现的读写jpeg文件的库。 使用libjpeg的应用程序是以"scanline"为单位进行图像处理的。 libjpeg解压图片的步骤: libjpeg的使…...

PHP自带的密码加密函数Password_verify 和password_hash
Password_verify 和password_hash 这两个函数都是PHP自带的密码加密函数,通过底层实现,无法查看源代码 password_hash函数用于对用户输入的密码进行加密 Password_verify验证用户输入的密码是否正确 Tips:看到密码验证用的Password_verify&a…...

UVA1596 Bug Hunt 找Bug 解题报告
题目链接 https://vjudge.net/problem/UVA-1596 题目大意 输入并模拟执行一段程序,输出第一个bug所在的行。每行程序有两种可能: 数组定义,格式为arr[size]。例如a[10]或者b[5],可用下标分别是0~9和0~4…...

Java编程题 | 提取整数的特定位数
大家可以关注一下专栏,方便大家需要的时候直接查找,专栏将持续更新~ 题目描述 编写一个Java程序,用于接收一个整数作为输入,然后从该整数的右端开始提取第4到第7位数字。 程序需要接收一个整数作为输入,然后输…...

设置你的第一个React应用
目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…...

【黑马头条】-day07APP端文章搜索-ES-mongoDB
文章目录 今日内容1 搭建es环境1.1 拉取es镜像1.2 创建容器1.3 配置中文分词器ik1.4 测试 2 app文章搜索2.1 需求说明2.2 思路分析2.3 创建索引和映射2.3.1 PUT请求添加映射2.3.2 其他操作 2.4 初始化索引库数据2.4.1 导入es-init2.4.2 es-init配置2.4.3 导入数据2.4.4 查询已导…...

SSL数字证书
SSL数字证书产品提供商主要来自于国外,尤其是美国,原理和使用操作系统一样,区别在于SSL数字证书目前无法替代性,要想达到兼容性99%的机构目前全球才3-4家,目前国内的主流网站主要使用的是国际证书,除了考虑…...

番茄 abogus rpc调用
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…...

CSS设置元素的宽高比
aspect-ratio 是一个CSS属性,它允许你指定一个元素的期望宽高比。当元素的宽度变化时,其高度会自动调整以保持指定的宽高比。这个属性非常有用,特别是当你想要确保某个元素(如视频或图像容器)始终保持特定的宽高比时。…...

jenkins+docker实现可持续自动化部署springboot项目
目录 一、前言 二、微服务带来的挑战 2.1 微服务有哪些问题 2.2 微服务给运维带来的挑战 三、可持续集成与交付概述 3.1 可持续集成与交付概念 3.1.1 持续集成 3.1.2 持续交付 3.1.3 可持续集成与交付核心理念 3.2 可持续集成优点 3.3 微服务为什么需要可持续集成 四…...

【LAMMPS学习】八、基本知识的讨论(1.8)键的断裂
8. 基本知识的讨论 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和…...

GPT提示词分享 —— 中医
👉 中医诊断涉及因素较多,治疗方案仅供参考,具体的方子需由医生提供。AI建议不能替代专业医疗意见,如果症状严重或持续,建议咨询专业医生。 我希望你能扮演一位既是老中医同时又是一个营养学专家,我讲描述…...

什么的零日攻击,如何防御零日攻击
零日漏洞通常是指还没有补丁的安全漏洞,零日攻击则是指利用零日漏洞对系统或软件应用发动的网络攻击。由于零日漏洞的严重级别通常较高,所以零日攻击往往也具有很大的破坏性。目前,任何安全产品或解决方案都不能完全防御住零日攻击。但是&…...

MySQL 建表语句详解
目录 基本建表语句 数据类型 列级约束 表级约束 表选项 示例 基本建表语句 CREATE TABLE table_name (column_name1 data_type(size) [column_constraints],column_name2 data_type(size) [column_constraints],...[table_constraints] ) [table_options]; table_name:…...

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化
CRM系统 CRM(Customer Relationship Management,客户关系管理)系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中,CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。本文将…...

P8707 [蓝桥杯 2020 省 AB1] 走方格
原题链接:[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意:现在有个人站在第 1 行第 1 列,要走到第 i 行第 j 列(每次只能向右或者向下走)࿰…...

Window安装PostgresSQL
PostgreSQL 安装参考:Windows下安装PostgreSQL_window 安装postgresql-CSDN博客 安装好后打开pgAdmin4 配置Navicat连接PostgresSQL 找到安装目录文件 pg_hba.conf 修改配置增加: 修改前: # TYPE DATABASE USER ADDRES…...

竞赛升温,量子革命待发
人工智能已经吸引了全球企业巨头和政界领袖的广泛关注。同时,一场激烈的全球竞赛正在展开,目标是开发被许多专家视为下一个领域革命性技术的量子计算。 量子计算机利用量子物理学的原理,有潜力推动包括药物研究、股票市场分析以及数据加密在内…...

登录压力测试
目录 一、准备测试数据 1.1数据库存储过程添加数据 1.2导出为csv作为测试数据(账号、密码) 二、使用fiddler抓包查看接口 2.1.抓到相关接口信息 2.2添加线程组和http请求 2.3将前面接口需要的参数去json格式化 2.4填写相关信息 2.5添加http…...

Linux服务器上搭建深度学习环境(安装anaconda、创建虚拟环境、安装pytorch)
Linux服务器的搭配 Linux服务器上安装anaconda创建虚拟环境linux上安装pytorchxshell连接服务器 Linux服务器上安装anaconda 链接 创建虚拟环境 参考教程:此处 linux上安装pytorch 链接 xshell连接服务器 链接...

SRNIC、选择性重传、伸缩性、连接扩展性、RoCEv2优化(六)
参考论文SRDMA(A Scalable Architecture for RDMA NICs ):https://download.csdn.net/download/zz2633105/89101822 借此,对论文内容总结、加以思考和额外猜想,如有侵权,请联系删除。 如有描述不当之处&…...

【神经网络】生成对抗网络GAN
生成对抗网络GAN 欢迎访问Blog总目录! 文章目录 生成对抗网络GAN1.学习链接2.GAN结构2.1.生成模型Generator2.2.判别模型Discrimintor2.3.伪代码 3.优缺点3.1.优势3.2.缺点 4.pytorch GAN4.1.API4.2.GAN的搭建4.2.1.结果4.2.2.代码 4.3.示意图:star: 1.学习链接 …...

智慧能耗预付费系统解决方案——用户侧能源计量及收费
安科瑞电气股份有限公司 祁洁 15000363176 一、方案组织架构 二、方案特点 (1)多样组网,多样设备接入,多样部署; (2)集团管理、项目分级、分层拓扑; (3)…...

探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事
提示工程是一种新兴的利用人工智能的技术,它通过设计提示引导生成式 AI 模型产生预期的输出,来提升人与 AI 的互动质量,激发 AI 模型的潜力,提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力,以微软全球副总裁…...

2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024)
2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024) 会议简介 2024年国际光通信与物联网、自动控制和大数据会议(OCITACB2024)的主要目标是促进光通信与物联网、自动管理和大数据领域的研发活动。另一个目标是促进研究人员、开发人员、工…...

q @ k运算及att = (q @ k.transpose(-2, -1))含义
以下代码经常在Transformer的算法中见到:q, k, v qkv[0], qkv[1], qkv[2] # query, key, value tensor q q * self.scale attn (q k.transpose(-2, -1))其中涉及到a b操作和transpose操作 a torch.Tensor([[1,2],[3,4]]) print(a)b torch.Tensor([[0.5,2],[…...

leetcode628-Maximum Product of Three Numbers
题目 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6 分析 这道题目要求数组中三个数组成的最大乘积,由于元素有正数有负数ÿ…...

本地项目提交 Github
工具 GitIdeaGithub 账号 步骤 使用注册好的 Github 账号,登陆 Github; 创建 Repositories (存储库),注意填写图上的红框标注; 创建完成之后,找到存储库的 ssh 地址或 https 地址,这取决于你自己的配置…...

Idea中 maven 下载jar出现证书问题
目录 1: 具体错误: 2: 忽略证书代码: 3: 关闭所有idea, 清除缓存, 在下面添加如上忽略证书代码 4:执行 maven clean 然后刷刷新依赖 完成,撒花!&#x…...

ArcGIS Server 10发布要素服务时遇到的数据库注册问题总结(一)
工作环境: Windows 7 64 位旗舰版 ArcGIS Server 10.1 ArcGIS Desktop 10.1 IIS 7.0 开始的时候以为10.1发布要素服务和10.0一样,需要安装ArcSDE,后来查阅资料发现不需要,数据库直连方式就可以了。 首先我来说一下发布要素服…...