密云做网站的/最新的疫情防控政策和管理措施
一、翔云 人工智能开放平台
- API文档
- 开发示例下载
二、编译openSSL支持libcurl的https访问
- 安装SSL依赖库openSSL(使用工具wget)
- libcurl库重新配置,编译,安装
- 运行(运行需添加动态库为环境变量)
三、编程实现人脸识别
四、Base64编码
五、RGB颜色模型(用于表示图像中的颜色信息)
六、BMP 图像以像素矩阵的形式存储
七、Base64数据格式转换
八、加入图片base64编码
九、人脸识别完整代码及功能点实现现象
一、翔云 人工智能开放平台
翔云 人工智能开放平台
下面通过人工智能OCR识别平台翔云的使用,掌握调库调API开发的一般步骤,其他的平台也基本类似。
API文档
开发示例下载
C++示例代码
strPostData.Format(_T("img=%s&key=%s&secret=%s&typeId=%d&format=xml"),strImageBase64,strKey,strSecret,nTypeID);
Java示例代码
java大多直接调库,非常简洁,这也是它开发效率高的原因之一。
二、编译openSSL支持libcurl的https访问
那是因为在编译libcurl库的时候,由于翔云接口是https:开头的,需要选择支持SSL。
./configure --with -ssl
我们访问的接口是https开头的,要进行身份验证和数据加密的,体现在我们的key和secret。
那我们就要回到/curl-7.71.1
路径下,删除rm _install -rf
上次编译出来的文件夹,重新编译支持SSL的库。由/docs/INSTALL.md
我们可以得知要想支持SSL,就得./configure --with-ssl
chmod +x configure
sudo ./configure --prefix=$PWD/_install --with-ssl
编译错误
cheking for SSL_connect in -lssl... (cached)no no
configure:error:openSSL libs and/or directories were not found where specified!
安装SSL依赖库openSSL(使用工具wget)
想要支持SSL必须要有依赖库,需要系统中已经安装好了SSL。
我们需要安装openSSL.tar
利用linux的开源工具下载:wget是Linux中的一个下载文件的工具,wget是在Linux下开发的开放源代码的软件。
百度搜索技巧:wget openSSL.tar
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xvf openssl-1.1.1a.tar.gz
进入文件夹,直接去看他的INSTALL。
为了避免到时候编译这个curl又要去配置SSL这个库,我们直接把SSL安装到默认的系统位置去(一般默认是在/usr/local
底下),所以不指定安装路径了,直接在/openssl-1.1.1a
路径下,配置
./config
make
sudo make install
安装配置openssl库时间比较长建议网络稳定ssh建议用MobaXterm,vscodessh安装可能会掉
加 sudo就肯定安装在了usr/local
中,非工作目录无权限
libcurl库重新配置,编译,安装
回到/curl-7.71.1/目录下重新进行配置:
chmod +x configure
sudo ./configure --prefix=$PWD/_install --with-ssl
sudo make
make install
运行(运行需添加动态库为环境变量)
生成了可执行文件./a.out直接运行可能会报错(我没有报错,可能是我用的Ubuntu22.04)。
原因是运行时要链接动态库,没有添加环境变量
cd /home/orangepi/curl-7.71.1/_install/lib
export LD_LIBRARY_PATH=/home/orangepi/curl-7.71.1/_install/lib
永久有效,配置环境变量,要改配置文件
在Linux系统上,如果你希望将libcurl库的路径添加到永久环境变量中,你可以编辑shell配置文件,例如bash的.bashrc
文件。以下是在bash shell中将libcurl库路径添加到LD_LIBRARY_PATH
环境变量的步骤:
-
打开
.bashrc
文件,可以使用文本编辑器如nano
、vim
、gedit
等。nano ~/.bashrc
-
在文件的末尾添加以下行,其中
/path/to/libcurl
是libcurl库的实际路径。export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libcurl
替换
/path/to/libcurl
为libcurl库的实际路径。 -
保存并关闭文件。
-
使更改生效。可以通过运行以下命令重新加载
.bashrc
文件:source ~/.bashrc
或者,你可以注销并重新登录。
现在,libcurl库的路径将在每次启动新shell时自动添加到LD_LIBRARY_PATH
中。这确保了libcurl库在系统范围内可用。请注意,这只对当前用户生效。如果你希望所有用户都能访问libcurl库,你可能需要将环境变量设置添加到/etc/environment
文件中,这需要超级用户权限。
echo $PATH // 获得当前环境变量的值
pwd // 获得当前路径
修改工作目录下的 .bashrc
隐藏文件,配置命令终端的
vi /home/orangepi/.bashrc
在文件最后一行加入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/orangepi/curl-7.71.1/_install/lib
source /home/orangepi/.bashrc 加载配置文件,马上生效配置。
三、编程实现人脸识别
翔云人脸识别API文档
ocr.c
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>// 定义bool类型和常量
typedef unsigned int bool; // 数据类型别名用typedef
#define true 1
#define false 0// 回调函数,读取从OCR后台返回的数据 前面打开百度的例子是将内容读取到本地文件fd里面
size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{// 在这里处理返回的数据,例如保存到文件或进行其他处理char buf[1024] = {'\0'};strncpy(buf, ptr, 1024);printf("============================= get data ===========================\n");printf("%s\n", buf);return size * nmemb;
}// 根据文档,接口调用方法为post请求
bool postUrl()
{CURL *curl;CURLcode res;char *postString = NULL; // 空指针,要开辟空间// 根据翔云平台的接口要求 分开定义,然后字符串拼接char *img1 = NULL; // 图片base64流char *img2 = NULL;char *key = "JFD5c1iBh9LVqPkkZMxxxx";char *secret = "76f444813fc945bd9543e4d7e086xxxx";int typeId = 21;char *format = "xml";// 字符串拼接postString = (char *)malloc(strlen(key) + strlen(secret) + 2048);sprintf(postString, "img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", "", "", key, secret, typeId, format);curl = curl_easy_init();if (curl){// 指定cookie缓存文件if (curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt") != CURLE_OK){fprintf(stderr, "Failed to set cookie file\n");// 处理错误return false; // 在设置失败时,直接返回}// 指定post传输内容,get请求将URL和postString一次性发送curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);// 指定urlcurl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");// 回调函数读取返回值curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);// 执行请求res = curl_easy_perform(curl);if (res != CURLE_OK){fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));// 处理错误return false;}// 清理资源curl_easy_cleanup(curl);}// 释放动态分配的内存free(postString);return true;
}int main(void)
{postUrl();return 0;
}
编译
gcc ocr.c -I /home/orangepi/curl-7.71.1/_install/include/ -L /home/orangepi/curl-7.71.1/_install/lib/ -lcurl
运行
成功运行后,已经可以看到已经收到了翔云后台的反馈:
四、Base64编码
Base64 是一种二进制到文本编码方式,通过将二进制数据编码为 ASCII 字符集中的字符,使得数据能够以文本形式传输,而不会被改变。Base64 编码通常用于在文本协议中传输二进制数据,例如电子邮件的附件、图片的网址传输等。
Base64 编码的基本原理是将每三个字节的数据(24 位)转换为四个 Base64 字符。这样,原始数据的大小会增加约 1/3。
Base64 字符集通常包含 64 个字符,包括:
- 26 个大写字母: A-Z
- 26 个小写字母: a-z
- 10 个数字: 0-9
- 两个额外字符: + 和 /
Base64 不使用常见的字符,因此它是一种安全的编码方式,适用于在文本协议中传输二进制数据。
编码过程如下:
- 将数据按每三个字节(24 位)进行分组。
- 将每组数据划分为四个 6 位的片段。
- 将这些 6 位的片段转换为 Base64 字符。
Base64 解码则是编码的逆过程,将 Base64 字符转换回原始的二进制数据。在编码和解码过程中,Base64 字符集提供了一种标准的、文本友好的表示形式,使得数据在各种环境中都能够被正确处理。
示例:
原始数据: Hello, World!
Base64 编码:SGVsbG8sIFdvcmxkIQ==
在编程中,大多数编程语言都提供了 Base64 编码和解码的库或函数,方便开发者在应用中使用。
五、RGB颜色模型(用于表示图像中的颜色信息)
RGB(Red, Green, Blue)是一种颜色模型,用于表示图像中的颜色信息。在 RGB 模型中,每个像素的颜色由红色(R)、绿色(G)、蓝色(B)三个分量的亮度组合而成。每个分量的取值通常在 0 到 255 之间,其中 0 表示最小亮度,255 表示最大亮度。
RGB 数据表示一个图像的颜色信息,通常以矩阵的形式存储。每个像素由一个或多个字节组成,其中每个字节对应一个颜色分量。在常见的图像文件格式中,像素的存储顺序通常是连续的,按行或按列排列。
以下是一个简单的示例,展示了一个 3x3 的图像的 RGB 数据:
| R0 G0 B0 | R1 G1 B1 | R2 G2 B2 |
| R3 G3 B3 | R4 G4 B4 | R5 G5 B5 |
| R6 G6 B6 | R7 G7 B7 | R8 G8 B8 |
这里,每组 R G B
表示一个像素的红、绿、蓝三个分量的值。在实际应用中,图像的大小可能是数百乃至数千像素,而 RGB 数据的表示会更加庞大。
在编程中,处理 RGB 数据通常需要使用专门的图像处理库,例如 OpenCV(Open Source Computer Vision Library)等。这些库提供了丰富的函数和工具,方便开发者对图像进行处理、分析和操作。
BMP(Bitmap)是一种位图图像文件格式,它是一种无损压缩的图像格式,通常以.bmp
为文件扩展名。BMP 文件格式最初由Microsoft开发,用于Windows平台。
六、BMP 图像以像素矩阵的形式存储
BMP 图像以像素矩阵的形式存储,每个像素可以用来表示图像中的一个点,而每个点的颜色信息则通过RGB(Red, Green, Blue)三个分量来表示。BMP 文件格式支持不同的颜色深度,包括1位、4位、8位、16位、24位和32位等多种格式。
BMP 文件的结构包括文件头和图像数据两个主要部分:
-
文件头(Bitmap File Header): 包含了文件的一些基本信息,比如文件类型、文件大小、图像的偏移等。
-
信息头(Bitmap Information Header): 包含了关于图像的详细信息,如图像的宽度、高度、颜色平面数、每像素比特数等。
-
颜色表(Color Table): 针对使用调色板的图像,包含了调色板中的颜色信息。
-
图像数据: 包含了图像的实际像素数据。
BMP 文件通常比较简单,易于理解和解析。然而,由于它不使用压缩算法,因此可能占用较大的存储空间,尤其是对于彩色图像。在实际应用中,更常见的图像格式如JPEG、PNG等采用了更高效的压缩算法。
常见的图像格式
有许多不同的图像格式,每种格式都有其特定的用途和优势。以下是一些常见的图像格式:
-
JPEG(Joint Photographic Experts Group): 一种有损压缩格式,适用于照片和真彩图像。它通过牺牲一些图像细节来实现更小的文件大小。
-
PNG(Portable Network Graphics): 一种无损压缩格式,适用于图标、图形和带有透明背景的图像。PNG支持多种颜色深度和透明度。
-
GIF(Graphics Interchange Format): 一种支持动画和透明度的格式。GIF适用于简单的图形,但由于其有限的颜色深度,不适用于照片。
-
BMP(Bitmap): 一种无损格式,适用于简单的图像。BMP文件通常较大,因为它们未经压缩。
-
TIFF(Tagged Image File Format): 一种灵活的格式,适用于存储高质量的图像和照片。TIFF支持无损压缩和多页文档。
-
WEBP: 由Google开发的一种图像格式,支持有损和无损压缩,同时具有较小的文件大小。
-
SVG(Scalable Vector Graphics): 一种矢量图形格式,适用于图标和图形。SVG图像可缩放而不失真。
-
RAW: 一种未经处理的图像格式,通常由数码相机生成。RAW格式保留了更多的图像信息,但文件较大。
-
ICO(Icon): 用于存储图标的格式,通常用于Windows应用程序。
这只是一小部分常见的图像格式,实际上还有许多其他专用格式和变种,每种都适用于不同的用途。选择图像格式时,通常要考虑图像的内容、用途、质量和文件大小。
七、Base64数据格式转换
Base64是一种将二进制数据编码成ASCII字符串的方法,通常用于在文本协议中传输二进制数据。你可以使用Base64编码工具对图像进行编码,以下是一个示例:
base64 test.jpg > test_base64.txt
这将把 test.jpg
图像文件编码为Base64,并将结果保存到 test_base64.txt
文件中。
如果你想要将Base64字符串解码回二进制数据,可以使用以下命令:
base64 -d test_base64.txt > test_decoded.jpg
这将从 test_base64.txt
文件中读取Base64字符串并将其解码为 test_decoded.jpg
图像文件。
请注意,Base64编码会增加数据的大小,因为它将二进制数据转换为文本形式。在网络传输中使用它可以确保数据以文本的形式传递,但需要考虑到编码和解码的性能开销。
常用的Base64加密解密工具网站
一些常用的Base64加密解密工具网站包括:
- Base64 编码解码 - 在线工具
- Online Base64 编码解码
- Base64 编码/解码工具
请记住在使用在线工具时要谨慎,特别是在处理敏感数据时,因为在线服务可能会记录你的数据。如果你处理敏感信息,请尽量使用本地工具。
八、加入图片base64编码
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。
在Linux下生成图片的base64编码
base64 test.jpg
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>char* getBase64FromFile(const char* filePath)
{char cmd[256] = {'\0'};char* base64Buf = NULL;// 使用安全的方式构建命令snprintf(cmd, sizeof(cmd), "base64 %s | tr -d '\n' > tmpFile", filePath);//图片的base64流导入到文件中if (system(cmd) == -1) {perror("Error executing system command");return NULL;}int fd = open("./tmpFile", O_RDWR);if (fd == -1) {perror("Error opening file");return NULL;}// 计算文件大小int fileLen = lseek(fd, 0, SEEK_END);lseek(fd, 0, SEEK_SET);// 动态分配内存base64Buf = (char*)malloc(fileLen + 1);if (base64Buf == NULL) {perror("Error allocating memory");close(fd);return NULL;}memset(base64Buf, '\0', fileLen + 1);// 读取文件内容到字符串(base64流)if (read(fd, base64Buf, fileLen) == -1) {perror("Error reading file");free(base64Buf);close(fd);return NULL;}close(fd);// 删除临时文件if (remove("tmpFile") == -1) {perror("Error deleting temporary file");}return base64Buf;
}int main() {const char* filePath = "your_file_path_here";char* base64String = getBase64FromFile(filePath);if (base64String != NULL) {printf("Base64 String:\n%s\n", base64String);// 释放动态分配的内存free(base64String);}return 0;
}
九、人脸识别完整代码及功能点实现现象
ocr.c
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>// 定义bool类型和常量
typedef unsigned int bool; // 数据类型别名用typedef
#define true 1
#define false 0char ocrReturnBuf[1024] = {'\0'}; // 全局变量,用来接收从OCR后台返回的数据// 回调函数,读取从OCR后台返回的数据(把从后台的数据拷贝给ocrReturnBuf)
size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{size_t totalSize = size * nmemb;// 为了避免溢出,计算实际拷贝的长度size_t copySize = (totalSize < (sizeof(ocrReturnBuf) - 1)) ? totalSize : (sizeof(ocrReturnBuf) - 1);// 拷贝数据到 ocrRetBuf 中memcpy(ocrReturnBuf, ptr, copySize);// 手动添加字符串终结符ocrReturnBuf[copySize] = '\0';return totalSize;
}char *getBase64FromFile(const char *filePath)
{char cmd[256] = {'\0'};char *base64Buf = NULL;// 使用安全的方式构建命令snprintf(cmd, sizeof(cmd), "base64 %s | tr -d '\n' > tmpFile", filePath);if (system(cmd) == -1) {perror("Error executing system command");return NULL;}int fd = open("./tmpFile", O_RDWR);if (fd == -1) {perror("Error opening file");return NULL;}// 计算文件大小int fileLen = lseek(fd, 0, SEEK_END);lseek(fd, 0, SEEK_SET);// 动态分配内存base64Buf = (char *)malloc(fileLen + 1);if (base64Buf == NULL) {perror("Error allocating memory");close(fd);return NULL;}memset(base64Buf, '\0', fileLen + 1);// 读取文件内容到字符串if (read(fd, base64Buf, fileLen) == -1) {perror("Error reading file");free(base64Buf);close(fd);return NULL;}close(fd);// 删除临时文件if (remove("tmpFile") == -1) {perror("Error deleting temporary file");}return base64Buf;
}// 根据文档,接口调用方法为post请求
bool postUrl()
{CURL *curl;CURLcode res;// 根据翔云平台的接口要求 分开定义,然后字符串拼接char *img1 = getBase64FromFile("/home/orangepi/smart_home/test/test1_JPEG.webp"); // 图片base64流char *img2 = getBase64FromFile("/home/orangepi/smart_home/test/test2_JPEG.webp");char *key = "JFD5c1iBh9LVqPkkZMxxxx";char *secret = "76f444813fc945bd9543e4d7e086xxxx";int typeId = 21;char *format = "xml";int len = strlen(key) + strlen(secret) + strlen(img1) + strlen(img2) + 128; // 分配空间不够会>导致栈溢出char* postString = (char*)malloc(len);memset(postString, '\0', len);//因为postString是一个指针,不能用sizeof来计算其指向的大小// 字符串拼接sprintf(postString, "img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", img1, img2, key, secret, typeId, format);curl = curl_easy_init();if (curl){// 指定cookie缓存文件// if (curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt") != CURLE_OK)// {// fprintf(stderr, "Failed to set cookie file\n");// return false; // 在设置失败时,直接返回// }// 指定post传输内容,get请求将URL和postString一次性发送curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);// 指定urlcurl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");// 回调函数读取返回值curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);// 执行请求res = curl_easy_perform(curl);if (res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));// 处理错误return false;}//字符串检索 判断翔云后台返回的一大堆字符串中有没有“否”if (strstr(ocrReturnBuf,"否") != NULL) { printf("不是同一个人\n");}else{printf("是同一个人\n");}// 清理资源curl_easy_cleanup(curl);}// 释放动态分配的内存free(img1);free(img2);free(postString);return true;
}int main(void)
{postUrl();return 0;
}
编译
gcc ocr.c -I /home/orangepi/curl-7.71.1/_install/include/ -L /home/orangepi/curl-7.71.1/_install/lib/ -lcurl
运行
相关文章:

【智能家居】七、人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
一、翔云 人工智能开放平台 API文档开发示例下载 二、编译openSSL支持libcurl的https访问 安装SSL依赖库openSSL(使用工具wget)libcurl库重新配置,编译,安装运行(运行需添加动态库为环境变量) 三、编程实现人脸识别 四、Base6…...

基于node 安装express后端脚手架
1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方:这个时候安装特别慢,最后导致不成功 解决方法:npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…...

Mrdoc知识文档
MrDoc知识文档平台是一款基于Python开发的在线文档系统,适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具,致力于成为优秀的私有化在线文档部署方案。我现在主要把markdown笔记放在上面,因为平时老是需要查询一些知识点ÿ…...

C语言中getchar函数
在 C 语言中,getchar() 是一个标准库函数,用于从标准输入(通常是键盘)读取单个字符。它的函数原型如下: int getchar(void);getchar() 函数的工作原理如下: 当调用 getchar() 函数时,它会等待…...

全栈开发组合
SpringBoot是什么? SpringBoot是一个基于Spring框架的开源框架,由Pivotal团队开发。它的设计目的是用来简化Spring应用的初始搭建以及开发过程。SpringBoot提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用 Sprin…...

wpf TelerikUI使用DragDropManager
首先,我先创建事务对象ApplicationInfo,当暴露出一对属性当例子集合对于构成ListBoxes。这个类在例子中显示如下代码: public class ApplicationInfo { public Double Price { get; set; } public String IconPath { get; set; } public …...

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法
在appium自动化测试脚本运行的过程中,因为网络不稳定、测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待的方法来避免这种…...

详解Maven如何打包SpringBoot工程
目录 一、spring-boot-maven-plugin详解 1、添加spring-boot-maven-plugin插件到pom.xml 2、配置主类(Main Class) 3、配置打包的JAR文件名 4、包含或排除特定的资源文件 5、指定额外的依赖项 6、配置运行参数 7、自定义插件执行阶段 二、Maven打…...

PyQt6 QFrame分割线控件
锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…...

PostgreSql 序列
一、概述 在 PostgreSQL 中,序列用于生成唯一标识符,通常用于为表的主键列生成连续的唯一值。若目的仅是为表字段设置自增 id,可考虑序列类型来实现,可参考《PostgreSql 设置自增字段》 二、创建序列 2.1 语法 CREATE [ TEMPOR…...

【深度学习目标检测】六、基于深度学习的路标识别(python,目标检测,yolov8)
YOLOv8是一种物体检测算法,是YOLO系列算法的最新版本。 YOLO(You Only Look Once)是一种实时物体检测算法,其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化,提高了检测速度和准确性。…...

Vue3上传图片和删除图片
<div class"illness-img"><van-uploader:after-read"onAfterRead"delete"onDeleteImg"v-model"fileList"max-count"9":max-size"5 * 1024 * 1024"upload-icon"photo-o"upload-text"上传图…...

华为配置VRRP负载分担示例
组网需求 如图1所示,HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力,HostA以SwitchA为默认网关接入Internet,SwitchB作为备份网关;HostC以SwitchB为默认网关接入Internet,Switc…...

【Python】按升序排列 Excel 工作表
发现按名称对 Excel 工作表进行排序很麻烦,因此创建了一个代码来使用 Python 的 openpyxl 对它们进行排序。 1. 本次创建的代码概述 在GUI中指定一个Excel文件(使用Tkinter。这是一个标准模块,因此不需要安装)加载Excel文件&…...

定时器TIM HAL库+cubeMX(上)
定时器时钟源APB1 36MHz 一.基本定时器 1.基本框图 2.溢出时间计算 3.配置定时器步骤 TIM_HandleTypeDef g_timx_handle;/* 定时器中断初始化函数 */ void btim_timx_int_init(uint16_t arr, uint16_t psc) {g_timx_handle.Instance TIM6;g_timx_handle.Init.Prescaler p…...

我常用的几个经典Python模块
Python常用的模块非常多,主要分为内置模块和第三方模块两大类,且不同模块应用场景不同又可以分为文本类、数据结构类、数学运算类、文件系统类、爬虫类、网络通讯类等多个类型。 大家常用的内置模块比如:math、re、datetime、urllib、os、ra…...

课堂练习4.4:页式虚存
4-7 课堂练习4.4:页式虚存 缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的…...

javascript实现Stack(栈)数据结构
上一篇文章我们理解了List这种数据结构,知道了它的特点和一些使用场景,这篇文章我们就来看一下栈这种数据结构,这里的栈可不是客栈哦,哈哈 栈其实和List非常像,使用javascript实现都是基于数组来实现 尝试理解Stack …...

Layui深入
1、代码: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>注册页面</title> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; …...

网络层--TCP/UDP协议
目录 一、TCP/UDP协议介绍 1、UDP(User Datagram Protocol)--用户数据报协议 1.1 UDP报文格式 1.2 UDP协议的特性 2、TCP(Transmission Control Protocol )--传输控制协议 2.1 TCP报文格式 2.2 TCP协议的特性 2.3 TCP三次握手 2.4 四次挥手 三、TCP和UDP的区别 四、t…...

前端发送请求之参数处理---multipart/form-data与application/x-www-form-urlencoded
Content-Type就是指 HTTP 发送信息至服务器时的内容编码类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。 其实前后端发送请求的方式有 text/plain、application/json、application/x-www-form-urlencoded、 multipart/form-data等&…...

解决Ubuntu16.04没声音
第一步:安装 PulseAudio Volum Control Ubuntu没有声音(听不到声音)的解决方法 第二步:No cards available for configuration 【解决Ubuntu18.04没声音:No cards available for configuration】 完美解决…...

12.14每日一题(备战蓝桥杯归并排序)
12.14每日一题(备战蓝桥杯归并排序) 题目 归并排序 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数&…...

面试__Java常见异常有哪些?
java.lang.IllegalAccessError:违法访问错误。当一个应用试图访问、修改某个类的域(Field)或 者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.InstantiationError:实例化错误。当…...

linux 网络子系统 摘要
当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的M…...

java发起http、https请求,并携带cookie、header,post参数放body并可选关闭ssl证书验证,高可用版
公司有个需求是发起https请求对接国家数据接口,需要带header、cookie,并关闭ssl证书验证,搜了很多文章,都说用HttpsURLConnection发起请求,但不知为啥在封装body参数的时候一直报400封装出错,也欢迎指出不足…...

windows系统nodeJs报错node-sass npm ERR! command failed
报错信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…...

从零构建属于自己的GPT系列5:模型部署1(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…...

电脑篇——360浏览器打开新标签页自定义,和关闭360导航(强迫症福音)
1.点击“”按钮打开新标签页时会自动打开“资讯聚合”页面,如下图。 如何让我们打开新标签页可以自定义呢(如我这般强迫症必须要新打开的页面干干净净)? 方法:点击号打开新标签页后,在新标签页界面上找到…...

常见的Linux基本指令
目录 什么是Linux? Xshell如何远程控制云服务器 Xshell远程连接云服务器 Linux基本指令 用户管理指令 pwd指令 touch指令 mkdir指令 ls指令 cd指令 rm指令 man命令 cp指令 mv指令 cat指令 head指令 编辑 tail指令 编辑echo指令 find命令 gr…...