当前位置: 首页 > news >正文

【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理

【公众号开发】(4)

在这里插入图片描述

文章目录

  • 【公众号开发】(4)
    • 1. 图像文字识别功能
      • 1.1 百度AI图像文字识别接口申请
      • 1.2 查看文档学习如何调用百度AI
      • 1.3 程序开发
        • 1.3.1 导入依赖:
        • 1.3.2 公众号发来post请求格式
        • 1.3.3 对image类型的消息做好分支处理
        • 1.3.4 访问百度AI的必要参数配置
        • 1.3.5 访问百度AI(根据文档写就完事了)
        • 1.3.6 封装回复消息
        • 1.3.7 测试
    • 2. 模板消息
      • 2.1 设置所属的行业
      • 2.2 获取设置的行业消息
      • 2.3 发送模板消息
        • 2.3.1 获得模板id
        • 2.3.2 访问接口发送模板消息
    • 3. 素材管理
      • 3.1 上传文件资源方法
      • 3.2 发送临时素材
      • 3.3 获得临时素材
    • 4. 二维码的生成与获取信息
      • 4.1 生成带参数二维码
      • 4.2 获取二维码
      • 4.3 分支处理扫描二维码触发的事件

【公众号开发】(4)

1. 图像文字识别功能

我们的需求就是

实现读取图片文本信息

在这里插入图片描述

实现原理:

在这里插入图片描述

发送图片给公众号,开发者服务器会收到这个消息:

A

包含图片url:

1.1 百度AI图像文字识别接口申请

我们当然很难自己去实现一个图片识别功能,我们要借助强大的已有接口:

在这里插入图片描述

我们现在要实现的功能是图片的文字识别功能,首先我们在百度搜索一下“百度AI”:

在这里插入图片描述

百度AI开放平台给我们提供了很多人工智能相关的接口让我们去直接使用

在这里插入图片描述

登录一下(顺便实名认证):

在这里插入图片描述

找到满足我们需求,我们要用到的接口:

在这里插入图片描述

在这里插入图片描述

点击技术文档可以进行学习:文字识别OCR (baidu.com)

点击立即使用/在控制台前往文字识别:

在这里插入图片描述

创建一个应用:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们不经常使用,所以就开通一下,来练习一下,按量计费,购买的话可以访问很久很多次,但是我觉得没啥必要

  • 百度智能云-管理中心 (baidu.com)

在这里插入图片描述

在列表中查看信息,这些信息等一下我们的程序里是要用到的,有了这些信息,百度才允许你访问接口

在这里插入图片描述

1.2 查看文档学习如何调用百度AI

进入文档:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

快速入门:

  • 快速入门 - 文字识别OCR (baidu.com)

在里面我们可以查看如何实现这个功能

1.3 程序开发

1.3.1 导入依赖:

Maven Central: Search (sonatype.com)

在这里插入图片描述

<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.16</version>
</dependency>

tips:版本冲突运行不了的话,可以这样排除

在这里插入图片描述

<exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId></exclusion>
</exclusions>
1.3.2 公众号发来post请求格式

基础消息能力 / 接收普通消息 (qq.com)

在这里插入图片描述

在这里插入图片描述

1.3.3 对image类型的消息做好分支处理

在这里插入图片描述

1.3.4 访问百度AI的必要参数配置

在这里插入图片描述

public class ImageUtils {//设置APPID/AK/SKpublic static final String APP_ID = "你的 App ID";public static final String API_KEY = "你的 Api Key";public static final String SECRET_KEY = "你的 Secret Key";
}
1.3.5 访问百度AI(根据文档写就完事了)

在这里插入图片描述

响应json的格式:

在这里插入图片描述

把word_result读出来就行了(其他两个一个记录id,一个结果数)

public static String getImageText(String picUrl) {// 初始化一个AipOcrAipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);System.out.println(picUrl);// 调用接口JSONObject jsonObject = client.webImageUrl(picUrl, new HashMap<String, String>());// 解析json字符串Map<String, Object> map = JsonUtils.jsonToMap(jsonObject.toString());// 获取单词集List<Map<String, Object>> wordsResult = (List<Map<String, Object>>) map.get("words_result");if(wordsResult == null || wordsResult.size() == 0) {return "";}List<String> words = new ArrayList<>();for(Map<String, Object> m : wordsResult) {words.add((String) m.get("words"));}System.out.println(words);// 返回识别结果return words.toString();
}
1.3.6 封装回复消息
private String handleImage(Map<String, Object> map) {String picUrl = (String) map.get("PicUrl");String content = ImageUtils.getImageText(picUrl);map.put("Content", content);TextMessage textMessage = TextMessage.getReplyTextMessage(map);String message = XmlUtils.objectToXml(textMessage);return message;
}
1.3.7 测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

成功啦😊~

补充,之前我们做的上拉菜单,点击里面的发送图片按钮,发送的并不是事件类型的消息:

  1. 点击它弹出子菜单:选择拍照或者相册选择
  2. 反正选择图片确认后,都相当于发送了图片类型的消息

这个只是示例,其他的自行研究,举一反三~

试玩了之后,把那个服务终止了,少花点钱🤭

2. 模板消息

在我们可以获得Access Token后就可以使用模板消息了

文档:基础消息能力 / 模板消息接口 (qq.com)

这个是公众号主动的向用户发送重要的消息

例如这种,就是模板消息

在这里插入图片描述

使用规则也要注意:

在这里插入图片描述

2.1 设置所属的行业

我们要想实现这个模板消息的发送的话,就要先设置所属的行业

在这里插入图片描述

参数:

  • id1与id2,可以理解为主业和副业

在这里插入图片描述

行业编码可以在文档里查找:

在这里插入图片描述

public class TextModelMessage {public static void setTradeInfo() {String url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());}});Map<String, Object> param = new HashMap<String, Object>() {{this.put("industry_id1", "1");this.put("industry_id2", "2");}};System.out.println(HttpUtils.doPost(url, JsonUtils.objectToJson(param)));}public static void main(String[] args) {setTradeInfo();}}

结果:

在这里插入图片描述

🆗啦😊~

2.2 获取设置的行业消息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

公众号开发这么久了,套路都差不多~

public static String getTradeInfo() {String url = "https://api.weixin.qq.com/cgi-bin/template/get_industry" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());}});return HttpUtils.doGet(url, null);
}public static void main(String[] args) {//setTradeInfo();System.out.println(getTradeInfo());
}

信息获取正确:

在这里插入图片描述

2.3 发送模板消息

2.3.1 获得模板id

首先我们要先获取模板id

在我们的测试公众平台界面,有这个模板消息接口:

在这里插入图片描述

新增测试模板:

在这里插入图片描述

模板消息运营规范:

基础消息能力 / 模板消息运营规范 (qq.com)

目前允许发的模板消息示例:

[微信模板消息测试 - 漂泊雪狼 - 博客园 (cnblogs.com)](https://www.cnblogs.com/weiweictgu/p/4933186.html#:~:text=目前允许发的模板消息示例 1.1资料变更类通知示例如下: 1.2政务服务类通知示例如下:,1.3物品 (含虚拟类)收取类通知示例如下: 1.4消费交易类通知示例如下:)

以一个很常见的为例子:

在这里插入图片描述

填入模板信息:

在这里插入图片描述

复制模板ID

在这里插入图片描述

这里测试公众号阶段,直接这样获取模板id(此模板也只在此阶段能用),之后需要通过请求的方式获取,再回头来学!

  • 基础消息能力 / 模板消息接口 (qq.com)

包括获取模板列表,删除模板,等等这些动作感兴趣的同学可以去研究一下,之后需要用到回头再学!

2.3.2 访问接口发送模板消息

在这里插入图片描述

data属性的值对象的各个 属性就是刚才的模板内容中的xxx.DATA

在这里插入图片描述

更详细的json字符串示例:

在这里插入图片描述

可见,first和remark也在其中,并且属性值不仅有value(String)这个属性,还有color(String),也就是表现颜色(#六位十六进制的格式)

json字符串各个参数的介绍:

在这里插入图片描述

openid就是微信用户的id,这个用户肯定做了些事情我们才发模板消息给他,我们肯定有记录他的标识,也就是openid~

在这里插入图片描述

  • 也就是这里的“微信号”
  • 之后我们可以从数据库或者其他手段,也能获取到openid的,那个时候再说

小程序相关的和防止重入的这里不考虑(小程序不填了的话,其appid虽然必填,也因为miniprogram不填而不需要填写,pagepath也不需要)

返回码,简单了解即可

在这里插入图片描述

public static void sendModelMessage() {String url = "https://api.weixin.qq.com/cgi-bin/message/template/send" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());}});String data ="{" +"    \"first\":{\n" +"         \"value\":\"你好,你申请参加活动报名成功。\",\n" +"         \"color\":\"#101010\"" +"     },\n" +"     \"keyword1\":{\n" +"         \"value\":\"张三\",\n" +"         \"color\":\"#101010\"" +"     },\n" +"     \"keyword2\":{\n" +"         \"value\":\"13333333333\"\n" +"     },\n" +"     \"keyword3\": {\n" +"         \"value\":\"2023-10-21 17:43\"\n" +"     },\n" +"     \"keyword4\": {\n" +"         \"value\":\"你选择的是足球队员\"\n" +"     },\n" +"     \"remark\": {\n" +"         \"value\":\"感谢您 的使用,祝你生活愉快!\",\n" +"         \"color\":\"#FF0000\"" +"     }" +"}";Map<String, Object> param = new HashMap<String, Object>() {{this.put("touser", "otfI46nw4BoHVoOjivoWmEamB494");this.put("template_id", "jDrr4sGQBOgI7uTliXajxbaTTXMxhf2RzTXlwq3DBWY");this.put("url", "https://blog.csdn.net/Carefree_State?type=blog");this.put("data", JsonUtils.jsonToMap(data));}};// 发送请求System.out.println(HttpUtils.doPost(url, JsonUtils.objectToJson(param)));
}public static void main(String[] args) {//setTradeInfo();//System.out.println(getTradeInfo());sendModelMessage();
}

效果:

在这里插入图片描述

为什么不显示首行内容、尾部/备注内容、颜色?

  • 参考公告:关于规范公众号模板消息的再次公告 (qq.com)

在这里插入图片描述

可能是很多违规案例的出现导致的(诈骗、营销、骚扰用户等等不良行为)

点此查看违规案例

这里的data,我直接偷懒给个写死了的~

  • 之后我们只需要自己将我们的模板,封装成对象,再动态地获取和设置数据进去就行了

3. 素材管理

素材管理 / 新增临时素材 (qq.com)

有时候,我们需要将一些素材上传到公众号内进行缓存,所以我们需要学习一些素材管理的内容

在这里插入图片描述

差不多就这样吧,之后就是向公众号服务器发送请求

3.1 上传文件资源方法

这个方法比较万能,可以解决上传资源的各个文件问题,但是文件要满足限制!

//httpClient发送携带⽂件的post请求
public static String doPostByFile(String url, Map<String,Object> map, String localFile, String fileParamName) {HttpPost httpPost = new HttpPost(url);CloseableHttpClient httpClient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {// 把⽂件转换成流对象FileBodyFileBody bin = new FileBody(new File(localFile));MultipartEntityBuilder builder =MultipartEntityBuilder.create();builder.addPart(fileParamName, bin);if (map != null) {for (String key : map.keySet()) {builder.addPart(key,new StringBody((String) map.get(key),ContentType.create("text/plain", Consts.UTF_8)));}}HttpEntity reqEntity = builder.build();httpPost.setEntity(reqEntity);// 发起请求 并返回请求的响应response = httpClient.execute(httpPost, HttpClientContext.create());resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null)response.close();} catch (IOException e) {e.printStackTrace();}}return resultString;
}

需要的依赖:

<!--httpClient需要的依赖-->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version>
</dependency>
<!--//httpclient缓存-->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient-cache</artifactId><version>4.5</version>
</dependency>
<!--//http的mime类型都在这⾥⾯-->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.3.2</version>
</dependency>

3.2 发送临时素材

这里以发送图片为例,其他参考文档!

在这里插入图片描述

在这里插入图片描述

public static String sendImage() {// 构造urlString url = "https://api.weixin.qq.com/cgi-bin/media/upload" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());this.put("type", "image");}});// 发起请求String response = HttpUtils.doPostByFile(url, null, "D:/马图/瞪眼.jpg", "");System.out.println(response);return (String) JsonUtils.jsonToMap(response).get("media_id");
}

测试:

public static void main(String[] args) {System.out.println(sendImage());
}

成功了😊:

在这里插入图片描述

  • 这个就是临时的media_id(所有资源统一的字段)

3.3 获得临时素材

这里以发送图片为例,其他参考文档!

在这里插入图片描述

通过身份标识和media_id确认对于的临时资源

在这里插入图片描述
在这里插入图片描述

对于非视频消息素材,返回的就是素材的二进制序列!

  • 在浏览器访问的话,会触发文件下载
public static String getImage(String mediaId) {// 构造urlString url = "https://api.weixin.qq.com/cgi-bin/media/get" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());this.put("media_id", mediaId);}});System.out.println(url);return HttpUtils.doGet(url, null);
}

测试:

public static void main(String[] args) {String ret = getImage(sendImage());
}

成功啦😊:

在这里插入图片描述

访问一下这个链接:

  • 触发下载了

在这里插入图片描述

打开后,就是刚才我们发的文件:

在这里插入图片描述

4. 二维码的生成与获取信息

账号管理 / 生成带参数的二维码 (qq.com)

这里生成带参数的二维码,扫二维码后是跳转到公众号,是公众号的宣传手段之一

带的参数有这些:

在这里插入图片描述

二维码分为四类:

  1. QR_SCENE为 临时的整型参数值
  2. QR_STR_SCENE为 临时的字符串参数值
  3. QR_LIMIT_SCENE为 永久的整型参数值
  4. QR_LIMIT_STR_SCENE为 永久的字符串参数值

在这里插入图片描述

4.1 生成带参数二维码

在这里插入图片描述

在这里插入图片描述

反正就字面意思,我这里就不封装对象,直接写死一个data:

    public static String createTicket() {String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("access_token", TokenUtils.getToken());}});//生成临时二维码的数据
//        Map<String, Object> param = new HashMap<String, Object>(){{
//
//        }};String data = "{\"expire_seconds\": 3600, \"action_name\": \"QR_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"test\"}}";// 发送请求String ret = HttpUtils.doPost(url, data);System.out.println(ret);return (String) JsonUtils.jsonToMap(ret).get("ticket");}

测试:

public static void main(String[] args) {System.out.println(createTicket());
}

在这里插入图片描述

4.2 获取二维码

这里就不需要access_token了,毕竟这个二维码要拿去宣传的

public static String getTicket() {String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode" + HttpUtils.getQueryString(new HashMap<String, Object>() {{this.put("ticket", createTicket());}});//System.out.println(HttpUtils.doGet(url, null));return url;
}

测试:

public static void main(String[] args) {System.out.println(getTicket());
}

在这里插入图片描述

在这里插入图片描述

访问成功!

4.3 分支处理扫描二维码触发的事件

在这里插入图片描述

基础消息能力 / 接收事件推送 (qq.com)

如果未关注,扫码后进入公众号简介界面(可选择关注),关注后触发的事件类型为:

在这里插入图片描述

如果已关注,扫码后就直接触发的事件类型为:

在这里插入图片描述

对于EventKey,就是二维码所带参数相关,可进一步做分支,这里不做演示!

编写代码处理事件:

在这里插入图片描述

private String handleEvent(Map<String, Object> map) {String message = "";// 获取event值String event = (String) map.get("Event");// 事件分支switch (event) {case "CLICK":message = EventUtils.handleClick(map);break;case "VIEW":System.out.println("view");break;case "SCAN":message = EventUtils.handleScan(map);break;case "subscribe":message = EventUtils.handleSubscribe(map);break;default:break;}return message;
}

handleScan方法:

public static String handleScan(Map<String, Object> map) {map.put("Content", "欢迎光临! " + map.get("FromUserName"));TextMessage textMessage = TextMessage.getReplyTextMessage(map);return XmlUtils.objectToXml(textMessage);
}

handleSubscribe方法:

public static String handleSubscribe(Map<String, Object> map) {map.put("Content", "感谢关注!  " + map.get("FromUserName"));TextMessage textMessage = TextMessage.getReplyTextMessage(map);return XmlUtils.objectToXml(textMessage);
}

测试:

关注状态下扫码:

在这里插入图片描述

非关注状态下扫码:

在这里插入图片描述


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码:wx-demo · 游离态/马拉圈2023年10月 - 码云 - 开源中国 (gitee.com)


相关文章:

【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理

【公众号开发】&#xff08;4&#xff09; 文章目录 【公众号开发】&#xff08;4&#xff09;1. 图像文字识别功能1.1 百度AI图像文字识别接口申请1.2 查看文档学习如何调用百度AI1.3 程序开发1.3.1 导入依赖&#xff1a;1.3.2 公众号发来post请求格式1.3.3 对image类型的消息…...

Linux---(三)基本指令大全

前提引入&#xff1a;历史上先出现的键盘还是鼠标&#xff1f; 答案&#xff1a;键盘 ✨所以刚开始的时候绝对没有图形化界面&#xff0c;因此操作系统刚开始兴起的时候绝对没有图形化界面&#xff0c;因为当时没有鼠标。 ✨因为没有图形化界面&#xff0c;只有键盘&#xff0c…...

基于selenium的pyse自动化测试框架

介绍&#xff1a; pyse基于selenium&#xff08;webdriver&#xff09;进行了简单的二次封装&#xff0c;比selenium所提供的方法操作更简洁。 特点&#xff1a; 默认使用CSS定位&#xff0c;同时支持多种定位方法&#xff08;id\name\class\link_text\xpath\css&#xff09;…...

【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心

微服务&#xff08;5&#xff09; 文章目录 微服务&#xff08;5&#xff09;1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1&#xff09;引入依赖2&#xff09;配置nacos地址3&#xff09;重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …...

华为手机安卓扫描安装包apk在哪

1、在文件管理器里找&#xff0c;有的安装包没有搜索到2、在应用市场-我的-安装包管理&#xff0c;它会扫描整个手机&#xff0c;推荐...

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后&#xff0c;常用的file&#xff0c;view&#xff0c;菜单看不见了&#xff0c;不太适应&#xff0c;找了一下&#xff0c;有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上&#xff0c;应用保存就可以了...

Leetcode 350:两个数组的交集II

给你两个整数数组 nums1 和 nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现次数不一致&#xff0c;则考虑取较小值&#xff09;。可以不考虑输出结果的顺序。 示例 1…...

【数据结构】队列的实现与优化指南

一、前言 队列是一种重要的数据结构&#xff0c;它按照“先入先出”&#xff08;FIFO&#xff09;的原则管理数据。本文将介绍队列的概念、应用场景&#xff0c;以及如何使用数组实现普通队列和环形队列。 二、内容 2.1 概述 &#xff08;1&#xff09;什么是队列&#xff1…...

视频太大怎么压缩变小?三分钟学会视频压缩

随着科技的不断发展&#xff0c;视频已经成为了我们日常生活中不可或缺的一部分&#xff0c;然而&#xff0c;大尺寸的视频文件常常会给我们带来诸多困扰&#xff0c;例如发送不便、存储空间不足等等&#xff0c;那么&#xff0c;如何将这些过大的视频文件压缩变小呢&#xff1…...

Rust 泛型

泛型 Generics泛型详解 使用泛型参数&#xff0c;有一个先决条件&#xff0c;必需在使用前对其进行声明&#xff1a; fn largest<T>(list: &[T]) -> T {该泛型函数的作用是从列表中找出最大的值&#xff0c;其中列表中的元素类型为 T。首先 largest<T> 对…...

STM32+2.9inch微雪墨水屏(电子纸)实现显示

本篇文章从硬件原理以及嵌入式编程等角度完整的介绍了墨水屏驱动过程&#xff0c;本例涉及的墨水屏为2.9inch e-Paper V2,它采用的是“微胶囊电泳显示”技术进行图像显示&#xff0c;其基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移&#xff0c;从而改变显示屏各…...

Hadoop3教程(二十九):(生产调优篇)集群扩容及缩容(白名单与黑名单)

文章目录 &#xff08;150&#xff09;添加白名单&#xff08;151&#xff09;服役新服务器&#xff08;152&#xff09;服务器间数据均衡&#xff08;153&#xff09;黑名单退役服务器参考文献 这一章还算是比较重要的。 &#xff08;150&#xff09;添加白名单 白名单&#…...

NET7下用WebSocket做简易聊天室

NET7下用WebSocket做简易聊天室 步骤&#xff1a; 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类一个房间用同一个Websocketwebsocket集合类&#xff0c;N个房间创建websocket中间件代码Program.cs中的核心代码&#xff0c;使用Websocket聊…...

详解API基础知识

目录 什么是API: API 的设计原则包括&#xff1a; API 的开发流程包括以下几个步骤&#xff1a; API 的使用场景包括&#xff1a; API 的优势包括&#xff1a; 然而&#xff0c;API 也存在一些挑战和问题&#xff0c;例如&#xff1a; 什么是API: API&#xff08;应用程…...

b树和b+树

二叉树和平衡二叉树 二叉树&#xff0c;每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 二叉查找树&#xff0c;在二叉树的基础上增加了一个规则&#xff0c;左子树的所有节点的值都小于它的根 节点&#xff0c;右子树的所有子节点都大于它…...

Linux 下 Java 安装字体方法

因上线访问图字体乱码了&#xff0c;因为在windows下设置的微软雅黑&#xff0c;linux默认是没有的&#xff0c;所以需要给jdk安装一个微软雅黑字体。按照步骤来&#xff0c;so easy&#xff01; 1&#xff09;首先找到windows下面的字体&#xff0c;不用去其他地方下了&#…...

敏捷开发的实施要素和实现敏捷的实际改进

​ 敏捷开发的实施要素如下&#xff1a; 个体和交互&#xff1a;胜过过程和工具。可以工作的软件&#xff1a;胜过面面俱到的文档。客户合作&#xff1a;胜过合同谈判。响应变化&#xff1a;胜过遵循计划。 敏捷开发过程是一个增量的、迭代的过程&#xff0c;责任人、开发人…...

学会使用Pandas进行数据清洗

大家好&#xff0c;如果你对数据科学感兴趣&#xff0c;那么数据清洗可能对你来说是一个熟悉的术语&#xff0c;本文将向你介绍使用Pandas进行数据清洗的过程。我们的数据通常来自多个资源&#xff0c;而且并不干净&#xff0c;它可能包含缺失值、重复值、错误或不需要的格式等…...

Stable Diffusion WebUI扩展a1111-sd-webui-tagcomplete之Booru风格Tag自动补全功能详细介绍

安装地址 直接附上地址先: Ranting8323 / A1111 Sd Webui Tagcomplete GitCodeGitCode——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlabhttps://gitcode.net/ranting8323/a1111-sd-webui-tagcomplete.git上面是GitCode的地址,下面是GitHub的地址,根据自身情…...

Linux中iostat命令

iostat命令是IO性能分析的常用工具&#xff0c;其是input/output statistics的缩写。 一、安装 yum install sysstat -y二、参数说明 -c: 显示CPU使用情况-d: 显示磁盘使用情况--dec{ 0 | 1 | 2 }: 指定要使用的小数位数&#xff0c;默认为 2-g GROUP_NAME { DEVICE [...] | A…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...