设计模式-抽象工厂模式

定义理解 抽象工厂模式是一种为访问一系列相互关联的产品对象提供统一接口,而无需指定它们具体的类。抽象工厂模式可以创建多个不同类型的产品,这些产品构成一个产品族。 简单来说,当抽象工厂模式如果只有一个产品体系的话就会退化为工厂方法模式 特点: 产品族:一系列相互关联或相互依赖的产品对象。多个抽象产品:每个抽象产品都可以有多个具体实现。接口数量:理论上可以有无限个接口,每个接口对应一个产品族。开闭原则:在新增产品族时符合“开闭原则”,但在新增单一产品时可能不符合。 图解 代码示例 // 抽象产品:日志接口 interface Logger { void log(String message); } // 具体产品:Log4j 日志实现 class Log4jLogger implements Logger { @Override public void log(String message) { System.out.println("Log4j: " + message); } } // 具体产品:Logback 日志实现 class LogbackLogger implements Logger { @Override public void log(String message) { System.out.println("Logback: " + message); } } // 抽象产品:不同日志级别的接口 interface LogLevel { void log(Logger logger, String message); } // 具体产品:DEBUG 日志级别实现 class DebugLogLevel implements LogLevel { @Override public void log(Logger logger, String message) { logger.

AI与Python共舞:如何利用深度学习优化推荐系统?

AI与Python共舞:如何利用深度学习优化推荐系统? 当你在浏览新闻、电影或是购物平台时,那些仿佛读懂你心思的个性化推荐背后,正是AI技术与Python语言的精妙协作。今天,我们将通过一个实际案例,探索如何利用深度学习技术和Python实现一个简化的电影推荐系统,并巧妙地融入开源项目 PlugLink,让数据流通与系统扩展变得更加便捷。 引言 推荐系统的初衷简单而直接:在浩瀚的数据海洋中,为每位用户提供与其兴趣高度匹配的内容。从最初的协同过滤到现在的深度学习模型,推荐算法不断进化,旨在提升用户体验和商业价值。Python,凭借其强大的库支持和易读性,成为了实现这些复杂算法的理想选择。 案例背景 假设我们正在为一家在线视频平台设计推荐系统,目标是根据用户的历史观影记录,预测并推荐他们可能感兴趣的电影。我们的数据集包含用户ID、观看过的电影ID及评分等信息。在此基础上,我们将使用Python构建一个基于神经网络的协同过滤模型。 技术栈概览 Python库:Pandas(数据处理)、TensorFlow(深度学习框架)、NumPy(科学计算)、Scikit-learn(机器学习工具包)。数据准备:清洗、转换数据格式,构建用户-电影评分矩阵。模型构建:采用TensorFlow实现多层感知器(MLP)模型,对用户和电影特征进行嵌入,然后通过交互层预测评分。评估与优化:利用交叉验证和损失函数最小化策略进行模型调优。 核心代码片段 下面是一个简化的代码示例,展示了如何使用TensorFlow创建电影推荐系统的基本架构。请注意,这仅是整个项目的一部分,实际应用中还需包括数据预处理和模型评估环节。 import tensorflow as tf from tensorflow.keras.layers import Embedding, Flatten, Dense from tensorflow.keras.models import Model from tensorflow.keras.regularizers import l2 # 假设 num_users 和 num_movies 是用户和电影的数量 embedding_dim = 10 # 嵌入维度 # 用户和电影的嵌入层 user_input = tf.keras.Input(shape=(1,), name='user_input') movie_input = tf.keras.Input(shape=(1,), name='movie_input') user_embedding = Embedding(num_users, embedding_dim, embeddings_regularizer=l2(1e-5))(user_input) movie_embedding = Embedding(num_movies, embedding_dim, embeddings_regularizer=l2(1e-5))(movie_input) # 将嵌入后的向量展平以便通过全连接层 user_flattened = Flatten()(user_embedding) movie_flattened = Flatten()(movie_embedding) # 通过交互层预测评分 concatenation = tf.

pdf拆分,pdf拆分在线使用,pdf拆分多个pdf

在数字化的时代,pdf文件已经成为我们日常办公、学习不可或缺的文档格式。然而,有时候我们可能需要对一个大的pdf文件进行拆分,以方便管理和分享。那么,如何将一个pdf文件拆分成多个pdf呢?本文将为你推荐一种好用的拆分pdf的方法,让你轻松应对拆分pdf的需求。 pdf拆分方法:使用 “轻云处理pdf官网” 打开 “轻云处理pdf官网” 的网站,我们上传pdf。 pdf上传完后,我们可以选择是一页才分成一个pdf,还是按照页码范围拆分,这个都可以自己选择,选择好后,点击开始拆分。然后我们等待一会,当进度条到达100%后就表示拆分好了。 以上就是我分享的拆分pdf的方法了,轻云pdf处理官网最大的优势就是操作简单,使用方便,需要拆分pdf的朋友可以试一下,希望今天的分享可以帮助大家,让大家能轻松的解决拆分pdf的问题。

探索高效开发神器:Blackbox AI(免费编程助手)

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 🤖 想要代码生成?👌 💬 需要和AI聊天解决难题?👌 🔍 想快速找到你需要的代码片段?👌 🌈 亲们,发现了一个反应特别迅速的AI工具——黑盒AI 💡Blackbox AI黑盒AI! 🔮 这里面藏着一个和Copilot一样强大的智能助手,但你猜怎么着?它💯%免费哦! 💖 无需注册,一点即入,仿佛打开了未来世界的大门。✨ 这个神秘的黑盒,就像是我们的小助手,随时随地准备为我们答疑解惑,提供灵感。 在这个快节奏的时代,技术和创新的步伐如闪电般迅速,开发者们每天都在追赶新的潮流。无论你是编程新手还是经验丰富的老手,编写高效、优质的代码都是一项挑战。对于那些想要在日常编码中提高效率并保持最新技术的人来说,传统的开发工具似乎总是差了那么一点。而现在,AI 正在悄然改变这一切。🧑‍💻💡 欢迎来体验 Blackbox AI 🌈 免费注册,立刻体验!🆓 点击链接 https://www.blackbox.ai/ 🔎 代码搜索也是杠杠的,想找什么代码,一搜就有,效率翻倍,IDE插件也有哦! 进入 Blackbox AI,一个致力于为开发者提供智能支持的平台。它不仅仅是一个工具,而是一个全面的解决方案,旨在简化你的编码过程,提高你的生产力。从代码生成到实时知识,再到错误优化,Blackbox AI 就像你的私人助理,让你在编程的旅途中如虎添翼。🚀 Blackbox AI 的概述 Blackbox AI 是一个融合了先进人工智能技术的开发平台,为开发者提供了一系列强大的功能。无论你需要编写新的代码片段、修复现有代码中的错误,还是保持对最新技术的了解,Blackbox AI 都可以满足你的需求。 它支持多种编程语言,像 Python、JavaScript、Go 等等,几乎覆盖了所有常见的开发场景。你可以在任何时候与 Blackbox AI 进行互动,通过简单的自然语言输入,它会为你生成高质量的代码建议,提供问题解决方案,甚至帮助你生成项目文档。就像你身边的一个超级开发伙伴,随时随地为你提供支持。💻✨ 这篇博客的目的就是为你揭开 Blackbox AI 的神秘面纱,深入探索它的每一个功能,展示它如何帮助开发者在日常工作中提升效率和质量。我们将通过具体的案例和使用场景,展示 Blackbox AI 如何在不同的开发任务中发挥作用。 无论你是想要提升自己的编程技能,还是寻找一种更高效的开发方式,Blackbox AI 都可以成为你不可或缺的工具。通过这篇博客,希望你能更好地了解 Blackbox AI 的强大功能,并激励你在未来的开发过程中尝试和使用它。🌟 准备好了吗?让我们一起踏上这段探索 Blackbox AI 的旅程,发现它如何帮助我们在代码的世界里更加高效和成功! 快速导航 代码生成:编写代码如此简单🚀代码聊天:实时互动,解决你的编码难题 💬实时知识:保持技术领先,获取最新资讯 📚代码补全:智能提示,提高开发效率 🔍GitHub 集成:高效协作,优化团队开发 🛠️ 错误优化:自动检测,智能修复 🛠️AI 生成的 README 文件:自动化文档生成 📄版本控制:使用 Blackbox Diff 进行版本管理 🔄如何开始使用 Blackbox AI Blackbox AI 的核心功能: 还在为编写复杂的代码而头疼吗?有了 Blackbox AI 的代码生成功能,编写代码就像变魔法一样简单!你只需输入一个简单的需求描述,AI 就能立刻生成高质量的代码片段,支持多种流行编程语言,比如 Python、JavaScript、TypeScript、Go 和 Ruby。

【地理库 Turf.js】

非常全面的地理库 , 这里枚举一些比较常用,重点的功能, 重点功能 提供地理相关的类:包括点,线,面等类。 测量功能:点到线段的距离,点和线的关系等。 判断功能: 点是否在线上,是否在多边形内,线是否交叉等。 坐标系转换:UTM 和 WGS84转换,角度弧度转换等。 结语 当然你可以自己实现一个, 重复造轮子 好坏明显,还需斟酌。 但是 可能有潜在问题 ,所以有时选一个合适的三方库 也是个不错的选择。 https://turfjs.fenxianglu.cn/category/#npm

Java中的switch语句详解

Java中的switch语句详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来详细探讨一下Java中的switch语句。switch语句是Java中的一种多分支选择结构,用于简化大量的if-else代码,使代码更加清晰和易读。 一、switch语句的基本语法 switch语句通过比较表达式的值与各个case标签的值来决定程序的执行路径。其基本语法如下: switch (expression) { case value1: // 语句 break; case value2: // 语句 break; // 可以有任意数量的case语句 default: // 默认语句 } expression:一个返回整数、枚举、字符或字符串的表达式。case value:表示可能的值。break:用于跳出switch语句。default:可选,用于处理所有未匹配的情况。 二、switch语句的使用 下面是一些具体的例子来说明如何在Java中使用switch语句。 1. 使用整数 package cn.juwatech; public class SwitchExample { public static void main(String[] args) { int day = 3; String dayName; switch (day) { case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; case 3: dayName = "Wednesday"; break; case 4: dayName = "

如何写好Stable Diffusion室内设计提示词

通过Stable Diffusion ,设计师能够快速生成多种风格和主题的设计方案,节省时间和精力,满足不同客户的需求。尽管运行这些模型需要强大的计算资源,但它们为室内设计领域带来了显著的效率提升和创意表现。 我参考一些现有关于Stable Diffusion在室内和家具设计中的提示词工程案例,并且对室内空间和家具设计提示词的组成分析,得到一些编写室内设计和家具设计的提示词经验,根据这种细化分类的方式,可以提高我们写提示词的效率。 一般地,我们可以按以下类别去编写室内设计和家具设计的提示词。 家具类型/Furniture Types 提示词中存在的一个最基本元素就是家具类型。这些家具从常见的如沙发、扶手椅、桌子、床和沙发,到更具创意和常规的家居类型,如豪华实木宠物狗的床。家具类型提示词是最基本的。 材料/Materials 家具的材料是另一个关键元素。从皮革、瓷器、石头、木材和玻璃(leather,porcelain, stone, wood, and glass),到更奢华的如金子、大理石、黄铜(gold,marble, brass,),每种材料都为生成的图像的整体纹理、触感和美感起关键作用。 设计风格/Design Styles 设计风格是另一个至关重要的元素,可以从极简和现代到更具体和奢华的范围。包括‘舒适’,‘繁复’,‘北欧’,‘极简’,‘野蛮’,‘现代’,‘中世纪现代’,‘海滩’,‘现代乡村’,‘斯堪的纳维亚’,‘巴洛克’,‘豪华’,‘当代’,‘温馨和暖’和‘柔和色彩’( ‘comfortable’, ‘intricate’, ‘Nordic’,‘minimalist’, ‘brutalist’, ‘modern’, ‘mid-century modern’, ‘beach’, ‘modern rustic’, ‘Scandinavian’, ‘baroque’, ‘luxury’, ‘contemporary’, ‘cozy and warm’, and ‘soft color’)。设计风格形成了室内空间的整体视觉感受。 设计师/艺术家/Designers/Artists 提示词中还可以指定特定的设计师或艺术家,生成他们的独特风格。包括世界著名的设计师和艺术家名字,如毕加索,韦恩·巴洛,凯利·韦斯特勒,马塞尔·布劳尔,印度·马哈达维,安藤忠雄,弗兰克·劳埃德·赖特,帕斯夸·奥尔特加和古驰(Picasso, Wayne Barlow, Kelly Wearstler, Marcel Breuer, India Mahdavi, Tadao Ando, Frank Lloyd Wright, Pascua Ortega, and Gucci)。 渲染引擎/Rendering Engine 某些提示词会特意提到渲染引擎,如‘Octane Render’,‘Unreal Engine’,‘Nvidia Raytracing’,或‘Unreal Engine 5’。这些都是强大渲染工具,帮助创建高度逼真的图像,每种渲染器都有其独特的能力和优点。 详情和特性/Details and Features 这些提示包含了许多细节和特性,包括灯光类型、形状灵感和增强现实元素。像‘霓虹灯角落’,‘高度详细’,‘形状启发’,和‘增强现实’(‘neon light corners’, ‘highly detailed’, ‘shape inspired’, and ‘augmented reality’ )等细节都对图像的复杂构成做出了贡献。

快速排序(C/C++实现)—— 简单易懂系列

前言 排序作用的重要性是不言而喻的,例如成绩的排名、预约时间的先后顺序、不同路程的消耗与利润等。快排可以实现O(n * logn)的时间复杂度,O(logn)的空间复杂度来实现排序【虽然结果是不稳定的】。 算法思想 快速排序实际上是采用分治的思想,每次迭代在当前区间中选取一个数作为哨兵,通过一系列的交换操作将当前区间分为左区间和右区间【使得左区间的值全部小于等于哨兵,右区间的值全部大于等于哨兵】。然后再对左区间、右区间执行这种划分区间的策略操作,当区间的长度为1时停止。等到所有分治的区间长度都为1时,此时的原数组就已经是一个排好序的数组了。 具体步骤 假设数组名称为q,具体步骤如下: 如果区间长度小于等于1了,则结束循环。否则执行下一步。先从本区间中取出第一个数作为哨兵mid,即令mid等于本区间最左端元素的值。执行下一步。令i等于本区间最左端元素在原数组中的下标,j等于本区间最右端元素在原数组中的下标。执行下一步。判断 i < j是否成立,如果满足,则执行下一步。否则跳转到第9点。判断q[j] >= mid && i < j是否成立,如果满足,则j向左移动一位【j--】,再次执行本轮【即本次步骤是循环】。否则执行下一步。令q[i] = q[j]。执行下一步。【目的:进行元素移动,保证右区间的值都是大于等于哨兵的值,此时j右侧的值都不小于哨兵的值,且一定会有下一步来使得q[j]的值大于等于哨兵的值】判断q[i] <= mid && i < j是否成立,如果满足,则i向右移动一位【i++】,再次执行本轮【即本次步骤是循环】。否则执行下一步令q[j] = q[i]。跳转到第4点。【目的:进行元素移动,保证左区间的值都是小于等于哨兵的值,此时i左侧的值都不大于哨兵的值,且一定会有下一步来使得q[i]的值小于等于哨兵的值】【第4点~第8点是一轮大循环】令q[i] = mid。执行下一步。【循环结束后,i的位置即是哨兵的位置,此时令q[i] = mid即可。这一步操作保证了第6、8点担忧的地方,即这里一定可以使得最终的q[i]、q[j]等于哨兵的值。】划分两个区间【本区间左端点,i - 1】,【i + 1, 本区间右端点】,将这两个区间再次执行第一步的操作。【整个步骤是快排的分治操作的循环】 图表演示 假设我们拥有一个数组:a,长度为:5,内容为:3 1 2 4 5,需要对其进行从小到大排序。则流程为: 第一次递归: 此时数组为:3 1 2 4 5 基础数据: l = 0:本轮区间左边界在数组中的下标r = 4:本轮区间右边界在数组中的下标mid = a[l] = 3:哨兵的值i = l = 0:左指针j = r = 4:右指针 初始化数据: 31245i、lj、r哨兵【3】 此时q[j] = 5 > 哨兵,满足右指针移动条件,右指针左移。 31245i、ljr哨兵【3】 此时q[j] = 4 < 哨兵,满足右指针移动条件,右指针左移。 31245i、ljr哨兵【3】 此时q[j] = 2 > 哨兵,不满足右指针移动条件,进行元素移动【保证j右侧的值都大于哨兵的值】,接下来进行左指针移动 21245i、ljr哨兵【3】 此时q[l]的值不见了,但是!!!我们的哨兵存的就是q[l]的值,在最后q[l]的值会回到数组中,故一个元素的值都不会少。

阿里云服务器数据库迁云: 数据从传统到云端的安全之旅(WordPress个人博客实战教学)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一、 开始实战1.2创建实验资源1.3重置云服务器ECS的登录密码(请记住密码)1.4 设置安全组端口1.5 重置云数据库RDS的高权限账号的密码(请记住密码) 二、 配置MySQL三、 WordPress网站安装3.1 执行如下命令,复制配置文件。3.2 执行如下命令,重启Nginx和PHP服务。 四、 迁移数据库4.1 验证RDS数据 结尾 一、 开始实战 1.2创建实验资源 要等一会。 创建成功,如图所示 1.3重置云服务器ECS的登录密码(请记住密码) 请记住密码,后面有用到。有个小秘诀:重置的密码都用同一个,就不会乱了 在云产品资源列表的ECS云服务器区域,单击管理。 在实例详情页签的基本信息区域,单击重置密码。 在重置实例密码对话框中,设置新密码和确认密码,重置密码的方式选择在线重置密码,配置SSH密码登录策略选择开启,单击确认修改。 请记住密码 请记住密码 请记住密码 返回如下结果,表示ECS实例root用户的登录密码重置成功。 1.4 设置安全组端口 在云产品资源列表的安全组区域,单击管理。 在访问规则区域的入方向中,添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。 重要 添加端口时,授权对象填:0.0.0.0/0 添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。 添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。 添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。 添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。 添加SSH(22) 、HTTP(80) 、HTTPS(443) 和MySQL(3306) 端口。

【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)

Stable Diffusion WebUI 的绘画插件 Controlnet 最近更新了 V1.1 版本,发布了 14 个优化模型,并新增了多个预处理器,让它的功能比之前更加好用了,最近几天又连续更新了 3 个新 Reference 预处理器,可以直接根据图像生产风格类似的变体。 使用 Reference only 预处理器生成一张图片的多个变体 因为 Controlnet 在更新时涉及到多个网页里的不同的资源,这里帮大家梳理一下更新 V1.1 所需要的各种资源,以及如何有效的安装 Controlnet 插件。如果你还没有安装 Stable Diffusion WebUI,可以阅读下面这篇文章,了解安装 WebUI 需要的电脑配置,以及下载相关的一键安装包。 一、安装 Controlnet 插件 Controlnet 插件安装网址:https://github.com/Mikubill/sd-webui-controlnet ①打开 WebUI,点击“扩展”选项卡,选择“从网址安装”,复制(https://github.com/Mikubill/sd-webui-controlnet.git ),粘贴在第一行的“拓展的 git 仓库网址”中。点击“安装”按钮,等待十几秒后,在下方看到一行小字“Installed into stable-diffusion-webui\extensions\sd-webui-controlnet. Use Installed tab to restart”,表示安装成功。 (从网址安装可以保证插件的更新能在 WebUI 中自动显示,如果是下载压缩包文件放进根目录,就无法自动更新) ②点击左侧的“已安装”选项卡,单击“检查更新”,等待进度条完成;然后单击“应用并重新启动 UI”;最后完全关闭 WebUI 程序,重新启动进入(也可以重启电脑),我们就可以在 WebUI 主界面中下方看到 Controlnet 的选项。 ③如果安装后 Controlnet 界面只有一个选项卡,你可以点击“设置”界面,找到 Controlnet,将 Multi Controlnet 中设置你想要的值,点击保存设置并重启 WebUI。 ④此时我们可以打开 WebUI 所在的文件夹,进入 Controlnet 的根目录,具体路径为 C:\Stable Diffusion\novelai-webui-aki-v3\extensions\sd-webui-controlnet,打开 models 文件夹,里面有 38 个尾缀为.

基于SpringBoot+Vue+Spark+大数据的在线广告推荐系统设计和实现(源码+LW+部署讲解)

博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅ Java项目精品实战案例《100套》 Java微信小程序项目实战《100套》 Python项目实战《100套》 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人​ 系统介绍: 在线广告推荐系统是一个利用用户行为数据和机器学习算法,为用户提供个性化广告内容的智能平台。该系统采用java技术和MySQL数据库技术以及springboot框架进行开发。通过分析用户的历史浏览记录、搜索习惯和消费模式等数据,构建起用户兴趣模型,并据此推送最相关的广告,以提高点击率和转化率。它通常包括数据采集、存储、处理和分析等多个模块,能够实时响应市场动态和用户需求变化。除了核心的推荐功能外,系统还提供诸如用户管理、内容审核、数据分析报告和实时监控等辅助工具,帮助管理员优化广告投放策略。对于用户而言,他们可以享受到定制化的广告内容,减少信息过载,同时在个人中心内管理自己的偏好设置。在线广告推荐系统不仅提升了用户体验,也显著增加了广告主的投资回报率。 程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。 ​ 程序操作流程图 首先前端通过Vue和axios发送HTTP请求到后端的登录接口。在后端接收登录请求的Controller会使用`@RequestParam Map<String, Object> params`来接收前端传递的用户参数,用户名和密码。然后后端根据接收到的参数创建一个查询条件封装对象MyBatis的EntityWrapper用于构建查询条件。接着在业务层,调用相应的service方法来查询数据库中是否存在匹配的用户信息。这个查询方法Login()会将前端传递的对象参数传递到后台的DAO层,进行数据库的交互操作。如果存在符合条件的用户,则会返回相关的用户信息。最后在后端控制器中将查询结果封装成响应体,通过`return R.ok().put("data", userService.selecView(ew))`将用户信息返回给前端。前端收到响应后,可以通过调用Vue、ElementUI等组件来渲染登录结果,例如显示用户信息或者跳转到相应的页面。 详细视频演示 请联系我获取更详细的演示视频 功能截图: 在系统前台首页,调用`$route(newValue)`方法监听路由变化,根据当前的路由地址来确定活动菜单的索引,并且根据路由的哈希部分(即URL的`#`后面的部分)来判断是否需要滚动页面到顶部或者某个特定元素的位置。如果不是首页,会将页面滚动到指定元素处,否则滚动到页面顶部。另外通过`headportrait()`方法用于更新组件渲染点前用户头像。在用户登录后,后端返回了新的用户信息,需要及时更新页面上的用户头像信息。 论文参考: 1 绪 论 1.1研究背景与意义 1.2系统研究现状 1.3 论文主要工作内容 2 系统关键技术 2.1 java简介 2.2 MySQL数据库 2.3 B/S结构 2.4 SpringBoot框架 2.5 VUE框架 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1.4 法律可行性 3.2 系统性能分析 3.3 系统功能分析 3.4 系统流程分析 3.4.1 数据开发流程 3.4.2 用户登录流程 3.

MySQL 5.7 与 MySQL 8.0:关键差异与升级考量

MySQL作为全球最受欢迎的开源关系型数据库管理系统之一,其每个新版本的发布都带来了性能、功能和安全性的显著提升。MySQL 5.7和MySQL 8.0是两个重要的里程碑版本,它们在多个方面都有显著的差异。本文将深入探讨这两个版本之间的关键差异,并提供升级到MySQL 8.0的考量因素,以帮助数据库管理员和开发人员做出明智的决策。 1. 性能提升 MySQL 8.0在性能方面进行了多项优化,显著提升了数据库的整体性能。 1.1 查询优化器 MySQL 8.0引入了更先进的查询优化器,能够生成更高效的查询计划。新的优化器使用基于成本的优化策略,考虑了更多的统计信息,从而提高了查询性能。 1.2 索引优化 MySQL 8.0支持更高效的索引类型,如Descending Index和 Invisible Index。Descending Index允许在创建索引时指定列的排序方向,而Invisible Index允许暂时隐藏索引,不影响查询性能。 1.3 并发控制 MySQL 8.0改进了并发控制机制,减少了锁竞争,提高了并发性能。新的并发控制机制使用更细粒度的锁,减少了锁等待时间,提升了系统的吞吐量。 2. 新功能与改进 MySQL 8.0引入了多项新功能和改进,增强了数据库的功能性和灵活性。 2.1 JSON支持 MySQL 8.0增强了JSON数据类型的支持,提供了更多的JSON函数和操作符。新的JSON函数和操作符使得处理JSON数据更加高效和灵活。 2.2 窗口函数 MySQL 8.0引入了窗口函数(Window Functions),允许在查询中进行复杂的分析和计算。窗口函数可以在不使用子查询的情况下进行分组和排序,提高了查询的灵活性和性能。 2.3 角色管理 MySQL 8.0引入了角色管理功能,允许创建和管理角色,并将角色分配给用户。角色管理简化了权限管理,提高了安全性和可维护性。 3. 安全性增强 MySQL 8.0在安全性方面进行了多项增强,提升了数据库的安全性。 3.1 密码策略 MySQL 8.0引入了更严格的密码策略,包括密码过期、密码重用限制和密码复杂度要求。新的密码策略提高了账户的安全性,减少了密码被破解的风险。 3.2 数据字典 MySQL 8.0引入了数据字典(Data Dictionary),将元数据存储在事务性表中。数据字典提供了更可靠的元数据管理,减少了元数据损坏的风险。 3.3 加密功能 MySQL 8.0增强了加密功能,支持透明数据加密(TDE)和传输层安全(TLS)加密。新的加密功能提高了数据的安全性,保护了数据的机密性和完整性。 4. 兼容性与迁移 MySQL 8.0在兼容性和迁移方面进行了多项改进,简化了升级过程。 4.1 语法兼容性 MySQL 8.0在语法上与MySQL 5.7保持了较高的兼容性,减少了升级过程中的语法调整。大多数MySQL 5.7的SQL语句可以直接在MySQL 8.

Stable Diffusion【应用篇】【艺术写真】:AI写真看过来,使用IP-Adapter-FaceId插件实现AI写真

目前换脸插件有很多,比较典型的有Roop,ReActor,IP-Adapter,InstantID,今天我们来看看使用IP-Adapter-FaceId插件实现AI写真的制作方法。 一. IP-Adapter新模型的下载 插件下载地址(文末扫码也可获取) HuggingFace:https://huggingface.co/h94/IP-Adapter-FaceID/tree/main 用于换脸的IP-Adapter-Faceid的型号有很多种,用于AI写真我们推荐使用ip-adapter-faceid-plusv2系列,该系列分为SD15和SDXL两类,分别针对SD1.5基础大模型和SDXL基础大模型。 文件存放目录 将以.bin结尾的模型文件存放在WebUI根目录\extensions\sd-webui-controlnet\models目录下。 将以.safetensors结尾的Lora文件存放在WebUI根目录\models\lora目录下 这里我们以ip-adapter-faceid-plusv2_sdxl模型以及ip-adapter-faceid-plusv2_sdxl_lora为例来讲解。 二. IP-Adapter插件换脸的制作方法 【第一步】:大模型的选择 我们使用万享XL_超写实摄影V8.2大模型。 模型下载地址(文末扫码也可获取) LiblibAI: https://www.liblib.art/modelinfo/b27d7c6bd9184acfbfefd2a89909c6d3 【第二步】:提示词的编写 正向提示词: Prompt:high quality,masterpiece,rich details,realistic photography,8k,high-definition image quality, 1 girl,solo,brown eyes,brown hair,long hair,dress,earrings,white dress,fields,flowers,fields of flowers,looking at the audience, outdoors,pink flowers,lora:ip-adapter-faceid-plusv2\_sdxl\_lora:1 ******提示词:******高品质,杰作,细节丰富,摄影逼真,8k,高清画质,一个女孩,独唱,棕色眼睛,棕色头发,长发,衣服,耳环,白色连衣裙,田野,鲜花,鲜花的田野,看着观众,户外,粉色的花朵, 为了提高生成图像与指定人物相似度,加入ip-adapter-faceid-plusv2_sdxl_lora模型。关于lora模型的权重,这里我们设置为1。 反向提示词: easynegative,ng_deepnegative_v1_75t,(worst quality:2),(low quality:2),(normal quality:2),lowres,bad anatomy,bad hands,normal quality,((monochrome)),((grayscale)),((watermark)), 文生图相关参数设置 采样器:Euler a 采样迭代步数:50 图片宽高:1024*1024。 提示词引导系数(CFG):3 【第三步】ControlNet插件IP-Adapter模型设置 这里我们使用幂姐姐的照片生成AI艺术写真照片。 相关参数设置如下: 控制类型:选择"IP-Adapter" 预处理器:ip-adapter_face_id_plus 模型:ip-adapter-faceid-plusv2_sdxl 控制权重:1 引导介入时机:0 引导终止时机:0.9 【第四步】图片的生成 点击【生成】按钮,我们来看一下最终生成的图片效果。 三. 改变人物服装背景 提示词1:圣诞写真 **Prompt:**high quality,masterpiece,rich details,realistic photography,8k,high-definition image quality,

大创项目推荐 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 关键代码 4 最后 1 简介 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉opencv的手势检测 手势识别 算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 2 传统机器视觉的手势检测 普通机器视觉手势检测的基本流程如下: 其中轮廓的提取,多边形拟合曲线的求法,凸包集和凹陷集的求法都是采用opencv中自带的函数。手势数字的识别是利用凸包点以及凹陷点和手部中心点的几何关系,简单的做了下逻辑判别了(可以肯定的是这种方法很烂),具体的做法是先在手部定位出2个中心点坐标,这2个中心点坐标之间的距离阈值由程序设定,其中一个中心点就是利用OpenNI跟踪得到的手部位置。有了这2个中心点的坐标,在程序中就可以分别计算出在这2个中心点坐标上的凸凹点的个数。当然了,这样做的前提是用人在做手势表示数字的同时应该是将手指的方向朝上(因为没有像机器学习那样通过样本来训练,所以使用时条件要苛刻很多)。利用上面求出的4种点的个数(另外程序中还设置了2个辅助计算点的个数,具体见代码部分)和简单的逻辑判断就可以识别出数字0~5了。其它的数字可以依照具体的逻辑去设计(还可以设计出多位数字的识别),只是数字越多设计起来越复杂,因为要考虑到它们之间的干扰性,且这种不通用的设计方法也没有太多的实际意义。 2.1 轮廓检测法 使用 void convexityDefects(InputArray contour, InputArray convexhull, OutputArray convexityDefects) 方法 该函数的作用是对输入的轮廓contour,凸包集合来检测其轮廓的凸型缺陷,一个凸型缺陷结构体包括4个元素,缺陷起点坐标,缺陷终点坐标,缺陷中离凸包线距离最远的点的坐标,以及此时最远的距离。参数3即其输出的凸型缺陷结构体向量。 其凸型缺陷的示意图如下所示: 第1个参数虽然写的是contour,字面意思是轮廓,但是本人实验过很多次,发现如果该参数为目标通过轮廓检测得到的原始轮廓的话,则程序运行到onvexityDefects()函数时会报内存错误。因此本程序中采用的不是物体原始的轮廓,而是经过多项式曲线拟合后的轮廓,即多项式曲线,这样程序就会顺利地运行得很好。另外由于在手势识别过程中可能某一帧检测出来的轮廓非常小(由于某种原因),以致于少到只有1个点,这时候如果程序运行到onvexityDefects()函数时就会报如下的错误: ​ int Mat::checkVector(int _elemChannels, int _depth, bool _requireContinuous) const { return (depth() == _depth || _depth <= 0) && (isContinuous() || !

发现传统之美,AI赋能非遗传承

大家好,今天想在本片博文分享下关于皮影这项非物质文化遗产,以及如何简单借助人工智能AI赋能皮影的奇妙可能。 皮影戏的魅力 在喧嚣的现代生活中,我们不应该忘记那些传统的手工艺和技艺,它们是中华文化的瑰宝,它们是中华文化的瑰宝。从精湛的刺绣到传世的皮影戏,每一项非物质文化遗产都承载着历史的沉淀和智慧的传承。皮影戏,作为中国古老的民间艺术,以其独特的魅力吸引着无数观众。它以光影为媒介,将雕刻精美的皮影形象投射于幕布之上,演绎出一段段生动的故事。其丰富的表现力、深邃的文化内涵以及独特的艺术形式,共同构建了皮影戏无穷的魅力,让人叹为观止。 AI赋能皮影 现代科技为皮影戏的传承带来了新的可能性。通过人工智能,我们能够更好地记录和保留皮影戏传统工艺的技术细节,同时为新一代传承人提供学习工具。这样,传统与现代的融合成为可能,为这项非物质文化遗产注入新的生命力。AI不仅能够辅助传统技艺的学习,还可以在创新中发挥作用。通过机器学习等,我们可以分析皮影戏中的创新元素,为设计师提供灵感,创造出更具时代感的作品,使非遗在当今社会中更具吸引力。用AI生成的皮影戏,传统工艺的演示视频,可以让跟多人参与到非遗的传承和推广中来。 AI赋能皮影戏具体怎么实现的呢?简单介绍下。 人体骨骼关键点检测:利用AI技术,如PaddleHub提供的人体骨骼关键点检测库,对视频或图片中的人物进行姿态识别,提取出人体的关键骨骼点。 皮影素材映射:将识别出的人体姿态映射到皮影素材上,通过算法调整皮影素材的位置和形态,使其与人体姿态保持一致。 动态生成皮影戏:对视频中的每一帧进行上述处理,生成连续的皮影戏动作,从而实现AI皮影戏的动态表演。 交互与控制:进一步结合语音识别、手势识别等技术,实现观众与AI皮影戏的交互,提升观赏体验。 这些操作共同展现了AI技术在传承和发展皮影戏这一非物质文化遗产中的巨大潜力。 皮影戏是我们文化的瑰宝,而AI则为其注入了新的活力。让我们一起走进这项非物质文化遗产的世界,通过现代科技的力量,将非遗的美丽传承给更多的人。让传统文化在时代中绽放不禁的光芒。 AI赋能皮影戏

【MySQL】用户管理

用户管理 1.用户信息2.创建用户3.删除用户4.修改用户密码5.数据库的权限5.1给用户授权5.2回收权限 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 目前为止我们使用mysql都是用的root账号,但是不建议直接使用root进行mysql的操作。我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。 1.用户信息 MySQL有自己的用户管理,用户管理也是表结构形式进行管理的。 MySQL对用户做管理,其实是一定要记录下来那些用户是允许使用MySQL的,所以MySQLl的信息也是在MySQLl内特定的表中被保存的。这张表就是在系统数据库mysql的user表中。 可以简单看一下, User是用户名, Host代表允许这个用户从那台机器上登录mysql ,localhost代表只允许这个root从本地直接登录mysql。 后面一大堆都是权限信息,后面说。 authentication_string是当前用户的密码 password_expried是密码是否过期 password_last_changed是密码更改时间 这里我们主要查看下面三列 select user,host,authentication_string from user; mysql和linux一样可以允许创建多个用户,这些用户都是普通用户,你可以给他们开账号,所谓在mysql内部给用户开账号,就是把用户的用户名,允许从哪里登录,以及用户的密码信息放在mysql中的user表里。然后就有了这个用户了。 如果我们现在想在mysql新建一个用户,有一个特点简单粗暴的方式,也不用后面学的专门的创建用户的sql语句。可以用inset 向这个user里面插入也是可以的。但是这太麻烦了。其实未来学的创建用户,删除用户,修改用户其实说到底就是在user表里做增加删除修改! 2.创建用户 语法: create user '用户名'@'登陆主机/ip' identified by '密码'; 用户名 ,自己随意设置 登陆主机/ip,不能少,如果是本机登录是 localhost/127.0.0.1,远程登录等会说 然后后面要设置密码,后面密码会被hash加密保存到user表中。 这里新建用户的行为其实就是向mysql的user表里插入一条信息 然后就可以进行本地登录了,不过最好在登录之前进行一下内存的刷新。刚才不是创建用户,这个用户信息是在内存当中的。我们对这个信息进行一下刷新,保证它是有效的就可以了。 flush privileges; 现在普通用户就可以登录了,输入的是刚才设置的密码。 备注:可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出如下报错: – ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 可以参考这篇文章ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 查看密码设置相关要求

Python酷库之旅-第三方库openpyxl(07)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式 1-2、功能丰富 1-3、易于使用 1-4、与Excel兼容性 1-5、性能良好 1-6、社区支持 1-7、跨平台 2、缺点 2-1、不支持旧版格式 2-2、某些特性支持有限 2-3、内存占用 2-4、文档和示例可能不足 2-5.、依赖关系 2-6、学习曲线 三、openpyxl库的用途 1、读取Excel文件 2、写入Excel文件 3、修改Excel文件 4、自动化 5、与Excel交互 6、数据迁移和转换 7、创建模板化的报告 四、如何学好openpyxl库? 1、获取openpyxl库的属性和方法 2、获取openpyxl库的帮助信息 3、用法精讲 3-31、openpyxl.worksheet.worksheet.Worksheet.set_printer_settings函数 3-31-1、语法 3-31-2、参数 3-31-3、功能 3-31-4、返回值 3-31-5、说明 3-31-6、用法 3-32、openpyxl.worksheet.worksheet.Worksheet.unmerge_cells函数 3-32-1、语法 3-32-2、参数 3-32-3、功能 3-32-4、返回值 3-32-5、说明 3-32-6、用法 3-33、openpyxl.cell.cell.Cell.check_error函数 3-33-1、语法 3-33-2、参数 3-33-3、功能 3-33-4、返回值 3-33-5、说明 3-33-6、用法 3-34、openpyxl.cell.cell.Cell.check_string函数 3-34-1、语法 3-34-2、参数 3-34-3、功能 3-34-4、返回值 3-34-5、说明

【Mac】Auto Mouse Click for Mac(高效、稳定的鼠标连点器软件)软件介绍

软件介绍 Auto Mouse Click for Mac 是一款专为 macOS 平台设计的自动鼠标点击软件,它可以帮助用户自动化重复的鼠标点击操作,从而提高工作效率。以下是这款软件的主要特点和功能: 1.自动化点击操作:Auto Mouse Click 允许用户录制和回放鼠标点击动作。用户可以录制鼠标点击、移动和滚动等操作,并将它们保存为脚本进行反复执行。 2.定时任务:用户可以设置定时任务来执行自动化的鼠标点击操作。这对于需要定期执行、精确时间控制的操作特别有用,例如定时打开应用程序、点击特定位置等。 3.多种触发方式:除了定时任务外,Auto Mouse Click 还支持根据像素颜色、键盘按键触发、鼠标移动等方式来触发自动化点击。这样可以根据不同的场景选择最合适的触发方式。 4.易于使用的界面:软件提供了直观的用户界面,使用户可以轻松录制、编辑和管理鼠标点击脚本,无需编程经验即可使用。 5.灵活的定制选项:用户可以调整点击间隔、重复次数、点击位置等参数,以满足不同的自动化需求。 6.多场景应用:适用于各种需要大量重复鼠标点击操作的场景,比如自动化测试、模拟用户操作、游戏自动化等。 总体来说,Auto Mouse Click for Mac 是一款功能强大的自动化工具,可以帮助 macOS 用户减少重复性操作,提高工作效率和准确性。 同类型软件 除了 Auto Mouse Click for Mac 外,还有一些类似的自动化鼠标点击软件适用于 macOS 平台。以下是几款常见的软件: Automator Automator 是 macOS 自带的一款自动化工具,虽然它主要用于创建工作流程和自动化任务,但也可以通过记录鼠标点击和键盘操作来实现简单的自动化。它适合基本的自动化需求和系统级任务。 Mac Auto Mouse Click 这是另一款专为 macOS 设计的自动鼠标点击工具。它提供了类似于 Auto Mouse Click for Mac 的功能,包括录制和回放鼠标点击、定时任务、多种触发方式等。用户可以根据自己的需求选择适合的软件。 Keyboard Maestro 虽然 Keyboard Maestro 主要是键盘驱动的自动化工具,但它也可以进行鼠标点击的自动化。它支持广泛的触发方式和自定义动作,适用于复杂的自动化任务和工作流程。 iMouseTrick iMouseTrick 是一款简单易用的鼠标点击自动化工具,专门为 macOS 开发。它提供了录制和播放鼠标点击操作的功能,适合于简单的自动化需求和重复性任务。 这些软件在功能和适用场景上可能会有所不同,用户可以根据自己的具体需求选择合适的工具来实现鼠标点击的自动化。

音视频开发32 FFmpeg 编码- 视频编码 h264 参数相关

1. ffmpeg -h 这个命令总不会忘记,用这个先将ffmpeg所有的help信息都list出来 C:\Users\Administrator>ffmpeg -h ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12.2.0 (Rev10, Built by MSYS2 project) configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint libavutil 58.

Linux-笔记 高级I/O操作

前言 I/O(Input/Output,输入/输出)是计算机系统中的一个重要组成部分,它是指计算机与 外部世界之间的信息交流过程。I/O 操作是计算机系统中的一种基本操作,用于向外部设备(如 硬盘、键盘、鼠标、网络等)读取数据或向外部设备写入数据。 常见的I/O操作方式: 1)同步 I/O(Synchronous I/O):在进行 I/O 操作时,程序会一直等待操作完成后再 继续执行后面的代码。如果 I/O 操作阻塞,程序会一直等待,直到操作完成或超时。 2)异步 I/O(Asynchronous I/O):在进行 I/O 操作时,程序会立即返回,而不必等待 操作完成。当操作完成后,操作系统会通知程序。这种方式可以允许程序在等待 I/O 操作完 成的同时执行其他代码。 3)阻塞 I/O(Blocking I/O):在进行 I/O 操作时,程序会一直等待操作完成后再继续执行后面的代码。如果 I/O 操作阻塞,程序会一直等待,直到操作完成或超时。阻塞 I/O 是 同步 I/O 的一种。 4)非阻塞 I/O(Non-blocking I/O):在进行 I/O 操作时,程序会立即返回,而不必等待操作完成。如果 I/O 操作无法立即完成,程序也会立即返回,但是会周期性地检查操作是否完成。非阻塞 I/O 是同步 I/O 的一种。 5)I/O 多路复用(I/O Multiplexing):是一种同时监视多个 I/O 事件的机制,通常使用select、poll、epoll 等系统调用。程序通过这些调用告知操作系统它要监视哪些 I/O 事件,当有 I/O 事件发生时,操作系统通知程序,并返回发生事件的描述符。I/O 多路复用通常是异步 I/O 模型的一部分。 阻塞I/O与非阻塞I/O 阻塞和非阻塞的主要区别在于程序在进行 I/O 操作时是否会被阻塞。在实际应用中,阻塞 I/O 的使用场景较为有限,因为阻塞 I/O 会导致程序性能下降,会造成资源浪费。非阻塞 I/O 则可以较好地解决这个问题,但需要程序周期性地检查 I/O 操作是否完成,增加了编程难度。