zotero官网:https://www.zotero.org/

1 在Zotero软件中安装插件

进入Zotero百科全书,依次点击:插件→翻译插件→插件介绍→Zotero 中文社区插件商店
在这里插入图片描述

进去后搜索pdf2zh,然后下载后放入空白文件夹zotero-pdf2zh

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

打开Zotero软件后,依次点击:工具→插件→齿轮符号↘。将刚刚下载的插件放进去
在这里插入图片描述

在这里插入图片描述

2 zotero-pdf2zh配置

下述步骤是依照【zotero-pdf2zh】教程页面与B站视频教程【zotero PDF文献全文翻译,无损排版,升级版】以及本人下载安装流程记录,且是我安装过后才写的,所以有些命令我没有执行。如果更喜欢看视频教程,可以直接点击上面蓝字进入B站观看

Zotero软件中依次点击:编辑→设置:照着下图修改

在这里插入图片描述

2.1 server.py

回到文件夹zotero-pdf2zh内新建一个txt文件
在这里插入图片描述

用记事本打开该文件,粘贴下面代码后Ctrl+S保存

import os
from flask import Flask, request, jsonify, send_file
import base64
import subprocess
from pypdf import PdfWriter, PdfReader
from pypdf.generic import RectangleObject
import sysservices = [    'bing', 'google','deepl', 'deeplx','ollama', 'xinference','openai', 'azure-openai','zhipu', 'ModelScope','silicon', 'gemini', 'azure','tencent', 'dify', 'anythingllm','argos', 'grok', 'groq','deepseek', 'openailiked', 'qwen-mt'
]class PDFTranslator:DEFAULT_CONFIG = {'port': 8888,'engine': 'pdf2zh','service': 'bing','threadNum': 4,'outputPath': './translated/','configPath': './config.json','sourceLang': 'en','targetLang': 'zh'}def __init__(self):self.app = Flask(__name__)self.setup_routes()def setup_routes(self):self.app.add_url_rule('/translate', 'translate', self.translate, methods=['POST'])self.app.add_url_rule('/cut', 'cut', self.cut_pdf, methods=['POST'])self.app.add_url_rule('/compare', 'compare', self.compare, methods=['POST'])self.app.add_url_rule('/singlecompare', 'singlecompare', self.single_compare, methods=['POST'])self.app.add_url_rule('/translatedFile/<filename>', 'download', self.download_file)class Config:def __init__(self, data):self.threads = data.get('threadNum') if data.get('threadNum') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['threadNum']self.service = data.get('service') if data.get('service') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['service']self.engine = data.get('engine') if data.get('engine') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['engine']self.outputPath = data.get('outputPath') if data.get('outputPath') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['outputPath']self.configPath = data.get('configPath') if data.get('configPath') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['configPath']self.sourceLang = data.get('sourceLang') if data.get('sourceLang') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['sourceLang']self.targetLang = data.get('targetLang') if data.get('targetLang') not in [None, ''] else PDFTranslator.DEFAULT_CONFIG['targetLang']self.skip_last_pages = data.get('skip_last_pages') if data.get('skip_last_pages') not in [None, ''] else 0self.skip_last_pages = int(self.skip_last_pages) if str(self.skip_last_pages).isdigit() else 0self.babeldoc = data.get('babeldoc', False)self.mono_cut = data.get('mono_cut', False)self.dual_cut = data.get('dual_cut', False)self.compare = data.get('compare', False) # 双栏PDF左右对照self.single_compare = data.get('single_compare', False) # 单栏PDF左右对照self.skip_subset_fonts = data.get('skip_subset_fonts', False)self.outputPath = self.get_abs_path(self.outputPath)self.configPath = self.get_abs_path(self.configPath)os.makedirs(self.outputPath, exist_ok=True)if self.engine == 'pdf2zh_next':self.babeldoc = Trueif self.engine != 'pdf2zh' and self.engine in services:print('Engine only support PDF2zh')self.engine = 'pdf2zh'print("[config]: ", self.__dict__)@staticmethoddef get_abs_path(path):return path if os.path.isabs(path) else os.path.abspath(path)def process_request(self):data = request.get_json()config = self.Config(data)self.translated_dir = config.outputPathfile_content = data.get('fileContent', '')if file_content.startswith('data:application/pdf;base64,'):file_content = file_content[len('data:application/pdf;base64,'):]input_path = os.path.join(config.outputPath, data['fileName'])with open(input_path, 'wb') as f:f.write(base64.b64decode(file_content))return input_path, configdef translate_pdf(self, input_path, config):base_name = os.path.basename(input_path).replace('.pdf', '')output_files = {'mono': os.path.join(config.outputPath, f"{base_name}-mono.pdf"),'dual': os.path.join(config.outputPath, f"{base_name}-dual.pdf")}if config.engine == 'pdf2zh':cmd = [config.engine,input_path,'--t', str(config.threads),'--output', config.outputPath,'--service', config.service,'--lang-in', config.sourceLang,'--lang-out', config.targetLang,'--config', config.configPath,]if config.skip_last_pages and config.skip_last_pages > 0: end = len(PdfReader(input_path).pages) - config.skip_last_pages # get pages num of the pdfcmd.append('-p '+str(1)+'-'+str(end))if config.skip_subset_fonts == True or config.skip_subset_fonts == 'true':cmd.append('--skip-subset-fonts')if config.babeldoc == True or config.babeldoc == 'true':cmd.append('--babeldoc')subprocess.run(cmd, check=True)if config.babeldoc == True or config.babeldoc == 'true':os.rename(os.path.join(config.outputPath, f"{base_name}.{config.targetLang}.mono.pdf"), output_files['mono'])os.rename(os.path.join(config.outputPath, f"{base_name}.{config.targetLang}.dual.pdf"), output_files['dual'])return output_files['mono'], output_files['dual']elif config.engine == 'pdf2zh_next':service = config.serviceif service == 'openailiked':service = 'openaicompatible'if service == 'tencent':service = 'tencentmechinetranslation'if service == 'ModelScope':service = 'modelscope'if service == 'silicon':service = 'siliconflow'if service == 'qwen-mt':service = 'qwenmt'cmd = [config.engine,input_path,'--output', config.outputPath,'--'+service,'--lang-in', config.sourceLang,'--lang-out', config.targetLang,'--qps', str(config.threads),]if os.path.exists(config.configPath) and config.configPath != '' and len(config.configPath) > 4 and 'json' not in config.configPath:cmd.append('--config')cmd.append(config.configPath)if config.skip_last_pages and config.skip_last_pages > 0:end = len(PdfReader(input_path).pages) - config.skip_last_pagescmd.append('--pages')cmd.append(f'{1}-{end}')print("pdf2zh_next command: ", cmd)subprocess.run(cmd, check=True)no_watermark_mono = os.path.join(config.outputPath, f"{base_name}.no_watermark.{config.targetLang}.mono.pdf")no_watermark_dual = os.path.join(config.outputPath, f"{base_name}.no_watermark.{config.targetLang}.dual.pdf")if os.path.exists(no_watermark_mono) and os.path.exists(no_watermark_dual):os.rename(no_watermark_mono, output_files['mono'])os.rename(no_watermark_dual, output_files['dual'])else:            os.rename(os.path.join(config.outputPath, f"{base_name}.{config.targetLang}.mono.pdf"), output_files['mono'])os.rename(os.path.join(config.outputPath, f"{base_name}.{config.targetLang}.dual.pdf"), output_files['dual'])return output_files['mono'], output_files['dual']else:raise ValueError(f"Unsupported engine: {config.engine}")# 工具函数, 用于将pdf左右拼接def merge_pages_side_by_side(self, input_pdf, output_pdf):reader = PdfReader(input_pdf)writer = PdfWriter()num_pages = len(reader.pages)i = 0while i < num_pages:left_page = reader.pages[i]left_width = left_page.mediabox.widthheight = left_page.mediabox.heightif i + 1 < num_pages:right_page = reader.pages[i + 1]right_width = right_page.mediabox.widthelse:right_page = Noneright_width = left_width  # Assume same widthnew_width = left_width + right_widthnew_page = writer.add_blank_page(width=new_width, height=height)new_page.merge_transformed_page(left_page, (1, 0, 0, 1, 0, 0))if right_page:new_page.merge_transformed_page(right_page, (1, 0, 0, 1, left_width, 0))i += 2with open(output_pdf, "wb") as f:writer.write(f)# 工具函数, 用于切割双栏pdf文件def split_pdf(self, input_pdf, output_pdf, compare=False, babeldoc=False):writer = PdfWriter()if ('dual' in input_pdf or compare == True) and babeldoc == False:readers = [PdfReader(input_pdf) for _ in range(4)]for i in range(0, len(readers[0].pages), 2):original_media_box = readers[0].pages[i].mediaboxwidth = original_media_box.widthheight = original_media_box.heightleft_page_1 = readers[0].pages[i]offset = width/20ratio = 4.7for box in ['mediabox', 'cropbox', 'bleedbox', 'trimbox', 'artbox']:setattr(left_page_1, box, RectangleObject((offset, 0, width/2+offset/ratio, height)))left_page_2 = readers[1].pages[i+1]for box in ['mediabox', 'cropbox', 'bleedbox', 'trimbox', 'artbox']:setattr(left_page_2, box, RectangleObject((offset, 0, width/2+offset/ratio, height)))right_page_1 = readers[2].pages[i]for box in ['mediabox', 'cropbox', 'bleedbox', 'trimbox', 'artbox']:setattr(right_page_1, box, RectangleObject((width/2-offset/ratio, 0, width-offset, height)))right_page_2 = readers[3].pages[i+1]for box in ['mediabox', 'cropbox', 'bleedbox', 'trimbox', 'artbox']:setattr(right_page_2, box, RectangleObject((width/2-offset/ratio, 0, width-offset, height)))if compare == True:blank_page_1 = writer.add_blank_page(width, height)blank_page_1.merge_transformed_page(left_page_1, (1, 0, 0, 1, 0, 0))blank_page_1.merge_transformed_page(left_page_2, (1, 0, 0, 1, width / 2, 0))blank_page_2 = writer.add_blank_page(width, height)blank_page_2.merge_transformed_page(right_page_1, (1, 0, 0, 1, -width / 2, 0))blank_page_2.merge_transformed_page(right_page_2, (1, 0, 0, 1, 0, 0))else:writer.add_page(left_page_1)writer.add_page(left_page_2)writer.add_page(right_page_1)writer.add_page(right_page_2)else: readers = [PdfReader(input_pdf) for _ in range(2)]for i in range(len(readers[0].pages)):page = readers[0].pages[i]original_media_box = page.mediaboxwidth = original_media_box.widthheight = original_media_box.heightw_offset = width/20w_ratio = 4.7h_offset = height/20left_page = readers[0].pages[i]left_page.mediabox = RectangleObject((w_offset, h_offset, width/2+w_offset/w_ratio, height-h_offset))right_page = readers[1].pages[i]right_page.mediabox = RectangleObject((width/2-w_offset/w_ratio, h_offset, width-w_offset, height-h_offset))writer.add_page(left_page)writer.add_page(right_page)with open(output_pdf, "wb") as output_file:writer.write(output_file)def translate(self):print("\n########## translating ##########")try:input_path, config = self.process_request()mono, dual = self.translate_pdf(input_path, config)processed_files = []if config.mono_cut == True or config.mono_cut == "true":output = mono.replace('-mono.pdf', '-mono-cut.pdf')self.split_pdf(mono, output)processed_files.append(output)if config.dual_cut == True or config.dual_cut == "true":output = dual.replace('-dual.pdf', '-dual-cut.pdf')self.split_pdf(dual, output, False, config.babeldoc == True or config.babeldoc == "true")processed_files.append(output)if config.babeldoc == False or config.babeldoc == "false":if config.compare == True or config.compare == "true":output = dual.replace('-dual.pdf', '-compare.pdf')self.split_pdf(dual, output, compare=True, babeldoc=False)processed_files.append(output)if config.single_compare == True or config.single_compare == "true":output = dual.replace('-dual.pdf', '-single-compare.pdf')self.merge_pages_side_by_side(dual, output)processed_files.append(output)return jsonify({'status': 'success', 'processed': processed_files}), 200except Exception as e:print("[translate error]: ", e)return jsonify({'status': 'error', 'message': str(e)}), 500def cut_pdf(self):print("\n########## cutting ##########")try:input_path, config = self.process_request()output_path = input_path.replace('.pdf', '-cut.pdf')self.split_pdf(input_path, output_path) # 保留原逻辑return jsonify({'status': 'success', 'path': output_path}), 200except Exception as e:print("[cut error]: ", e)return jsonify({'status': 'error', 'message': str(e)}), 500def single_compare(self):print("\n########## single compare ##########")try:input_path, config = self.process_request()if '-mono.pdf' in input_path:raise Exception('Please provide dual PDF or origial PDF for dual-comparison')if not 'dual' in input_path:_, dual = self.translate_pdf(input_path, config)input_path = dualoutput_path = input_path.replace('-dual.pdf', '-single-compare.pdf')self.merge_pages_side_by_side(input_path, output_path)return jsonify({'status': 'success', 'path': output_path}), 200except Exception as e:print("[compare error]: ", e)return jsonify({'status': 'error', 'message': str(e)}), 500def compare(self):print("\n########## compare ##########")try:input_path, config = self.process_request()if 'mono' in input_path:raise Exception('Please provide dual PDF or origial PDF for dual-comparison')if not 'dual' in input_path:_, dual = self.translate_pdf(input_path, config)input_path = dualoutput_path = input_path.replace('-dual.pdf', '-compare.pdf')self.split_pdf(input_path, output_path, compare=True)return jsonify({'status': 'success', 'path': output_path}), 200except Exception as e:print("[compare error]: ", e)return jsonify({'status': 'error', 'message': str(e)}), 500def download_file(self, filename):file_path = os.path.join(self.translated_dir, filename)return send_file(file_path, as_attachment=True) if os.path.exists(file_path) else ('File not found', 404)def run(self):port = int(sys.argv[1]) if len(sys.argv) > 1 else self.DEFAULT_CONFIG['port']self.app.run(host='0.0.0.0', port=port)if __name__ == '__main__':translator = PDFTranslator()translator.run()

并重命名为server.py
在这里插入图片描述
若是没有显示文件后缀,就依次点击:查看→显示→文件扩展名

2.2 translated文件夹

新建一个空文件夹translated

在这里插入图片描述

2.3 进入终端

在这里插入图片描述

2.3.1 安装uv

# 方法一: 使用pip安装uv
pip install uv
# 方法二: 下载脚本安装
# macOS/Linux
wget -qO- https://astral.sh/uv/install.sh | sh
# windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

我尝试过方法一,不行。所以我fq用的方法二

在这里插入图片描述

安装好后提示需要配置环境变量

 1. 右键点击“桌面” → “个性化” → 搜索“高级系统设置” → “环境变量”。2. 在“用户变量”或“系统变量”中找到 `Path`,点击“编辑”。3. 点击“新建”,输入 `C:\Users\FiveTNNO\.local\bin`,然后确认。【FiveTNNO是我的电脑用户名】4. 关闭并重新打开命令行窗口,运行 `uv --version` 测试。

在这里插入图片描述

2.3.2 uv安装Python 3.13

依次运行下面两行代码

uv python install 3.13  # 安装3.13版本python
uv venv --python 3.13   # 创建3.13版本python虚拟环境

2.3.3 启动虚拟环境

.\.venv\Scripts\activate

在这里插入图片描述

安装需要的包

uv pip install pdf2zh_next pypdf flask -i https://pypi.tuna.tsinghua.edu.cn/simple

粘贴进去后enter,等待就好
在这里插入图片描述

2.3.4 测试安装并启动gui

在命令行输入pdf2zh_next --gui进入图形界面

在这里插入图片描述
拖一个英文文献进去,照着下图改【选bing,别选Google】,最后Translate,等待几分钟

在这里插入图片描述
翻译完后是这个样子
在这里插入图片描述

回到终端,连续Ctrl+C几次,终止程序。然后粘贴下述代码

copy "%USERPROFILE%\.config\pdf2zh\config.v3.toml" config.toml

在这里插入图片描述
运行后会发现多了个config.toml文件。还有个pdf2zh_files文件夹应该是刚刚的翻译操作得到的,不用管它

在这里插入图片描述

2.3.5 Zotero软件中进行英文文献翻译

在终端执行

uv run python server.py #注意了:这行命令执行了之后才能在Zotero软件中进行翻译操作

在这里插入图片描述

2.4 回到Zotero软件进行翻译

随便选择一篇英文文献,右键后单击翻译PDF,等待即可。

在这里插入图片描述

翻译结束后我的终端是这样的,不晓得为啥我的translate是77。但是不影响翻译结果我就没管了
在这里插入图片描述
没有文献需要翻译了就回到终端Ctrl+C结束就好了

2.5 补充

如果不想每次要翻译文献的时候都进入终端输入那行代码,可以移步这个视频的10:53开始观看
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87935.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87935.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87935.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用U盘启动制作centos系统最常见报错,系统卡住无法继续问题(手把手)

一、按照操作系统centos7报错如下&#xff08;U盘&#xff09; 按照系统报错如下&#xff1a; ERROR: could not insert ‘floppy’; ERROR: could not insert ‘edd’ : No这种报错很常见&#xff0c;基本上就是u盘启动路径找不到导致&#xff0c;遇到次数比较多所以也比较好解…

C#中的BindingList有什么作用?

在C#中&#xff0c;BindingList<T> 是一个非常重要的集合类&#xff0c;位于 System.ComponentModel 命名空间&#xff0c;主要用于实现数据绑定&#xff08;Data Binding&#xff09;场景。1. 核心作用BindingList<T> 是 List<T> 的增强版&#xff0c;主要提…

Python爬取知乎评论:多线程与异步爬虫的性能优化

1. 知乎评论爬取的技术挑战 知乎的评论数据通常采用动态加载&#xff08;Ajax&#xff09;&#xff0c;这意味着直接使用**<font style"color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">requests</font>****<font style"color:rg…

软件系统测试的基本流程

软件系统测试流程是确保软件质量的规范化过程&#xff0c;涵盖从测试准备到最终上线评估的全周期&#xff0c;通常分为以下6个核心阶段&#xff0c;各阶段紧密衔接、形成闭环&#xff1a; 一、测试启动与规划阶段 核心目标&#xff1a;明确“测什么、谁来测、怎么测”&#xff…

使用Linux操作MySQL数据库分批导出数据为.SQL文件

当数据库某张数据量非常大的表进行其他操作&#xff0c;需要先进行导出时&#xff1b; 先用linux进入操作环境&#xff0c; 1.添加一个export_mysql_batches.sh脚本文件&#xff0c; #!/bin/bash# 数据库连接配置 DB_HOST"36.33.0.138:3306" DB_USER"devuser&qu…

LeetCode 算法题解:链表与二叉树相关问题 打打卡

LeetCode 算法题解&#xff1a;链表与二叉树相关问题 在算法学习和实践中&#xff0c;LeetCode 是一个非常好的平台&#xff0c;它包含了各种各样的算法题目&#xff0c;有助于我们提升编程能力和解决问题的能力。本文将详细讲解在 leetcoding.cpp 文件中实现的一些链表和二叉树…

故宫票价监控接口分析(一)

故宫票价监控接口分析(一) 对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698 本文内容仅供学习和参考之用,不得用于商业目的。作者对文中内容的准确性、完整…

AWS OpenSearch Dev Tools使用

# 创建通用索引模版 PUT _template/aws-waf_logs_template {"index_patterns": ["aws-waf-logs-*"],"mappings": {"properties": {"timestamp": {"type": "date"}}} }# 设置单个索引格式 PUT /aws-waf-…

git-安装 Gerrit Hook 自动生成changeid

要在 Git 中安装 Gerrit Hook 以自动生成 Change-ID&#xff0c;可以按照以下步骤操作&#xff1a; 全局钩子配置&#xff08;推荐&#xff09; 创建全局钩子目录并下载 Gerrit 提供的 commit-msg 钩子脚本&#xff0c;确保所有仓库共享该配置&#xff1a; mkdir -p ~/.githook…

Excel 的多线程特性

Excel 本身并不是完全多线程的应用程序&#xff0c;但它在某些操作和功能上支持多线程处理。以下是对 Excel 是否多线程的详细解答&#xff0c;结合你之前提到的 VBA/COM 自动化代码和受保护视图问题&#xff0c;提供清晰且准确的分析。 Excel 的多线程特性计算引擎的多线程支持…

【嵌入式ARM汇编】-操作系统基础(一)

操作系统基础(一) 文章目录 操作系统基础(一)1、操作系统架构概述2、用户模式与内核模式3、进程4、系统调用5、对象和句柄我们想要逆向的程序几乎从来不会在真空中执行。相反,程序通常在正在运行的操作系统(例如 Linux、Windows 或 macOS)的上下文中运行。因此,了解这些…

[创业之路-474]:企业经营层 - 小米与华为多维对比分析(2025年视角),以后不要把这两家公司放在同一个维度上 进行比较了

一、行业定位与市场角色不同华为&#xff1a;用技术手段解决行业的难题&#xff0c;顺便赚钱技术驱动型硬科技企业&#xff1a;以通信设备起家&#xff0c;延伸至智能手机、芯片、操作系统&#xff08;鸿蒙&#xff09;、云计算、智能汽车等领域&#xff0c;构建“云-管-端”全…

C#基础篇(06)抽象类与接口详解区别

抽象类是 C# 面向对象编程中的一个重要概念&#xff0c;它介于普通类和接口之间&#xff0c;提供了一种定义部分实现并要求派生类完成其余部分的机制。一、C# 中的抽象类抽象类是 C# 面向对象编程中的一个重要概念&#xff0c;它介于普通类和接口之间&#xff0c;提供了一种定义…

使用Python将PDF转换成word、PPT

在现代企业环境中,文档格式的转换是一项普遍且关键的需求。PDF(Portable Document Format)作为一种最终的、通常不可编辑的“打印”状态格式,被广泛用于分发和归档。然而,内容的创建、协作和修改主要在Microsoft Office套件中进行,特别是Word(DOCX)和PowerPoint(PPTX)…

香港风水(原生)林地的逻辑分类器

风水林是香港的原生林地&#xff0c;由于地处偏远、地形崎岖以及当地居民的信仰&#xff0c;这些林地得以保存完好。在香港&#xff0c;我们可以追溯到1924年的航拍图像记录&#xff0c;这些黑白航拍图像已经帮助我们划分和区分了林地、草地和灌木丛。然后&#xff0c;通过二战…

[Swarm] Result对象 | 智能体切换 | Response对象 | muduo review

第5章&#xff1a;结果对象 欢迎回到swarm&#xff01; 在上一章第4章&#xff1a;功能中&#xff0c;我们学习了如何通过定义Python功能赋予智能体技能。我们见证了当AI决策调用时&#xff0c;Swarm框架如何执行这些功能。 当前&#xff0c;我们的功能仅返回简单字符串如&q…

[2-02-02].第04节:环境搭建 - Linux搭建ES集群环境

ElasticSearch学习大纲 一、ES集群规划&#xff1a; 关系型数据库&#xff08;比如Mysql&#xff09;非关系型数据库&#xff08;Elasticsearch&#xff09;非关系型数据库&#xff08;Elasticsearch&#xff09;centos7hadoop103192.168.148.3centos7hadoop104192.168.148.4c…

部署并运行Spike-Driven-Transformer或QKFormer

部署并运行Spike-Driven-Transformer或QKFormer 我将指导你如何部署和运行Spike-Driven-Transformer或QKFormer代码,并在CIFAR-10、CIFAR-100和ImageNet-1K数据集上进行训练和测试。 1. 环境准备 首先需要设置Python环境并安装必要的依赖项: # 创建conda环境(推荐) con…

爬虫-request处理POST

1.概念很少在URL写参数&#xff0c;都在form data里面POST 的主要作用是将客户端的数据提交给服务器。这些数据可以是表单输入、文件内容、JSON 数据、XML 数据等等POST 请求携带的数据放在 HTTP 消息的请求体中。这与 GET 请求形成鲜明对比&#xff1a;GET 请求的数据通常附加…

免U盘一键重装系统

免U盘一键重装系统 简单介绍 详细的看GitHub项目首页 GitHub地址 # 下载脚本 curl -O https://cnb.cool/bin456789/reinstall/-/git/raw/main/reinstall.sh || wget -O reinstall.sh $_ # 重装系统 bash reinstall.sh ubuntu # 重启 rebootPS: 重启过程中, 可能需要手动选择r…