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

【R + Python】iNaturalist 网站图片下载 inat api

图片描述

文章目录

  • 一、iNaturalist 简介
  • 二、R语言API:rinat
  • 三、示例
    • 3.1 获取观测数据
    • 3.2 绘制可视化图像
      • 函数用法
    • 3.4 在区域网格中搜索
    • 3.5 下载图片
      • 3.51 提取图片 url
      • 3.52 下载图片: R语言
      • 3.53 下载图片: python
  • 四、获取详细rinat包的文档

一、iNaturalist 简介

💻网址:https://www.inaturalist.org/

iNaturalist 是一个全球性的自然观察社区和生物多样性数据库,它允许用户记录和分享他们在自然界中的观察。这个平台由加州科学院(California Academy of Sciences)和国家地理学会(National Geographic Society)联合资助,并且得到了微软“AI for Earth”项目的支持,提供云计算资源和人工智能技术帮助提升图像识别能力。

用户可以在iNaturalist上记录他们遇到的各种生物,包括动物、植物、真菌等,并且可以上传相关的图片或描述。这些观察记录可以贡献给科学研究,帮助科学家和资源管理者了解生物多样性的分布和状况。iNaturalist社区鼓励用户参与讨论,鉴定物种,并与其他自然爱好者交流。

此外,iNaturalist还提供了一些额外的功能,比如创建项目(Projects)、运行生物多样性调查活动(Bioblitz)、以及通过图鉴(Life List)来管理和展示个人的自然观察记录。

iNaturalist不仅是一个数据记录平台,它还注重社区的建设和参与。它鼓励用户成为公民科学家,通过参与项目和活动来贡献自己的观察数据,这些数据可以被科学家用于研究和保护生物多样性。

总的来说,iNaturalist是一个强大的工具,它结合了社区的力量和科技的支持,旨在促进自然观察、生物多样性研究和环境保护。

🧩网站图片示例:
在这里插入图片描述

二、R语言API:rinat

R 语言提供了用于该网站的包。

rinat 是一个R语言的包,它提供了一个程序化接口来访问iNaturalist网站提供的API,以便下载由公民科学家提交的物种出现数据。这个包允许用户通过各种搜索参数来检索观察数据,例如物种名称、地点、日期、记录质量等。

以下是一些rinat包的主要功能:

  1. 获取观察数据:使用get_inat_obs()函数,可以根据查询字符串、物种名称、地点、日期等条件来检索iNaturalist上的观察数据。

  2. 项目观察:通过get_inat_obs_project()函数,可以获取特定项目的所有观察数据,如果知道项目的ID或iNaturalist上的slug名称。

  3. 观察详情:使用get_inat_obs_id()函数,可以通过观察ID来检索特定观察的详细信息。

  4. 用户观察get_inat_obs_user()函数允许你获取特定用户的所有观察数据。

  5. 物种统计get_inat_taxon_stats()函数可以获取特定物种的统计信息。

  6. 用户统计get_inat_user_stats()函数可以获取特定用户的统计信息。

  7. 制图功能inat_map()函数可以快速创建基本地图,以可视化搜索结果。

安装rinat包的步骤如下:

  • 通过CRAN安装最新版本:
install.packages("rinat")
  • 或者,从GitHub安装开发版本:
remotes::install_github("ropensci/rinat")

三、示例

3.1 获取观测数据

get_inat_obs函数为例: 参数

参数描述
query查询字符串,用于进行一般搜索。
taxon_name根据 iNaturalist 分类名称进行过滤。注意,这也会选择后代分类单元的观测。名称可能不是唯一的,匹配多个分类时可能返回空结果。
taxon_id根据 iNaturalist 分类 ID 进行过滤。与 taxon_name 类似,也会选择后代分类单元的观测。
place_id根据 iNaturalist 地点 ID 进行过滤。
quality数据的质量等级,必须是 “casual”(随意)或 “research”(研究)。如果留空,则返回所有质量的数据。
geo仅返回有地理参考的结果。如果设置为 TRUE,将排除没有地理参考的数据。
annotation根据注解进行过滤。是一个长度为 2 的向量,第一个元素是术语 ID(例如 “1” 表示生命阶段),第二个元素是值 ID(例如 “2” 表示成体)。
year只返回指定年份的观测结果(只能是一个具体年份,不能是年份范围)。
month根据月份过滤观测结果,必须为 1 到 12 的数字。
day根据日期过滤观测结果,必须为 1 到 31 的数字。
bounds搜索范围的边界框,以经度(-180 到 180)和纬度(-90 到 90)表示。格式为 [南纬, 西经, 北纬, 东经],也可以提供 sf 或 sp 对象来确定边界框。
maxresults返回结果的最大数量,不应超过 10000。
meta布尔值。如果设置为 TRUE,函数输出将是一个包含元数据和数据框的列表;如果为 FALSE(默认),则只返回数据框。

返回值

  • 返回一个包含请求的观测数据的数据框。
  • 如果 meta = TRUE,则返回一个包含元数据和数据框的列表。

这个函数的过滤功能有时可能不稳定,尤其是 query 参数。在某些情况下,使用 taxon 字段进行科学名称过滤可能效果更好。

🟢搜索伦敦,2024年的图片:

library(rinat)
library(sf)# 这是伦敦的行政区划数据文件,我前一篇文章写了
London <- st_read('E:/Analysis/zenodo/data/admin/boundaries/London.shp')observations <- get_inat_obs(bounds = London ,quality ='research',maxresults = 10,year = 2024)

返回结果包含很多信息,打印返回数据的类型和列名:

> class(observations)
[1] "data.frame"
> colnames(observations)[1] "scientific_name"                  "datetime"                         "description"                     [4] "place_guess"                      "latitude"                         "longitude"                       [7] "tag_list"                         "common_name"                      "url"                             
[10] "image_url"                        "user_login"                       "id"                              
[13] "species_guess"                    "iconic_taxon_name"                "taxon_id"                        
[16] "num_identification_agreements"    "num_identification_disagreements" "observed_on_string"              
[19] "observed_on"                      "time_observed_at"                 "time_zone"                       
[22] "positional_accuracy"              "public_positional_accuracy"       "geoprivacy"                      
[25] "taxon_geoprivacy"                 "coordinates_obscured"             "positioning_method"              
[28] "positioning_device"               "user_id"                          "user_name"                       
[31] "created_at"                       "updated_at"                       "quality_grade"                   
[34] "license"                          "sound_url"                        "oauth_application_id"            
[37] "captive_cultivated"              

使用image_url就可以下载该图片。

比如这张:https://static.inaturalist.org/photos/444220864/medium.jpeg

3.2 绘制可视化图像

🟢(1) 简单的plot绘制,根据经纬度绘制点即可:

# 绘制观测点,设置颜色
plot(observations$longitude, observations$latitude, col = "blue",   # 设置点的颜色为蓝色pch = 19,       # 设置点的形状,19 是实心圆点xlab = "Longitude", ylab = "Latitude",main = "iNaturalist Observations in London 2024")  # 设置图形标题

在这里插入图片描述

🟢(2)inat_map函数绘制

map <- inat_map(observations,map = 'world', subregion = "UK")

这个貌似只能精确到国家,比如我搜索的是伦敦的数据,但绘图是英国的。
在这里插入图片描述

inat_map() 函数用于绘制 iNaturalist 观测数据的地图。该函数不仅可以自动绘制地图,还可以返回一个 ggplot 对象,供用户进一步修改和添加图层。

函数用法

inat_map(data, map = "usa", subregion = ".", plot = TRUE)
参数描述
data包含 iNaturalist 观测数据的数据框,通常通过 get_inat_obs() 获取,数据中必须包含经纬度。
map要绘制的地图区域,默认值为 "usa"(美国),可以参考 map 包的文档获取其他区域的名称。
subregion地图子区域名称,默认是 ".",即整个指定区域,也可以根据需求绘制更小的子区域。
plot逻辑值,默认值为 TRUE,表示直接绘制地图。如果为 FALSE,则返回一个 ggplot 对象,用户可以进一步修改。

🟢(3)使用ggplot2

library(ggplot2)# 将观测数据转换为 sf 对象,便于与伦敦边界一起绘制
# 使用 longitude 和 latitude 列作为坐标
observations_sf <- st_as_sf(observations, coords = c("longitude", "latitude"), crs = st_crs(London))# 使用 ggplot2 绘制伦敦边界和观测数据
ggplot() +geom_sf(data = London, fill = "lightgray", color = "black") +    # 绘制伦敦边界geom_sf(data = observations_sf, aes(color = species_guess), size = 3) +  # 绘制观测数据,使用 species_guess 作为颜色scale_color_viridis_d() +  # 使用 Viridis 颜色刻度labs(title = "iNaturalist Observations in London 2024", color = "Species") +  # 添加标题和颜色标签theme_minimal()

在这里插入图片描述

3.4 在区域网格中搜索

将目标区域分为多个网格,在每个网格中进行搜索,这样可以是的搜索结果更加均匀。

注意:网格尺度太大,或者搜索限制太宽松,会导致get_inat_obs函数返回太多值,会报错。

或者错误的边界会返回0个结果(网格区域表示为[南纬, 西经, 北纬, 东经],顺序不能错了)。

在这里插入图片描述

🔹🔹示例代码:

# 加载所需的包
library(rinat)
library(dplyr)
library(sf)
library(ggplot2)gc()# 读取伦敦边界 shapefile
London <- st_read('E:/Analysis/zenodo/data/admin/boundaries/London.shp')grid <- London %>%# 将伦敦边界转换为英国国家网格坐标系(OSGB 1936,EPSG:27700),这是一个常用的投影系统,适合用于测量距离(以米为单位)。st_transform(27700) %>% st_make_grid(cellsize = 10000) %>% st_sf() %>% mutate(cell = seq(1:nrow(.))) %>%select(cell, everything()) %>%st_transform(4326)# 统计每个网格的观测数据
observations_list <- lapply(1:nrow(grid), function(i) {g <- grid[i, ]  # 选择第i个网格bbox <- st_bbox(g)  # 获取边界框bounds <- c(bbox["ymin"], bbox["xmin"], bbox["ymax"], bbox["xmax"])  # [南纬, 西经, 北纬, 东经]print(paste("searching for observations in grid cell",i,"out of",nrow(grid)))# 获取每个网格区域内的 iNaturalist 观测数据,限制为10个obs <- get_inat_obs(bounds = bounds, maxresults = 10,quality = 'research',year = 2024)  print(paste("..success..adding",nrow(obs),"records"))# 检查是否有观测数据返回if (nrow(obs) > 0) {return(obs)} else {return(NULL)  # 没有数据返回NULL}
})# 将观测数据列表转换为数据框,去除NULL值
observations_df <- do.call(rbind, observations_list)# 将观测数据转换为 sf 对象
observations_sf <- st_as_sf(observations_df, coords = c("longitude", "latitude"), crs = st_crs(London))# 过滤观测数据,只保留在伦敦边界内的观测
observations_within_london <- observations_sf[st_intersects(observations_sf, London) %>% lengths > 0,] # 如果有观测数据,转换为 sf 对象
if (nrow(observations_within_london) > 0) {# 使用 ggplot2 绘制伦敦边界和观测数据ggplot() +geom_sf(data = London, fill = "lightgray", color = "black") +    # 绘制伦敦边界geom_sf(data = observations_within_london, aes(color = species_guess), size = 3, show.legend = FALSE) +  # 绘制观测数据scale_color_viridis_d() +  # 使用 Viridis 颜色刻度labs(title = "iNaturalist Observations in London 2024", color = "Species") +  # 添加标题theme_minimal()
} else {print("没有找到任何观测数据。")
}

3.5 下载图片

其实就是根据图片的url下载,很多语言都可以实现的。

3.51 提取图片 url

你也可以根据需要,保存更多的变量,比如经纬度之类的。

# 保存图片的url
inat_urls <- observations_within_london %>%st_drop_geometry() %>%  # 去掉 geometry 列select(id,image_url)%>%mutate(id = paste0("i",id)) %>%filter(!is.na(id) & !is.na(image_url))library(tidyverse)
write_csv(inat_urls, paste0("./inat_urls_1.csv"))

3.52 下载图片: R语言

# 加载必要的包
library(tidyverse)# 读取 CSV 文件
inat_urls <- read_csv("./inat_urls_1.csv")# 确保 URL 列和 ID 列的名称正确
url_column <- "image_url"
id_column <- "id"# 创建一个下载目录(如果没有的话)
dir.create("images", showWarnings = FALSE)# 下载每个 URL 对应的图片
for (i in 1:nrow(inat_urls)) {# 获取当前 URL 和对应的 IDimage_url <- inat_urls[[url_column]][i]image_id <- inat_urls[[id_column]][i]# 生成保存图片的文件名,使用 IDimage_name <- paste0("images/", image_id, ".jpg")  # 假设文件格式为 .jpg,调整为实际格式# 下载图片tryCatch({download.file(image_url, destfile = image_name, mode = "wb")  # mode = "wb" 适用于二进制文件message(paste("Downloaded:", image_name))}, error = function(e) {message(paste("Failed to download:", image_url))})
}

在这里插入图片描述

3.53 下载图片: python

这是论文:Social media and deep learning reveal specific cultural preferences for biodiversity 的参考代码

下载中断后可以继续上次的下载,做法是:下载过的图片,在csv文件中会新增dl列,值设置为Y

在这里插入图片描述

import time
import pandas as pd
import urllib.request
import urllib.error
import http
from io import BytesIOfrom PIL import Image, ImageFileImageFile.LOAD_TRUNCATED_IMAGES = True# csv 文件序号后缀
s = 1# Set directory
proj_dir = "E:/R_Language"# General functionsdef open_image(entry):"""function to open image"""img = []  # empty img list object as defaultimage_url = entry.iloc[1]  # start with lowest resolution imageif image_url != image_url:print("...none available")image_url = []print(f"image found at {image_url}")if len(image_url) != 0:e = None  # empty error objectn = 0  # create request error counterwhile True:try:response = urllib.request.urlopen(image_url)img = Image.open(BytesIO(response.read()))img = img.convert('RGB')img = [img.resize((400, 400))]breakexcept (urllib.error.ContentTooShortError, ConnectionResetError) as ex:print(ex)print('error...retrying...')n += 1if n > 10:  # after ten error messages, move onbreaktime.sleep(1)continueexcept (urllib.error.HTTPError, http.client.IncompleteRead,urllib.error.URLError) as ex:print(ex)if str(ex) in ("HTTP Error 403: Forbidden", "HTTP Error 404: Not Found", "HTTP Error 410: Gone"):print('...does not exist...moving on...')e = exbreakelse:print('...retrying...')time.sleep(2)continuereturn (img)def next_id(df):"""function to load index of last downloaded image"""if 'dl' in df:df = df.iloc[:, 2]i = pd.Series.last_valid_index(df) + 1else:i = 0return (i)def main():# image_urls = pd.read_csv(f"{proj_dir}/data/inat/urls/inat_urls_{s}.csv")image_urls = pd.read_csv(f"{proj_dir}/inat_urls_{s}.csv")# image_dir = f"{proj_dir}/data/inat/imgs"  # results file id (later split between atts and scenes)image_dir = f"{proj_dir}/images"start_i = next_id(image_urls)for i in range(start_i, len(image_urls)):print(f"Analysing image {i + 1} out of {len(image_urls)}")image = open_image(image_urls.iloc[i])if image:  # if list is not emptyprint(f"...image exists, downloading...")image[0].save(f"{image_dir}/{image_urls.iloc[i, 0]}.jpg")image_urls.loc[i, 'dl'] = 'Y'# image_urls.to_csv(f"{proj_dir}/data/inat/urls/inat_urls_{s}.csv", sep=',', index=False)image_urls.to_csv(f"{proj_dir}/inat_urls_{s}.csv", sep=',', index=False)else:print(f"Image for metadata record {i + 1} does not exist, moving on...")image_urls.loc[i, 'dl'] = 'N'# image_urls.to_csv(f"{proj_dir}/data/inat/urls/inat_urls_{s}.csv", sep=',', index=False)image_urls.to_csv(f"{proj_dir}/inat_urls_{s}.csv", sep=',', index=False)if __name__ == '__main__':main()

四、获取详细rinat包的文档

在R的控制台输入相关函数的帮助,即可查看全部参数和详细说明:

如:

help(get_inat_obs)

在这里插入图片描述

相关文章:

【R + Python】iNaturalist 网站图片下载 inat api

文章目录 一、iNaturalist 简介二、R语言API&#xff1a;rinat三、示例3.1 获取观测数据3.2 绘制可视化图像函数用法 3.4 在区域网格中搜索3.5 下载图片3.51 提取图片 url3.52 下载图片: R语言3.53 下载图片: python 四、获取详细rinat包的文档 一、iNaturalist 简介 &#x1…...

C#与Sqlite数据库

1&#xff0c;一般的访问方式。 1.1&#xff0c;连接语句。 //sqlite 连接,支持相对位置&#xff0c;也支持绝对位置 Data Source../../Database/cater.db// 连接数据库&#xff0c;FailIfMissingfalse时若文件不存在会自动创建 string connStr "DataSourcetest.db;Vers…...

2019年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型第5层完成的功能 首先&#xff0c;我们需要对OSI参考模型很熟悉&#xff1a;从下到上依次是&#xff1a;物理层-数据链路层-网络层- 运输层-会话层-表示层-应用层&#xff0c;由此可知&#xff0c;题目要问的是会话层的主要功能…...

江协科技STM32学习- P21 ADC模数转换器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

[RK3566-Android11] 使用SPI方式点LED灯带-JE2815/WS2812,实现呼吸/渐变/随音量变化等效果

问题描述 之前写了一篇使用GPIO方式点亮LED灯带的文章 https://blog.csdn.net/jay547063443/article/details/134688745?fromshareblogdetail&sharetypeblogdetail&sharerId134688745&sharereferPC&sharesourcejay547063443&sharefromfrom_link 使用GPIO…...

PostgreSQL用load语句加载插件

文章目录 1. LOAD 语法2. 用途3. 示例4. 注意事项5. 其他相关命令6. 总结 在 PostgreSQL 中&#xff0c;LOAD 主要用于加载共享库&#xff0c;通常用于扩展功能或性能优化。以下是一些有关 LOAD 语句和 PostgreSQL 中的加载操作的关键信息&#xff1a; 1. LOAD 语法 LOAD 语句…...

一文了解:增强图像搜索之图像嵌入

图像嵌入在现代计算机视觉领域扮演着明星角色&#xff0c;它使得计算机能够像人类一样识别出各种各样的图像。由于计算机只能处理数字信息&#xff0c;我们需要将图像转换成数字向量&#xff0c;并存储在向量数据库中&#xff0c;这样就能迅速地检索到它们。 谈到嵌入技术&…...

yolov9目标检测/分割预测报错AttributeError: ‘list‘ object has no attribute ‘device‘常见汇总

这篇文章主要是对yolov9目标检测和目标分割预测测试时的报错&#xff0c;进行解决方案。 在说明解决方案前&#xff0c;严重投诉、吐槽一些博主发的一些文章&#xff0c;压根没用的解决方法&#xff0c;也不知道他们从哪里抄的&#xff0c;误人子弟、浪费时间。 我在解决前&…...

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站&#xff01;本项目基本上是小格子一个人开发&#xff0c;由于工作和个人能力原因&#xff0c;部分技术都是边学习边开发&#xff0c;特别是前端&#xff08;工作中是后端开…...

【C++】深入理解C++中的类型推导:从auto到decltype的应用与实践

C11引入了类型推导特性&#xff0c;旨在简化代码并提升开发效率。类型推导使开发者无需显式指定变量的类型&#xff0c;从而让代码更具可读性和灵活性。本文深入探讨了C11引入的auto、decltype和decltype(auto)等关键特性&#xff0c;通过分析其背后的设计理念、实际应用场景&a…...

使用Prometheus对微服务性能自定义指标监控

背景 随着云计算和容器化技术的不断发展&#xff0c;微服务架构逐渐成为现代软件开发的主流趋势。微服务架构将大型应用程序拆分成多个小型、独立的服务&#xff0c;每个服务都可以独立开发、部署和扩展。这种架构模式提高了系统的可伸缩性、灵活性和可靠性&#xff0c;但同时…...

深入解析 Lombok 的实现原理:以 @Builder 为例的实战演示(三)

文章目录 Lombok 的实现原理概述以 Builder 为例&#xff1a;解析 Lombok 如何生成 Builder 模式示例代码&#xff1a;没有 Lombok 的 Builder 模式使用 Lombok 的 Builder 简化代码 Lombok 如何实现 Builder&#xff1a;源码解析案例演示&#xff1a;自定义构造逻辑Lombok 的代…...

SEO基础:什么是SERP?【百度SEO专家】

SEO基础&#xff1a;什么是SERP&#xff1f; 大家好&#xff0c;我是林汉文&#xff08;百度SEO专家&#xff09;&#xff0c;在进行SEO&#xff08;搜索引擎优化&#xff09;时&#xff0c;理解SERP是一个非常重要的基础概念。那么&#xff0c;究竟什么是SERP呢&#xff1f;本…...

HTML5教程(一)- 网页与开发工具

1. 什么是网页 网页 基于浏览器阅读的应用程序&#xff0c;是数据&#xff08;文本、图像、视频、声音、链接等&#xff09;展示的载体常见的是以 .html 或 .htm 结尾的文件 网站 使用 HTML 等制作的用于展示特定内容相关的网页集合。 2. 网页的组成 浏览器 代替用户向服务…...

Java进阶篇设计模式之二 ----- 工厂模式

前言 在上一篇中我们学习了单例模式&#xff0c;介绍了单例模式创建的几种方法以及最优的方法。本篇则介绍设计模式中的工厂模式&#xff0c;主要分为简单工厂模式、工厂方法和抽象工厂模式。 简单工厂模式 简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法模式。…...

考研篇——数据结构王道3.2.2_队列的顺序实现

目录 1.实现方式说明2.代码实现2.12.1.1 代码12.1.2 代码22.1.3 代码3 2.22.2.1 代码42.2.5 代码52.2.6 代码6 总结 1.实现方式说明 多在选择题中考察 队尾指针&#xff08;rear&#xff09;有两种指向方式&#xff1a; 队尾指针指向队尾元素的位置&#xff0c;队尾指针指向…...

从零开始理解 Trie 树:高效字符串存储与查找的利器【自动补全、拼写检查】

题目分析 这道题让我们实现一个 Trie 类&#xff08;也称为前缀树&#xff09;&#xff0c;以便高效地插入和查询字符串。前缀树是一种特殊的树形数据结构&#xff0c;适用于快速存储和检索字符串数据集中的键&#xff0c;比如实现 自动补全 和 拼写检查。 题目要求 Trie 类…...

关于sse、websocket与流式渲染

一、SSE是什么&#xff1f; 网络中的 SSE (Server-Sent Events) 是一种服务器向浏览器单向推送数据的机制&#xff0c;常用于需要实时更新的数据传输&#xff0c;如新闻推送、股票行情、聊天应用等。 SSE 的特点&#xff1a; 单向通信&#xff1a;服务器向客户端推送数据&…...

Python 语法与数据类型详解

Python 语法与数据类型详解 Python 以其简洁易读的语法和丰富多样的数据类型在编程领域占据重要地位。深入理解 Python 的语法和数据类型是掌握这门语言的关键。 一、Python 语法概述 &#xff08;一&#xff09;缩进规则 Python 独特的缩进规则是其语法的重要特征之一。与…...

LeetCode题练习与总结:扁平化嵌套列表迭代器--341

一、题目描述 给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数&#xff0c;要么是一个列表&#xff1b;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化&#xff0c;使之能够遍历这个列表中的所有整数。 实现扁平迭代器类 NestedIterato…...

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25 声明:本文图片来源于网络 A模拟信号特点: 电压或者电流 缓慢上升 随着时间连续缓慢上升或下降 D数字信号特点:电压或者电流 保持一段时间的高/低电平 状态 / 突变 (高电压瞬间低电压) 数字电路中 通常将0-1v电压称…...

Typora 、 Minio and PicGo 图床搭建

流程介绍 本地安装Typora笔记工具拥有一台装有docker的服务器配置minio云图床管理控制页面下载PicGo上传工具服务器Docker环境搭建—Ubuntu系统 删除旧docker的所有依赖(非root用户) # 删除docker及安装时自动安装的所有包 sudo apt-get autoremove docker docker-ce docker…...

【计网】UDP Echo Server与Client实战:从零开始构建简单通信回显程序

目录 前言&#xff1a; 1.实现udpserver类 1.1.创建udp socket 套接字 --- 必须要做的 socket&#xff08;&#xff09;讲解 代码实现&#xff1a;​编辑 代码讲解&#xff1a; 1.2.填充sockaddr_in结构 代码实现&#xff1a; 代码解析&#xff1a; 1.3.bind sockfd和…...

微服务网关Zuul

一、Zuul简介 Zuul是Netflix开源的微服务网关&#xff0c;包含对请求的路由和过滤两个主要功能。 1&#xff09;路由功能&#xff1a;负责将外部请求转发到具体的微服务实例上&#xff0c;是实现外部访问统一入口的基础。 2&#xff09;过滤功能&#xff1a;负责对请求的过程…...

BuildCTF线上赛WP

Build::CTF flag不到啊战队--WP 萌新战队&#xff0c;还请多多指教~ 目录 Build::CTF flag不到啊战队--WP Web ez!http find-the-id Pwn 我要成为沙威玛传奇 Misc what is this? 一念愚即般若绝&#xff0c;一念智即般若生 别真给我开盒了哥 四妹&#xff0c;你听…...

《使用Gin框架构建分布式应用》阅读笔记:p143-p207

《用Gin框架构建分布式应用》学习第10天&#xff0c;p143-p207总结&#xff0c;总计65页。 一、技术总结 1.auth0 本人实际工作中未遇到过&#xff0c;mark一下&#xff0c;参考&#xff1a;https://auth0.com/。 2.使用template (1)c.File() (2)router.Static() (3)rou…...

华为网络管理配置实例

目录 组网需求 数据规划 配置思路 操作步骤 结果验证 配置脚本 管理员可以通过eSight网管系统对FW进行监控和管理&#xff0c;接收FW的告警。 组网需求 如图1所示&#xff0c;某企业在网络边界处部署了FW作为安全网关&#xff0c;并部署了eSight网管系统对网络设备进行集中…...

大语言模型数据处理方法(基于llama模型)

文章目录 前言一、基于huggingface的DataCollatorForSeq2Seq方法解读1、DataCollatorForSeq2Seq方法2、batch最长序列填充3、指定长度填充二、构建大语言模型数据加工模块1、数据读取2、数据加工1、数据格式2、预训练(pretrain)数据加工3、微调(sft)数据加工①、sft数据加工…...

爱奇艺大数据多 AZ 统一调度架构

01# 导语 爱奇艺大数据技术广泛应用于运营决策、用户增长、广告分发、视频推荐、搜索、会员营销等场景&#xff0c;为公司的业务增长和用户体验提供了重要的数据驱动引擎。 多年来&#xff0c;随着公司业务的发展&#xff0c;爱奇艺大数据平台已积累了海量数据&#xff0c;这…...

【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…...

wordpress无法打开 404/网店运营推广方案

QT Creator是轻量级集成开发环境&#xff0c;在Ubuntu系统操作中&#xff0c;使用QT时无法输入中文&#xff0c;遇到这种情况要如何处理呢&#xff1f;下面小编就给大家介绍下Ubuntu如何解决QT无法输入中文问题。1 安装搜狗输入法&#xff0c;(如果你想用ubuntu自带的输入法也没…...

上海 房地产网站建设/百度网盘帐号登录入口

此代码在我的本地xampp apache服务器中工作正常。 我在具有不同IP地址系统的局域网中运行相同的代码。 该文件无法打开&#xff0c;我无法将其写入所需的目录。 请做有需要的吗&#xff1f; 提前致谢。通过下面的代码传递xml文件。#!"C:\xampp\perl\bin\perl.exe"#!&…...

网站大多用源码来做吗/百度seo优化方法

先来看一个表 方法(void)load(void)initialize执行时机在程序运行后立即执行在类的方法第一次被调时执行若自身未定义&#xff0c;是否沿用父类的方法&#xff1f;否是类别中的定义全都执行&#xff0c;但后于类中的方法 覆盖类中的方法&#xff0c;只执行一个执行次数&#xf…...

wordpress 另类主题/防晒霜营销软文

简介不知从什么时间起&#xff0c;“共享单车”这一概念在忽然间火遍了全国&#xff0c;ofo小黄车&#xff0c;摩拜单车……逐渐走入到我们的生活中。特别是在一线城市&#xff0c;共享单车成为广大白领们不可或缺的交通工具。今天我们就kaggle上的共享单车数据集进行分析。分析…...

建设b2b网站要求/企业员工培训课程有哪些

if exists (select * from dbo.sysobjects where id object_id(N[dbo].[p_qry]) and OBJECTPROPERTY(id, NIsProcedure) 1)drop procedure [dbo].[p_qry]GO/*--生成交叉表的简单通用存储过程根据指定的表名,纵横字段,统计字段,自动生成交叉表并可根据需要生成纵横两个方向的合…...

税务网站建设的建议/seo推广是什么意怿

1.队列组两种使用方法2.队列组等待 wait /** 新方法队列组一般用在在异步操作&#xff0c;在主线程写队列组毫无任何作用*/ - (void)GCD_Group_new_group___notify{dispatch_queue_t queue dispatch_queue_create("11", DISPATCH_QUEUE_CONCURRENT);dispatch_queue_…...