Mac本地部署大模型体验AIGC能力

介绍 随着ChatGPT的横空出世,国内互联网大厂、创业公司纷纷加了AIGC赛道,不断推出各种大模型,而这些大模型由于规模庞大、结构复杂,往往包含了数十亿至数千亿的参数。这些模型在训练阶段,一般需要使用高效能的GPU集群训练数十天时间,在推理阶段,一般也需要高效能的GPU集群才能支撑一定量级的并发请求且实时返回。目前也有不少公司推出了规模相对较小但效果仍有一定优势的大模型,可以在消费级的单卡GPU上进行推理、甚至训练。本文尝试在普通的Macbook Pro上部署大模型开源方案,实现自然语言问答和对话等功能,虽然性能和效果一般,但可以在不借助深度学习专用GPU服务器的前提下,体验一下目前AIGC的能力。 配置 所使用的Macbook Pro配置如下: 机型,Macbook Pro(14英寸,2021年);芯片,Apple M1 Pro;内存,16G;系统,macOS Monterey,12.6.2。 前置条件 首先默认本地已安装macOS的软件包管理工具Homebrew。 Git 安装Git: brew install git 由于使用git命令下载的模型文件较大,因此还需要安装Git Large File Storage: brew install git-lfs Conda Conda是一个依赖和环境管理工具,支持的语言包括Python、R、Ruby、Lua、Scala、Java、JavaScript、C/C++、Fortran等,且目前在Python语言生态中得到广泛的应用,通过其可以创建、管理多个相互独立、隔离的Python环境,并在环境中安装、管理Python依赖,而MiniConda是Conda的免费、最小可用版本。下载并安装MiniConda: wget repo.anaconda.com/miniconda/M… bash ./Miniconda3-latest-MacOSX-arm64.sh -b -p $HOME/miniconda source ~/miniconda/bin/activate ChatGLM-6B 介绍 论文《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》通过图1所示的树状图详细列举了自2018年以来自然语言大模型(LLM)这一领域的发展路线和相应的各大模型,其中一部分是在Transformer出现之前、不基于Transformer的大模型,例如AI2的ELMo,另一大部分是在Transfomer出现之后、基于Transformer的大模型,其又分为三个发展路线: 仅基于Transformer解码器的大模型(图中的蓝色部分),例如,OpenAI的GPT系列、Meta的LLaMa、Google的PaLM等;仅基于Transformer编码器的大模型(图中的粉丝部分),例如,Google的BERT、Meta的RoBERTa等;同时基于Transformer编码器和解码器的大模型(图中的绿色部分),例如,Meta的BART、Google的T5、清华大学的GLM/ChatGLM等。 这里选择ChatGLM-6B进行本地部署,其官网上的介绍如下:ChatGLM-6B是一个开源的、支持中英双语问答的对话语言模型,基于General Language Model(GLM)架构,具有62亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4量化级别下最低只需6GB显存)。ChatGLM-6B使用了和ChatGLM相同的技术,针对中文问答和对话进行了优化。经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62亿参数的ChatGLM-6B已经能生成相当符合人类偏好的回答。而ChatGLM-6B-INT4是ChatGLM-6B量化后的模型权重。具体的,ChatGLM-6B-INT4对ChatGLM-6B中的28个GLM Block进行了INT4量化,没有对Embedding和LM Head进行量化。量化后的模型理论上6G显存(使用CPU即内存)即可推理,具有在嵌入式设备(如树莓派)上运行的可能。 部署 创建并激活环境: conda create --name chatglm python=3.9 conda activate chatglm 下载ChatGLM-6B源码: cd ~/workspace/ git clone github.

Faster-Whisper 实时识别电脑语音转文本

Faster-Whisper 实时识别电脑语音转文本 前言项目搭建环境安装Faster-Whisper下载模型编写测试代码运行测试代码实时转写脚本实时转写WebSocket服务器模式 参考 前言 以前做的智能对话软件接的Baidu API,想换成本地的,就搭一套Faster-Whisper吧。 下面是B站视频实时转写的截图 项目 搭建环境 所需要的CUDANN已经装好了,如果装的是12.2应该是包含cuBLAS了 没装的,可以从下面链接下载装一下,文末的参考视频中也有讲解 https://github.com/Purfview/whisper-standalone-win/releases/tag/libs Ancanda的运行环境去Clone一下之前配好的环境,用之前BertVits的即可 安装Faster-Whisper 输入即可安装 pip install faster-whisper 下载模型 https://huggingface.co/Systran/faster-whisper-large-v3 下载完放到代码旁边就可以了 编写测试代码 # local_files_only=True 表示加载本地模型 # model_size_or_path=path 指定加载模型路径 # device="cuda" 指定使用cuda # compute_type="int8_float16" 量化为8位 # language="zh" 指定音频语言 # vad_filter=True 开启vad # vad_parameters=dict(min_silence_duration_ms=1000) 设置vad参数 from faster_whisper import WhisperModel model_size = "large-v3" path = r"D:\Project\Python_Project\FasterWhisper\large-v3" # Run on GPU with FP16 model = WhisperModel(model_size_or_path=path, device="cuda", local_files_only=True) # or run on GPU with INT8 # model = WhisperModel(model_size, device="

如何在 Mac 上重置网络设置

如何在 Mac 上重置网络设置 Mac 几乎在所有时间都非常可靠,但有时您在连接到互联网时可能会遇到困难或浏览速度缓慢。 互联网可能在您的其他设备上正常工作,这可能很烦人。 通常,问题的原因是什么并不明显,甚至根本不存在。 如果您发现自己处于类似情况,您可能需要重置 Mac 上的网络设置。 您可以重置各种设置,细节可能令人生畏。 不要害怕; 我们将解释您应该尝试解决什么网络问题。 为什么您可能需要重置 Mac 上的网络设置? 通常,您应该对使用 macOS 充满信心。 这是一个可靠的操作系统,在 99% 的时间里都是可靠的。 但是,有时您可能会发现自己无法连接到 Internet 或浏览网站。 Wi-Fi 工作正常,互联网已在您的所有其他设备上正常运行,但由于某种原因,您的 Mac 无法连接。 如果您经常使用 VPN,则您的系统上的网络设置可能会被弄乱。 Internet 设置可能非常敏感,因为即使是最轻微的更改或调整也可能导致与 Internet 的连接中断。 如何在 Mac 上重置 Internet 设置 好消息是,与其他操作系统一样,您可以重置 Mac 上的网络设置。 不幸的是,有一些坏消息。 与 Windows 甚至 iOS 不同,Mac 上没有一键重置网络设置的方法。 您可以使用两种解决方案来重置 Mac 的网络设置。 如果您遇到临时问题,只需重置当前连接的 Wi-Fi 网络即可。 您的 Mac 将忘记当前网络的设置,您可以从头开始连接,就像您第一次设置时一样。 这样做通常会重置 Wi-Fi 网络设置,并且应该可以解决问题。 但是,如果问题仍未解决,您可以使用第二种方法从 Mac 中删除网络配置文件。 这是一种复杂的方法,但它是解决您可能面临的任何顽固网络问题的最终方法。 在继续之前,请确保问题出在 Mac 上,而不是出在 Wi-Fi 连接本身上。 一个简单的方法是检查路由器上的互联网连接指示灯。 您还应该检查互联网在连接到同一 W-Fi 网络的任何其他设备(iPhone、iPad 等)上是否正常工作。

大数据环境搭建(一)-Hive

1 hive介绍 由Facebook开源的,用于解决海量结构化日志的数据统计的项目 本质上是将HQL转化为MapReduce、Tez、Spark等程序 Hive表的数据是HDFS上的目录和文件 Hive元数据 metastore,包含Hive表的数据库、表名、列、分区、表类型、表所在目录等。 根据Hive部署模式(嵌入、本地、远程)的不同,元数据存储的位置也不同,一般是远程方式多用户访问,元数据存储MySQL中。 用户通过客户端(CLI、JDBC/ODBC) 向Hive提交SQL语句执行任务,大致会做如下操作: 提交SQL给Driver将SQL转换为抽象语法树(AST),使用Hive的元数据进行校验将抽象语法树转换为逻辑计划将逻辑计划转换为物理计划执行物理计划,返回结果给客户端 2 CentOS安装MySQL 存储Hive元数据 MySQL部署在bd-centos01节点 添加mysql的yum源 下载mysql源安装包,MySQL官网的YUM源地址(http://dev.mysql.com/downloads/repo/yum/ ) # wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装mysql源 # yum localinstall mysql57-community-release-el7-8.noarch.rpm 检查mysql源是否安装成功 # yum repolist all | grep mysql 安装、启动mysql服务 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # yum -y install mysql-community-server # systemctl start mysqld # systemctl enable mysqld 修改root本地登录密码 获取临时密码 $ grep 'temporary password' /var/log/mysqld.log 2019-06-17T08:07:04.775619Z 1 [Note] A temporary password is generated for root@localhost: 6?qrG;ClOP7A 登录

map|动态规划|单调栈|975:奇偶跳

作者推荐 视频算法专题 本文涉及的基础知识点 单调栈分类、封装和总结 动态规划汇总 题目 给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数。在你跳跃的过程中,第 1、3、5… 次跳跃称为奇数跳跃,而第 2、4、6… 次跳跃称为偶数跳跃。 你可以按以下方式从索引 i 向后跳转到索引 j(其中 i < j): 在进行奇数跳跃时(如,第 1,3,5… 次跳跃),你将会跳到索引 j,使得 A[i] <= A[j],A[j] 是可能的最小值。如果存在多个这样的索引 j,你只能跳到满足要求的最小索引 j 上。 在进行偶数跳跃时(如,第 2,4,6… 次跳跃),你将会跳到索引 j,使得 A[i] >= A[j],A[j] 是可能的最大值。如果存在多个这样的索引 j,你只能跳到满足要求的最小索引 j 上。 (对于某些索引 i,可能无法进行合乎要求的跳跃。) 如果从某一索引开始跳跃一定次数(可能是 0 次或多次),就可以到达数组的末尾(索引 A.length - 1),那么该索引就会被认为是好的起始索引。 返回好的起始索引的数量。 示例 1: 输入:[10,13,12,14,15] 输出:2 解释: 从起始索引 i = 0 出发,我们可以跳到 i = 2,(因为 A[2] 是 A[1],A[2],A[3],A[4] 中大于或等于 A[0] 的最小值),然后我们就无法继续跳下去了。

VLAN基本原理和配置实例,基于端口规划VLAN、mac规划VLAN、IP规划VLAN

配置实例1—基于端口的vlan划分方法 【组网需求】 如图1所示,某企业的交换机连接有很多用户,且相同业务用户通过不同的设备接入企业网络。 为了通信的安全性,同时为了避免广播风暴,企业希望业务相同用户之间可以互相访问,业务不同用户不能直接访问。 可以在交换机上配置基于端口划分VLAN,把业务相同的用户连接的端口划分到同一VLAN。这样属于不同VLAN的用户不能直接进行二层通信,同一VLAN内的用户可以直接互相通信。 图1 基于接口划分VLAN组网图 【配置思路】 采用如下的思路配置VLAN: 创建VLAN并将连接用户的端口加入VLAN,实现不同业务用户之间的二层流量隔离。 配置SwitchA和SwitchB之间的链路类型及通过的VLAN,实现相同业务用户通过SwitchA和SwitchB通信。 【规划VLAN表】 规划VLAN表格很重要!配置之前先列表,列完再配!并且此表可作为项目资料保存。 【操作步骤】 第一步:在SwitchA创建VLAN2和VLAN3,并将连接用户的端口分别加入VLAN。SwitchB配置与SwitchA类似,不再赘述。 <HUAWEI> system-view[HUAWEI] sysname SwitchA[SwitchA] vlan batch 2 3[SwitchA] interface gigabitethernet 0/0/1[SwitchA-GigabitEthernet0/0/1]port link-type access[SwitchA-GigabitEthernet0/0/1]port default vlan 2[SwitchA-GigabitEthernet0/0/1]quit[SwitchA] interface gigabitethernet 0/0/2[SwitchA-GigabitEthernet0/0/2]port link-type access[SwitchA-GigabitEthernet0/0/2]port default vlan 3[SwitchA-GigabitEthernet0/0/2]quit 第二步:配置SwitchA上与SwitchB连接的端口类型及通过的VLAN。SwitchB配置与SwitchA类似,不再赘述。 [SwitchA] interface gigabitethernet 0/0/3[SwitchA-GigabitEthernet0/0/3]port link-type trunk[SwitchA-GigabitEthernet0/0/3]port trunk allow-pass vlan 2 3 第三步:验证配置结果 将PC1和PC2配置在一个网段,比如192.168.100.0/24;将PC3和PC4配置在一个网段,比如192.168.200.0/24。结果验证测试: PC1和PC2能够互相ping通,但是均不能ping通PC3和PC4。 PC3和PC4能够互相ping通,但是均不能ping通PC1和PC2。 配置实例2—基于MAC地址的vlan划分方法 【组网需求】 某个公司的网络中,网络管理者将同一部门的员工划分到同一VLAN。为了提高部门内的信息安全,要求只有本部门员工的PC才可以访问公司网络。 如图2所示,PC1、PC2、PC3为本部门员工的PC,要求这几台PC可以通过SwitchA、Switch访问公司网络,如换成其他PC则不能访问。可以配置基于MAC地址划分VLAN,将本部门员工PC的MAC地址与VLAN绑定,从而实现该需求。 图2 配置基于MAC地址的VLAN划分拓扑图 【配置思路】 采用如下的思路配置基于MAC地址的VLAN划分: 创建VLAN,确定员工所属的VLAN。 配置各以太网接口以正确的方式加入VLAN,实现接口允许VLAN报文通过。 配置PC1、PC2、PC3的MAC地址与VLAN关联,实现根据报文中的源MAC地址确定VLAN。 【规划VLAN表】 规划VLAN表格很重要!配置之前先列表,列完再配!并且此表可作为项目资料保存。 【端口配置】

sql求中位数

sql求解中位数 1. 窗口函数:根据中位数的位置信息进行求解2. 中位数,正排倒排都是中位数 中位数是指有序数列中,位于 中间位置的数的值 若为奇数,则中间数开始位置=结束位置 若为偶数,则中位数结束位置-开始位置=1 即 求解公司员工薪水的中位数 select com_id, floor((count(salary)+1)/2) as start, floor((count(salary)+2)/2) as end from employee group by com_id order by com_id 1. 窗口函数:根据中位数的位置信息进行求解 分奇偶条件判断 select com_id,salary from ( select com_id, salary, row_number() over(partition by com_id order by salary desc) as rnk, count(salary) over(partition by com_id) as num from employee ) t1 where t1.rnk in (floor(num/2)+1, if(mod(num,2)=0,floor(num/2),floor(num/2)+1) order by com_id 中位数条件由排序和总和计算 select com_id, salary from ( select com_id,salary, row_number() over(partition by com_id order by salary Desc) rnk, count(salary) over(partition by com_id) as num from employee ) t1 where abs(t1.

手把手教你开发Python桌面应用-PyQt6图书管理系统-主界面UI设计实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV18t4y1R7Qp/因为主界面是需要菜单和状态栏的,所以我们新建的时候,选Main Window 设计菜单: 菜单三个主菜单,分别是 图书管理,图书类别管理,系统设置。 图书管理下面有 图书添加 图书信息管理 子菜单 图书类别管理下面有 图书类别添加 图书类别信息管理 子菜单 系统设置下面有 修改密码 安全退出 | 关于作者 锋哥招收Python学员啦 子菜单 我们把设计好的“主界面”UI文件,用PyUIC,转换成Python文件。 # Form implementation generated from reading ui file '主界面.ui' # # Created by: PyQt6 UI code generator 6.4.2 # # WARNING: Any manual changes made to this file will be lost when pyuic6 is # run again.

用python编写学生管理系统,python编辑学生信息系统

这篇文章主要介绍了python编写学生信息管理系统的学生信息保存在哪里,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 ✅作者简介:大家好我是Xlong,一枚正在学习COMSOL、Python的工科研究僧 📃个人主页: Xlong的个人博客主页 🔥系列专栏:Python学习 💖如果觉得博主的文章还不错的话,请👍支持一下博主哦🤞 目录 一、需求分析 二、系统分析 三、系统开发必备 四、主函数设计 五、学生信息维护模块设计 六、查询/统计模块设计 七、排序模块设计 八、项目打包 九、代码 一、需求分析 1.学生管理系统应具备的功能: (1)添加学生及成绩信息 (2)将学生信息保存到文件中 (3)修改和删除学生信息 (4)查询学生信息 (5)根据学生成绩进行排序 (6)统计学生的总分 二、系统分析 1.系统功能结构:学生信息管理系统的7大模块 (1)录入学生信息模块 (2)查找学生信息模块 (3)删除学生信息模块 (4)修改学生信息模块 (5)学生成绩排名模块 (6)统计学生总人数模块 (7)显示全部学生信息模块 2.系统业务流程: 三、系统开发必备 1.系统开发环境: (1)操作系统:win10 (2)Python解释器版本:Python3.9.10 (3)开发工具:Pycharm (4)Python内置模块:os,re 四、主函数设计 1.实现主函数 : 五、学生信息维护模块设计 1.实现录入学生信息功能 2.具体实现: (1)save(student)函数,用于将学生信息保存到文件 (2)insert()函数,用于录入学生信息 3.删除学生信息功能:业务流程 4.修改学生信息功能:业务流程 5.查找学生信息功能:业务流程 六、查询/统计模块设计 1.统计学生总人数功能:业务流程 2.显示所有学生信息功能:业务流程 七、排序模块设计 八、项目打包 1.安装第三方模块: (1)在线安装方式;pip install Pylnstaller (2)执行打包操作:C:\Users\jjlu>pyinstaller -F E:\软件相关\Python\vippython\chap16\stusyste.py 最后打包的exe路径在C:\Users\jjlu\dist 九、代码 import os.path #导入os.path模块 def menm(): #菜单 print('==========================学生信息管理系统==========================') print('------------------------------功能菜单-----------------------------') print('\t\t\t 1.

Java——二维码详解

目录 二维码1、概述2、QR Code2.1、特点2.2、基本结构2.3、版本2.4、纠错级别2.5、存储容量2.6、编码过程1)、数据分析2)、数据编码3)、纠错编码生成4)、构造数据信息5)、构造矩阵6)、掩摸7)、格式和版本信息 3、Java应用3.1、生成二维码1)、通用生成方法2)、生成QRCode3)、Hutool工具包生成4)、测试 3.2、识别二维码 二维码 1、概述 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一种编码方式。它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 二维码按原理分类: 堆叠式/行排式:堆叠式/行排式二维条码又称堆积式二维条码或层排式二维条码),其编码原理是建立在一维条码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识读设备与条码印刷与一维条码技术兼容。但由于行数的增加,需要对行进行判定,其译码算法与软件也不完全相同于一维条码。有代表性的行排式二维条码有: Code 16KCode 49PDF417MicroPDF417 矩阵式:矩阵式二维条码(又称棋盘式二维条码)它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识读处理码制。具有代表性的矩阵式二维条码有: Code OneMaxiCodeQR CodeData MatrixHan Xin CodeGrid Matrix 2、QR Code 2.1、特点 存储大容量信息:传统的条形码只能处理20位左右的信息量,与此相比,QR码可处理条形码的几十倍到几百倍的信息量。支持多种数据类型:数字、英文字母、日文字母、汉字、符号、二进制、控制码等。在小空间内打印:QR码使用纵向和横向两个方向处理数据,如果是相同的信息量,QR码所占空间为条形码的十分之一左右。(还支持Micro QR码,可以在更小空间内处理数据。有效表现各种字母:QR码是日本国产的二维码,因此非常适合处理日文字母和汉字。QR码字集规格定义是按照日本标准“JIS第一级和第二级的汉字”制定的,因此在日语处理方面,每一个全角字母和汉字都用13比特的数据处理,效率较高,与其他二维码相比,可以多存储20%以上的信息。对变脏和破损的适应能力强:QR码具备“纠错功能”,即使部分编码变脏或破损,也可以恢复数据。数据恢复以码字为单位(是组成内部数据的单位,在QR码的情况下,每8比特代表1码字),最多可以纠错约30%(根据变脏和破损程度的不同,也存在无法恢复的情况)。可以从任意方向读取:QR码从360°任一方向均可快速读取。其奥秘就在于QR码中的3处定位图案,可以帮助QR码不受背景样式的影响,实现快速稳定的读取。支持数据合并功能:QR码可以将数据分割为多个编码,最多支持16个QR码。使用这一功能,还可以在狭长区域内打印QR码。另外,也可以把多个分割编码合并为单个数据。 2.2、基本结构 QR(Quick-Response) code是被广泛使用的一种二维码,解码速度快。它可以存储多用类型,下图是基本结构: 位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异矫正图形:规格确定,校正图形的数量和位置也就确定了格式信息:表示改二维码的纠错级别,分为L、M、Q、H版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40)数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误) 2.3、版本 QR Code设有1到40的不同版本(种类),每个版本都具备固有的码元结构(码元数)。 “码元结构”是指二维码中的码元数。从版本1(21码元×21码元)开始,在纵向和横向各自以4码元为单位递增,一直到版本40(177码元×177码元)。 2.4、纠错级别 QR码具有“纠错功能”。即使编码变脏或破损,也可自动恢复数据。这一“纠错能力”具备4个级别,用户可根据使用环境选择相应的级别。调高级别,纠错能力也相应提高,但由于数据量会随之增加,编码尺寸也也会变大。 用户应综合考虑使用环境、编码尺寸等因素后选择相应的级别。 在工厂等容易沾染赃物的环境下,可以选择级别Q或H,在不那么脏的环境下,且数据量较多的时候,也可以选择级别L。一般情况下用户大多选择级别M(15%)。 纠错级别容错率L7%M15%Q25%H30% 2.5、存储容量 通过查询QR码的技术文档,可以发现,如果二维码使用最大版本40,也就是177*177的的二维码,最大可存储信息是: 纯数字:最多7089字符纯字母:最多4396字符二进制(8bit):最多2953字节中文汉字(UTF-8):最多984字符中文汉字(GIG5):最多18000字符日文汉字/片假名(Shift JIS):最多1817字符 2.6、编码过程 1)、数据分析 确定编码的字符类型,按相应的字符集转换成符号字符;选择纠错等级,在规格一定的条件下,纠错等级越高其真实数据的容量越小。 2)、数据编码 将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。 模式指示符ECI0111数字0001字母数字00108位字节0100日本汉字1000中文汉字1101结构链接0011FNCI0101(第一位置) 1001(第二位置)终止符(信息结尾)0000 数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H): 1. 分组 -> 012 345 67 2. 转成二进制: 012 -> 0000001100 345 -> 0101011001 67 -> 1000011 3.

【Android】获取屏幕方向的几种方式和最优解

Android获取屏幕方向的几种方式和最优解 1.前言2.正文方式一: 通过系统配置的方式(有缺陷)方式二: 通过显示的旋转角的方式(准确)方式三: 通过宽高的方式(联合方式二判断)方式四: 通过传感器的方式(有局限) 总结 1.前言 2.正文 有时我们需要获取屏幕的方向去加载布局, 但是方向不是一成不变的, 如果没有固定screenOritention, 那么就需要我们要知道当前的方向是什么, 特别是我们对DecorView做操作的时候 下面, 列举三个方式去获取屏幕的方向 方式一: 通过系统配置的方式(有缺陷) //是否为竖屏(系统配置) @JvmStatic fun isOrientationPortrait_ofSysConfig(): Boolean = Resources.getSystem().configuration.orientation == Configuration.Orientation.PORTRAIT 方式二: 通过显示的旋转角的方式(准确) //是否为竖屏(更为准确) @JvmStatic fun isOrientationPortrait_ofDefDisplay(context: Context): Boolean = getDefOrientation(context) == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT @JvmStatic fun getDefOrientation(context: Context): Int = when (getDefRotation(context)) { Surface.ROTATION_90, Surface.ROTATION_270 -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE else -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } //获取旋转 @JvmStatic fun getDefRotation(context: Context): Int = (getSystemService(context, CContext.WINDOW_SERVICE) as WindowManager).defaultDisplay.rotation 方式三: 通过宽高的方式(联合方式二判断) 为什么会通过这种呢, 因为在某些平板设备中, 会带有桌面模式, 例如三星的dex模式, 还有小米的桌面模式, 这时候用户是可以调节窗口的大小的, 但是通过方式二, 还是判断为竖屏, 但是窗口已经被拉伸到类似横屏的样式了

C++ 引用(&)的超详细解析(小白必看系列)

目录 一、前言 二、引用的概念介绍 三、引用的五大特性 💦 引用在定义时必须初始化 💦 一个变量可以有多个引用 💦 一个引用可以继续有引用 💦 引用一旦引用一个实体,再不能引用其他实体 💦 可以对任何类型做引用【变量、指针…】 四、引用的两种使用场景 1、做参数 a.案例一:交换两数 b.案例二:单链表的头结点修改【SLNode*& p】 2、做返回值【⭐⭐⭐】 ① 引入:栈区与静态区的对比 ② 优化:传引用返回【权力反转】 ③ 理解:引用返回的危害 - 造成未定义的行为【薛定谔的猫🐱】 ④ 结语:正确认识【传值返回】与【传引用返回】 五、传值、传引用效率对比 1、函数传参对比 2、返回值的对比 六、常引用 1、权限放大【×】 2、权限保持【✔】 3、权限缩小【✔】 4、拓展 4.1如何给常量取别名 4.2临时变量具有常性(重点) 5、 对权限控制的用处 七、引用与指针的区别总结 八、总结与提炼 九、共勉 一、前言 本次博客来讲解以下C++ 的 引用 是如何运用的。那么问题来了,为什么要用到引用?用C语言中的指针不是挺好的吗 ? 其实,在C语言中的指针会引发很多的难题,比如【两数交换】的时候因为函数内部的概念不会引发外部的变化,使得我们需要传入两个需要交换数的地址,在函数内部进行解引用才可才可以交换二者的值 另一块就是在数据结构中的【单链表】,面对二级指针的恐惧😱是否还伴随在你的身边,因为考虑到要修改单链表的头结点,所以光是传入指针然后用指针来接受还不够,面对普通变量要使用一指针来进行修改,那对于一级指针就需要用到二级指针来进行修改,此时我们就要传入一级指针的地址,才可以在函数内部真正得修改这个单链表的结构 所以,为了解决上述简化上述问题,C++中引入了一大特性 —— 【引用】,在学习了引用之后,就不要担心是否要传入变量的地址还是指针的地址啦,然后我们一起来学习吧! 二、引用的概念介绍 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。【水浒108将各个有称号】 ❓那要怎么去“引用”呢?❓ 此时需要使用到我们在C语言中学习到的一个操作符叫做[&],它是【按位与】,也是【取地址】,但是在C++中呢,它叫做【引用】 ❓ 它的语法是怎样的呢?❓ 类型& 引用变量名(对象名) = 引用实体; int a = 10; int& b = a; // b 是 a 的别名 通过运行我们可以看到变量a和变量b的地址是一样的,这是为什么呢?就是因为b是a的引用,那b就相当于a,所以它们共用一块地址那既然他们公用一块地址的话,内容也是一样的。此时若是我去修改b的值,a是否和跟着改变呢? 可以看到,若是去修改b的话,a也会跟着一起变化 三、引用的五大特性 💦 引用在定义时必须初始化

python tqdm进度条详解

文章目录 1. 语法1.1 tqdm 参数1.2 bar_format案例 2. 基本用法2.1 指定可迭代对象2.2 指定迭代次数2.3 设置显示信息2.3.1 设置进度条前缀(左侧)信息2.3.2 显示进度条后缀(右侧)信息 3. 项目案例参考 tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息。用户只需要封装任意的迭代器,是一个快速、扩展性强的进度条工具库。 1. 语法 1.1 tqdm 参数 tqdm(iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, delay=0, gui=False, **kwargs): iterable: 接收一个可迭代对象。如果iterable为空的话,则手动通过update来更新迭代total: 总的迭代次数,用于计算进度百分比, 默认等于len(iterable)desc: 进度条的显示信息,显示在进度条前面(前缀)postfix: 字典形式信息,例如:loss=0.56, 显示在进度条的末尾(后缀)mininterval:设置进度条最小的更新间隔,单位秒,默认:0.1smaxinterval: 设置进度条最大更新间隔,单位秒,默认:10sbar_format: 设置进度条显示格式,默认为 {desc}: {percentage:3.0f}%|{bar}| {n_fmt}/{total_fmt}ncols: 设置进度条的宽度nrows: 设置进度条的高度unit: 设置进度条的单位,str类型,默认为it 这些参数为相对比较常用的参数,并且全部都是可选参数(optional);在自定义进度条当中比较重要的的一个参数为:bar_format,用于定义进度条的具体格式,所包含的具体数据信息;

选课|基于Springboot的大学生选课系统设计与实现(源码+数据库+文档)

大学生选课系统目录 目录 基于Springboot的大学生选课系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、课程信息管理 3、排课信息管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 👉 毕设答疑 👈 基于Springboot的大学生选课系统设计与实现 一、前言 在计算机上安装大学生选修选课系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,大学生选修选课系统的有效运用可以帮助管理人员准确快速地处理信息。 大学生选修选课系统在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为Idea,选择的数据库工具为Mysql。以此搭建开发环境实现大学生选修选课系统的功能。其中管理员管理用户,新闻公告。 大学生选修选课系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,大学生选修选课系统都可以轻松应对。 关键词:大学生选修选课系统;SpringBoot框架,系统分析,数据库设计 二、系统功能设计 大学生选课系统功能进行细分设计,设计的系统功能结构见下图: 三、系统实现 1、用户信息管理 如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件。 图5.1 用户信息管理页面 2、课程信息管理 如图5.2显示的就是课程信息管理页面,此页面提供给管理员的功能有:查看已发布的课程信息数据,修改课程信息,课程信息作废,即可删除,还进行了对课程信息名称的模糊查询 课程信息信息的类型查询等等一些条件。 图5.2 课程信息管理页面 3、排课信息管理 如图5.3显示的就是排课信息管理页面,此页面提供给管理员的功能有:根据排课信息进行条件查询,还可以对排课信息进行新增、修改、查询操作等等。 图5.3 排课信息管理页面 4、公告信息管理 如图5.4显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行新增、修改、查询操作等等。 图5.4 公告信息管理页面 四、数据库设计 1、实体ER图 本系统的E-R图如下图所示: (1)下图是排课信息实体和其具备的属性。 排课信息实体属性图 (2)下图是学生成绩实体和其具备的属性。 学生成绩实体属性图 (3)下图是选课信息实体和其具备的属性。 选课信息实体属性图 (4)下图是选课限制实体和其具备的属性。 选课限制实体属性图 (5)下图是学生实体和其具备的属性。 学生实体属性图 (6)下图是教师实体和其具备的属性。 教师实体属性图 (7)下图是公告信息实体和其具备的属性。 公告信息实体属性图 (8)下图是课程信息实体和其具备的属性。 课程信息实体属性图 五、核心代码 package com.

宿舍|学生宿舍管理小程序|基于微信小程序的学生宿舍管理系统设计与实现(源码+数据库+文档)

学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)学生信息管理 (2)公告信息管理 (3)宿舍信息管理 (4)晚归登记管理 2、小程序学生模块的实现 (1)学生注册 (2)小程序首页 (3)离宿申请 (4)我的 四、数据库设计 1、实体ER图 ​编辑 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 👉 毕设答疑 👈 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 本文介绍了宿舍管理系统小程序的开发全过程。通过分析宿舍管理系统小程序管理的不足,创建了一个计算机管理宿舍管理系统小程序的方案。文章介绍了宿舍管理系统小程序的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本宿舍管理系统小程序有管理员和学生两个角色。管理员功能有个人中心,公告信息管理,班级管理,学生管理,宿舍信息管理,宿舍安排管理,离宿申请管理,宿舍评分管理,晚归登记管理,报修信息管理,报修处理管理,系统管理等。学生功能有注册登录,查看公告信息,宿舍信息,查看宿舍安排,离宿申请,宿舍评分,晚归登记,报修信息,报修处理,我的收藏等。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得宿舍管理系统小程序管理工作系统化、规范化。 关键词:宿舍管理系统小程序;SSM框架;MYSQL数据库 二、系统功能设计 设计的管理员功能结构图如下图所示: 图4-2管理员功能结构图 设计的学生功能结构图如下图所示: 图4-2学生功能结构图 三、系统实现 1、管理员模块的实现 (1)学生信息管理 管理员可以管理学生信息,可以对通过微信小程序端注册的学生信息修改删除。具体界面的展示如图5.1所示。 图5.1 学生信息管理界面 (2)公告信息管理 管理员可以对公告信息进行添加,修改删除查询操作。具体界面如图5.2所示。 图5.2 公告信息管理界面 (3)宿舍信息管理 系统管理员可以查看宿舍信息,并且可以对宿舍信息进行添加修改删除操作。界面如下图所示: 图5.3 宿舍信息管理界面 (4)晚归登记管理 系统管理员可以查看晚归登记,并且可以对晚归登记的信息进行修改删除操作。界面如下图所示: 图5.4 晚归登记管理界面 2、小程序学生模块的实现 (1)学生注册 小程序学生是需要注册才可以进行登录的。界面如下图所示: 图5.5 注册界面 (2)小程序首页 小程序首页会显示公告信息,宿舍信息还有其他信息,通过下滑就可以获取到。界面如下图所示: 图5.6 小程序首页 (3)离宿申请 学生可以提交离宿申请。界面如下图所示:

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 👉 毕设答疑 👈 基于微信小程序的闲置物品交易平台设计与实现 一、前言 采用校园二手交易小程序可以有效管理,使信息管理能够更加科学和规范。 校园二手交易小程序使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理校园二手交易小程序信息,查看校园二手交易小程序信息,管理校园二手交易小程序。 总之,校园二手交易小程序集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。 关键词:校园二手交易小程序;Java语言;Mysql 二、系统功能设计 校园二手交易小程序系统架构如下: 三、系统实现 1、用户信息管理 如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件。 图5.1 用户信息管理页面 2、商品信息管理 如图5.2显示的就是商品信息管理页面,此页面提供给管理员的功能有:查看已发布的商品信息数据,修改商品信息,商品信息作废,即可删除,还进行了对商品信息名称的模糊查询 商品信息信息的类型查询等等一些条件。 图5.2 商品信息管理页面 3、公告信息管理 如图5.3显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行条件查询,还可以对公告信息进行新增、修改、查询操作等等。 图5.3 公告信息管理页面 4、论坛信息管理 如图5.4显示的就是论坛信息管理页面,此页面提供给管理员的功能有:根据论坛信息进行新增、修改、查询操作等等。 图5.4 论坛信息管理页面 四、数据库设计 1、实体ER图 (1)下图是用户实体和其具备的属性。 用户实体属性图 (2)下图是公告信息实体和其具备的属性。 公告信息实体属性图 (3)下图是购物车实体和其具备的属性。 购物车实体属性图 (4)下图是论坛实体和其具备的属性。 论坛实体属性图 (5)下图是商品实体和其具备的属性。 商品实体属性图 (6)下图是用户咨询实体和其具备的属性。 用户咨询实体属性图 (7)下图是商家实体和其具备的属性。 商家实体属性图 (8)下图是商品收藏实体和其具备的属性。 商品收藏实体属性图 (9)下图是商品评价实体和其具备的属性。 商品评价实体属性图 (10)下图是商品订单实体和其具备的属性。

AI数字人训练数据集汇总

唇读(Lip Reading),也称视觉语音识别(Visual Speech Recognition),通过说话者口 型变化信息推断其所说的内容,旨在利用视觉信道信息补充听觉信道信息,在现实生活中有重要应用。例如,应用在医疗领域辅助听力受损的病人提高沟通交流能力,在军事领域提高情报获取和处理能力,在多媒体领域提高人机交互的多样性和鲁棒性等。随着深度学习技术的发展,以及数据集规模的不断完善,基于深度学习的框架方法已经逐渐取代传统方法,成为唇读的主流方法。 1 LRW数据集 1.1 数据集介绍 LRW 数据集是由牛津大学视觉几何团队于2016 年提出。因深度学习的兴起,大规模数据集的需求越来越大,LRW 数据集应运而生。不同于以往数据集,LRW 数据集数据来源于 BBC 广播电视节目而不是由志愿者或实验人员录制,使得该数据集数据量有了质的飞跃。数据集选择了 500最常出现的单词,截取说话人说这些单词的镜头,因此说话人超过 1000 个,话语实例超过 550000万个,一定程度上满足了深度学习对于数据量的需求。 该数据集由多达1000个包含500个不同单词的话语组成,由数百个不同的说话者说出。所有视频长度为29帧(1.16秒),单词出现在视频的中间。元数据中给出了单词duration,从中可以确定开始和结束帧。数据集统计信息如下表所示。 包含视频和元数据的软件包可供非商业学术研究使用。您需要与BBC研发部门签署一份数据共享协议才能访问。下载协议副本请到BBC野外唇读和野外数据集页唇读句子。一旦批准,您将被提供一个密码,然后包可以下载下面。 数据集官网地址:The Oxford-BBC Lip Reading in the Wild (LRW) Dataset 1.2 获取方式 根据网站https://www.bbc.co.uk/rd/projects/lip-reading-datasets提示,获取word版数据集申请文件,在文件最后签署使用协议,使用邮箱发送到该网站指定邮箱,等待一两天即可收到带有用户名和密码的邮件。点击上图中“Download”链接,使用用户名密码登陆,即可下载数据集。 The package including the videos and the metadata is available for non-commercial, academic research. You will need to sign a Data Sharing agreement with BBC Research & Development before getting access. To download a copy of the agreement please go to the BBC Lip Reading in the Wild and Lip Reading Sentences in the Wild Datasets page.

stable diffusion微调总结

stable diffusion微调总结 stable diffusion模型类别:SDSD2SDXLSDXL LCM(潜在一致性模型)SDXL DistilledSDXL Turbo 安装accelerate通过pip安装配置 accelerate config查看配置 安装diffusers数据处理BLIP模型优化 微调方法Dreambooth微调准备数据:模型训练脚本:模型推理:模型转换脚本: Dream+LORA微调模型训练脚本:模型推理脚本: Full FineTune数据格式:训练脚本:推理脚本 LORA微调数据格式:训练脚本:推理脚本: stable diffusion 模型类别: SD SD是一个基于latent的扩散模型,它在UNet中引入text condition来实现基于文本生成图像。SD的核心来源于Latent Diffusion这个工作,常规的扩散模型是基于pixel的生成模型,而Latent Diffusion是基于latent的生成模型,它先采用一个autoencoder将图像压缩到latent空间,然后用扩散模型来生成图像的latents,最后送入autoencoder的decoder模块就可以得到生成的图像。 SD2 SD 2.0相比SD 1.x版本的主要变动在于模型结构和训练数据两个部分。 首先是模型结构方面,SD 1.x版本的text encoder采用的是OpenAI的CLIP ViT-L/14模型,其模型参数量为123.65M;而SD 2.0采用了更大的text encoder:基于OpenCLIP在laion-2b数据集上训练的CLIP ViT-H/14模型,其参数量为354.03M,相比原来的text encoder模型大了约3倍。 SDXL Stable Diffusion XL (SDXL) 是一种强大的文本到图像生成模型,它以三种关键方式迭代以前的 Stable Diffusion 模型: UNet 增大了 3 倍,SDXL 将第二个文本编码器 (OpenCLIP ViT-bigG/14) 与原始文本编码器相结合,显着增加了参数数量引入大小和裁剪调节,以防止训练数据被丢弃,并更好地控制生成图像的裁剪方式引入两阶段模型过程;基本模型(也可以作为独立模型运行)生成图像作为细化器模型的输入,该**模型添加了额外的高质量细节 SDXL LCM(潜在一致性模型) SDXL 潜在一致性模型 (LCM) 如“潜在一致性模型:使用几步推理合成高分辨率图像”中提出的那样,通过减少所需的步骤数彻底改变了图像生成过程。它将原始 SDXL 模型提炼成一个需要更少步骤(4 到 8 个而不是 25 到 50 个步骤)来生成图像的版本。该模型对于需要在不影响质量的情况下快速生成图像的应用特别有利。值得一提的是,它比原来的 SDXL 小 50%,快 60%。

Java ByteBuffer使用全解析

文章目录 ByteBuffer 总体介绍使用示例putgetpositionflipflip方法源码 limit QAallocate 静态方法或 wrap 静态方法有什么区别?怎么理解limit? ByteBuffer 总体介绍 ByteBuffer 是 Java NIO(New I/O)库中的一个类,用于处理字节数据。它提供了一种灵活且高效的方式来操作字节缓冲区,适用于处理大量的字节数据,例如文件 I/O、网络通信等。 ByteBuffer 的一些重要特性和用法: 容量(Capacity): ByteBuffer 有一个固定的容量,一旦分配,就不能更改。可以通过 allocate 静态方法或 wrap 静态方法来创建一个 ByteBuffer。 ByteBuffer buffer = ByteBuffer.allocate(1024); // 分配 1024 字节的缓冲区 位置(Position)和限制(Limit): ByteBuffer 有一个位置和限制的概念,它们用于跟踪读写的位置。position 表示下一个要读写的位置,而 limit 表示当前位置可读写的最大位置。 读写操作: ByteBuffer 提供了一系列读写方法,包括 get、put、read、write 等。这些方法允许你从缓冲区读取数据或将数据写入缓冲区。 // 写入数据到缓冲区 buffer.put((byte) 10); // 从缓冲区读取数据 byte value = buffer.get(); 翻转(Flip): 为了从写模式切换到读模式,或者从读模式切换到写模式,可以使用 flip 方法。这个方法将 limit 设置为当前位置,然后将 position 设置为 0,准备读取数据或写入数据。 buffer.flip(); // 切换到读模式 清空(Clear): clear 方法用于清空缓冲区,将 position 设置为 0,limit 设置为容量,准备写入数据。