当前位置: 首页 > 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…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...