Chandra OCR入门指南:从HuggingFace加载权重到vLLM推理服务的完整迁移路径

news2026/3/23 3:29:50
Chandra OCR入门指南从HuggingFace加载权重到vLLM推理服务的完整迁移路径如果你手头有一堆扫描的合同、PDF报告、数学试卷或者带表格的文档想把它们一键转换成结构清晰的Markdown、HTML或JSON那么Chandra OCR就是你正在寻找的工具。这个由Datalab.to在2025年10月开源的「布局感知」OCR模型用大白话说就是它不仅能识别图片里的文字还能看懂文档的排版结构。表格、数学公式、手写体、表单里的复选框这些传统OCR头疼的东西它都能一次搞定。更让人心动的是官方测试显示它在olmOCR基准上拿到了83.1的综合分这个成绩比GPT-4o和Gemini Flash 2还要好。而且它只需要4GB显存就能跑起来对硬件相当友好。今天这篇文章我就带你走一遍完整的Chandra OCR使用路径从最基础的HuggingFace权重加载开始一直到搭建高性能的vLLM推理服务。无论你是想快速体验一下还是打算把它集成到自己的生产环境里都能找到对应的方案。1. 快速了解Chandra为什么值得关注在开始动手之前我们先花几分钟了解一下Chandra到底有什么特别之处。知道工具能做什么、擅长什么用起来才会更得心应手。1.1 核心能力不止是文字识别传统的OCR工具就像是个识字机器——它能把图片里的文字提取出来但也就到此为止了。至于这些文字是怎么排版的、哪里是标题、哪里是表格、公式长什么样它一概不知。Chandra不一样它是个懂排版的OCR。我把它核心能力总结为三点第一识别精度高。在官方测试的八个项目中它平均得分83.1。特别是在一些难点项目上表现突出老扫描数学文档80.3分第一名表格识别88.0分第一名长小字识别92.3分第一名第二支持元素多。下面这些复杂元素它都能处理表格能识别表格结构输出带格式的Markdown表格数学公式LaTeX格式的公式识别手写体连笔、草书都能认表单元素复选框、单选按钮这些交互元素图片标题能识别图片和对应的说明文字第三输出格式全。它不会只给你一堆文字而是同时输出三种格式Markdown直接用于文档、笔记HTML适合网页展示JSON方便程序处理里面还包含每个元素的坐标信息1.2 技术架构与性能Chandra基于ViT-EncoderDecoder的视觉语言架构这个技术路线让它既能看懂图像内容又能理解语言结构。在语言支持方面官方验证了40多种语言其中中文、英文、日文、韩文、德文、法文、西班牙文的表现最好。这意味着它是个真正的多语言OCR工具。推理速度方面单页处理大约8k token的内容平均只需要1秒钟。如果你用vLLM后端并启用多GPU并行速度还能更快。1.3 许可与商业使用这是很多开发者关心的问题。Chandra的代码采用Apache 2.0许可证权重使用OpenRAIL-M许可证。对于商业使用政策很友好初创公司年营收或融资额在200万美元以内的可以免费商用超过这个额度的需要单独授权这意味着大多数中小企业和个人项目都可以放心使用。2. 环境准备与快速体验好了理论部分了解得差不多了现在让我们动手试试。我会带你用两种方式快速体验Chandra最简单的pip安装方式和更稳定的Docker方式。2.1 基础环境要求在开始之前先确认你的环境是否符合要求硬件要求GPU推荐NVIDIA GPU4GB显存起步RTX 3060就够用内存至少8GB系统内存存储需要约5GB空间存放模型权重软件要求Python 3.8或更高版本CUDA 11.8或更高版本如果用GPUpip包管理工具重要提醒如果你有多张GPU卡需要注意Chandra可能在某些多卡环境下有兼容性问题。官方文档特别提醒两张卡一张卡起不来建议先单卡运行测试。2.2 方法一pip快速安装最简单这是最快上手的方式适合想先体验一下功能的用户。打开你的终端执行以下命令# 创建并激活虚拟环境推荐 python -m venv chandra-env source chandra-env/bin/activate # Linux/Mac # 或者 chandra-env\Scripts\activate # Windows # 安装chandra-ocr包 pip install chandra-ocr # 安装完成后验证安装 chandra --version安装完成后Chandra提供了三种使用方式1. 命令行工具CLI# 识别单张图片 chandra ocr path/to/your/image.jpg # 识别整个文件夹 chandra ocr path/to/folder --output-format markdown # 更多选项 chandra ocr --help2. Streamlit交互界面# 启动Web界面 chandra serve然后在浏览器中打开http://localhost:8501就能看到一个直观的图形界面可以上传图片、调整参数、查看结果。3. Python APIfrom chandra import ChandraOCR # 初始化模型 ocr ChandraOCR() # 识别图片 result ocr.recognize(document.jpg) print(result.markdown) # 获取Markdown格式结果 print(result.html) # 获取HTML格式结果 print(result.json) # 获取JSON格式结果2.3 方法二Docker部署最稳定如果你想要一个隔离的、可重复的环境或者打算在生产环境使用Docker是更好的选择。# 拉取官方镜像 docker pull datalab/chandra-ocr:latest # 运行容器GPU版本 docker run --gpus all -p 8501:8501 -v $(pwd)/data:/data datalab/chandra-ocr:latest # 或者CPU版本速度会慢一些 docker run -p 8501:8501 -v $(pwd)/data:/data datalab/chandra-ocr:latest-cpuDocker方式的好处是所有依赖都打包好了不会出现在我机器上能运行的问题。而且方便迁移和扩展。2.4 第一次测试看看效果如何安装完成后我们做个简单测试。找一张带表格的图片或者PDF运行识别命令# 如果你用pip安装 chandra ocr test_document.jpg --output-dir ./results # 如果你用Docker先把文件放到挂载的volume里 # 假设你启动时用了 -v $(pwd)/data:/data # 那么把 test_document.jpg 放到当前目录的data文件夹里查看生成的结果你会看到三个文件test_document.md- Markdown格式保留了表格结构test_document.html- HTML格式可以直接在浏览器中查看test_document.json- JSON格式包含详细的元素信息和坐标3. 从HuggingFace加载权重深入理解模型如果你不仅仅想使用Chandra还想了解它的内部工作原理或者需要自定义一些功能那么直接从HuggingFace加载权重是个好选择。这种方式给你最大的灵活性。3.1 理解Chandra的模型结构在开始代码之前我们先简单了解一下Chandra的模型架构。它主要由两部分组成视觉编码器ViT-Encoder负责看图片把图像转换成一系列的特征向量文本解码器Decoder负责写文字根据视觉特征生成结构化的文本输出这种架构让它既能理解图像内容又能生成格式正确的文本。3.2 直接使用HuggingFace Transformers最直接的方式是使用HuggingFace的Transformers库import torch from PIL import Image from transformers import AutoProcessor, AutoModelForVision2Seq # 加载处理器和模型 processor AutoProcessor.from_pretrained(datalab/chandra-ocr) model AutoModelForVision2Seq.from_pretrained(datalab/chandra-ocr) # 如果有GPU移到GPU上 device cuda if torch.cuda.is_available() else cpu model.to(device) # 准备图片 image Image.open(document.jpg).convert(RGB) # 处理图片并生成文本 inputs processor(imagesimage, return_tensorspt).to(device) with torch.no_grad(): generated_ids model.generate(**inputs, max_new_tokens1024) # 解码结果 generated_text processor.batch_decode(generated_ids, skip_special_tokensTrue)[0] print(generated_text)这段代码做了以下几件事从HuggingFace加载Chandra的处理器和模型把图片转换成模型能理解的格式让模型生成识别结果把生成的token解码成可读的文本3.3 自定义推理流程有时候你可能需要更精细的控制。比如想要调整生成参数或者处理批量图片from transformers import GenerationConfig # 自定义生成配置 generation_config GenerationConfig( max_new_tokens2048, # 最大生成长度 num_beams5, # 束搜索宽度提高准确性 temperature0.7, # 创造性程度 do_sampleFalse, # 是否采样 early_stoppingTrue, # 提前停止 ) # 批量处理函数 def batch_process(image_paths, batch_size4): results [] for i in range(0, len(image_paths), batch_size): batch_paths image_paths[i:ibatch_size] images [Image.open(path).convert(RGB) for path in batch_paths] # 批量处理 inputs processor(imagesimages, return_tensorspt, paddingTrue).to(device) with torch.no_grad(): generated_ids model.generate( **inputs, generation_configgeneration_config ) # 批量解码 batch_results processor.batch_decode(generated_ids, skip_special_tokensTrue) results.extend(batch_results) return results # 使用示例 image_list [doc1.jpg, doc2.jpg, doc3.jpg] all_results batch_process(image_list) for i, result in enumerate(all_results): print(f文档{i1}结果:\n{result[:200]}...\n)3.4 处理特殊输出格式Chandra的一个强大功能是能同时输出多种格式。如果你想直接获取这些格式可以这样处理import json def process_with_formats(image_path): # 基础识别 image Image.open(image_path).convert(RGB) inputs processor(imagesimage, return_tensorspt).to(device) with torch.no_grad(): generated_ids model.generate(**inputs, max_new_tokens2048) raw_output processor.batch_decode(generated_ids, skip_special_tokensTrue)[0] # 解析多格式输出 # Chandra的输出通常包含特殊的分隔符来区分不同格式 if ---MARKDOWN--- in raw_output: parts raw_output.split(---MARKDOWN---) markdown_part parts[1].split(---HTML---)[0] if len(parts) 1 else html_part parts[1].split(---HTML---)[1].split(---JSON---)[0] if len(parts) 1 else json_part parts[1].split(---JSON---)[1] if ---JSON--- in parts[1] else # 尝试解析JSON try: json_data json.loads(json_part.strip()) if json_part.strip() else {} except: json_data {} return { markdown: markdown_part.strip(), html: html_part.strip(), json: json_data, raw: raw_output } return {raw: raw_output} # 使用示例 result process_with_formats(document_with_table.jpg) print(Markdown表格:) print(result[markdown]) print(\nJSON结构:) print(json.dumps(result[json], indent2, ensure_asciiFalse))这种方式给你最大的灵活性但需要自己处理更多的细节。适合需要深度定制或者集成到现有系统中的场景。4. 部署vLLM推理服务生产级解决方案如果你需要处理大量的文档或者想要一个高性能、可扩展的OCR服务那么vLLM是更好的选择。vLLM是一个专门为大规模语言模型推理优化的服务框架能显著提高吞吐量和降低延迟。4.1 为什么选择vLLM在决定使用vLLM之前你可能想知道它比直接使用HuggingFace Transformers好在哪里对比项HuggingFace TransformersvLLM推理服务吞吐量一般高优化了注意力机制和内存管理延迟较高低支持连续批处理和流水线并发处理需要自己实现内置支持内存效率一般高使用PagedAttention技术部署复杂度简单中等适用场景开发、测试、小规模使用生产环境、大规模使用简单来说如果你的应用场景是需要同时处理很多文档对响应速度要求高希望服务稳定可靠需要方便地扩展资源那么vLLM是值得投入的学习成本。4.2 安装和配置vLLM首先我们需要安装vLLM。注意vLLM对CUDA版本有要求建议使用CUDA 11.8或12.1。# 创建新的虚拟环境避免依赖冲突 python -m venv vllm-env source vllm-env/bin/activate # 安装vLLM根据你的CUDA版本选择 # CUDA 11.8 pip install vllm # 或者CUDA 12.1 pip install vllm --extra-index-url https://download.pytorch.org/whl/cu121 # 验证安装 python -c import vllm; print(fvLLM版本: {vllm.__version__})4.3 启动Chandra的vLLM服务vLLM提供了命令行工具来启动模型服务非常方便# 基础启动命令 python -m vllm.entrypoints.openai.api_server \ --model datalab/chandra-ocr \ --served-model-name chandra-ocr \ --port 8000 \ --host 0.0.0.0 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9 # 如果你有多张GPU可以增加tensor-parallel-size # --tensor-parallel-size 2 # 使用2张GPU # 如果你想限制最大token数 # --max-model-len 8192 # 如果你想启用连续批处理提高吞吐量 # --enable-chunked-prefill启动后你会看到类似这样的输出INFO 07-28 10:30:15 api_server.py:137] Starting OpenAI API server... INFO 07-28 10:30:15 api_server.py:138] Uvicorn running on http://0.0.0.0:8000 INFO 07-28 10:30:15 api_server.py:139] Docs: http://0.0.0.0:8000/docs服务启动后可以通过http://localhost:8000/docs查看API文档。4.4 使用OpenAI兼容的API调用vLLM服务提供了OpenAI兼容的API这意味着你可以用和调用ChatGPT类似的方式来调用Chandraimport base64 from openai import OpenAI # 初始化客户端 client OpenAI( base_urlhttp://localhost:8000/v1, api_keytoken-abc123 # vLLM的api_key可以任意设置 ) def ocr_with_vllm(image_path): # 读取图片并编码为base64 with open(image_path, rb) as image_file: base64_image base64.b64encode(image_file.read()).decode(utf-8) # 构建消息 messages [ { role: user, content: [ {type: text, text: 请识别这张图片中的内容输出Markdown格式。}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ] # 调用API response client.chat.completions.create( modelchandra-ocr, messagesmessages, max_tokens2048, temperature0.1 # 低temperature让输出更确定 ) return response.choices[0].message.content # 使用示例 result ocr_with_vllm(document.jpg) print(result)4.5 批量处理与性能优化vLLM的真正优势在于处理大量请求。下面是一个批量处理的例子import concurrent.futures import time from pathlib import Path class ChandraVLlmClient: def __init__(self, base_urlhttp://localhost:8000/v1): self.client OpenAI( base_urlbase_url, api_keytoken-abc123 ) def process_single(self, image_path): 处理单张图片 with open(image_path, rb) as f: base64_image base64.b64encode(f.read()).decode(utf-8) messages [ { role: user, content: [ {type: text, text: 识别图片内容输出Markdown格式。}, { type: image_url, image_url: {url: fdata:image/jpeg;base64,{base64_image}} } ] } ] try: response self.client.chat.completions.create( modelchandra-ocr, messagesmessages, max_tokens1024, temperature0.1 ) return response.choices[0].message.content except Exception as e: return f处理失败: {str(e)} def process_batch(self, image_paths, max_workers4): 批量处理图片 results {} with concurrent.futures.ThreadPoolExecutor(max_workersmax_workers) as executor: # 提交所有任务 future_to_path { executor.submit(self.process_single, path): path for path in image_paths } # 收集结果 for future in concurrent.futures.as_completed(future_to_path): path future_to_path[future] try: results[str(path)] future.result() except Exception as e: results[str(path)] f异常: {str(e)} return results # 使用示例 if __name__ __main__: client ChandraVLlmClient() # 找到所有图片文件 image_dir Path(./documents) image_files list(image_dir.glob(*.jpg)) list(image_dir.glob(*.png)) print(f找到 {len(image_files)} 个文档需要处理) # 批量处理并计时 start_time time.time() results client.process_batch(image_files[:10], max_workers4) # 先处理前10个 elapsed_time time.time() - start_time print(f处理完成耗时: {elapsed_time:.2f}秒) print(f平均每个文档: {elapsed_time/len(results):.2f}秒) # 保存结果 output_dir Path(./results) output_dir.mkdir(exist_okTrue) for path_str, content in results.items(): path Path(path_str) output_path output_dir / f{path.stem}.md output_path.write_text(content, encodingutf-8) print(f已保存: {output_path})4.6 高级配置与监控对于生产环境你可能还需要一些高级配置# 完整的生产环境启动命令示例 python -m vllm.entrypoints.openai.api_server \ --model datalab/chandra-ocr \ --served-model-name chandra-ocr \ --port 8000 \ --host 0.0.0.0 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.85 \ --max-num-seqs 256 \ --max-num-batched-tokens 4096 \ --enable-chunked-prefill \ --metric-interval-ms 60000 \ --log-requests \ --log-stats这些参数的含义--max-num-seqs 256最大并发序列数--max-num-batched-tokens 4096每批最大token数--enable-chunked-prefill启用分块预填充提高吞吐量--metric-interval-ms 60000每分钟输出一次性能指标--log-requests记录所有请求日志--log-stats记录统计信息5. 实际应用案例与技巧了解了基本用法后我们来看看Chandra在实际工作中能解决哪些具体问题。我会分享几个真实的场景和对应的使用技巧。5.1 场景一批量处理扫描合同假设你是一家公司的法务助理手头有几百份扫描的PDF合同需要数字化。传统方式是手动录入或者用普通OCR识别后再人工整理格式费时费力。用Chandra可以这样处理import os from pathlib import Path from chandra import ChandraOCR class ContractProcessor: def __init__(self): self.ocr ChandraOCR() def process_contracts(self, input_dir, output_dir): 批量处理合同文档 input_path Path(input_dir) output_path Path(output_dir) output_path.mkdir(exist_okTrue) # 支持的文件格式 supported_formats [.pdf, .jpg, .jpeg, .png, .tiff] for format in supported_formats: for file_path in input_path.glob(f*{format}): print(f正在处理: {file_path.name}) try: # 识别文档 result self.ocr.recognize(str(file_path)) # 保存Markdown版本方便阅读 md_file output_path / f{file_path.stem}.md md_file.write_text(result.markdown, encodingutf-8) # 保存JSON版本方便程序处理 json_file output_path / f{file_path.stem}.json import json json_file.write_text(json.dumps(result.json, indent2, ensure_asciiFalse), encodingutf-8) print(f 已完成: {file_path.name}) except Exception as e: print(f 处理失败 {file_path.name}: {str(e)}) print(批量处理完成) # 使用示例 processor ContractProcessor() processor.process_contracts(./scanned_contracts, ./digital_contracts)技巧提示对于PDF文件Chandra会自动处理每一页如果合同有签名区域可以在后处理阶段特别标注JSON格式保留了每个元素的坐标方便后续高亮或验证5.2 场景二学术论文公式提取研究人员经常需要从PDF论文中提取数学公式。传统OCR对公式的识别效果很差而Chandra在这方面表现优异。import re from chandra import ChandraOCR class FormulaExtractor: def __init__(self): self.ocr ChandraOCR() def extract_formulas(self, pdf_path): 从PDF中提取数学公式 result self.ocr.recognize(pdf_path) # 从Markdown中提取LaTeX公式 # Chandra通常用 $...$ 或 $$...$$ 标记公式 formulas [] # 查找行内公式 inline_formulas re.findall(r\$(.*?)\$, result.markdown) formulas.extend([f${f}$ for f in inline_formulas]) # 查找块级公式 block_formulas re.findall(r\$\$(.*?)\$\$, result.markdown, re.DOTALL) formulas.extend([f$${f}$$ for f in block_formulas]) return { total_formulas: len(formulas), formulas: formulas, markdown: result.markdown } def export_to_latex(self, formulas, output_file): 导出为LaTeX文档 latex_template r\documentclass{article} \usepackage{amsmath} \begin{document} 提取的数学公式 for i, formula in enumerate(formulas[formulas], 1): latex_template f公式 {i}:\n latex_template f{formula}\n\n latex_template r\end{document} with open(output_file, w, encodingutf-8) as f: f.write(latex_template) print(f已导出 {len(formulas[formulas])} 个公式到 {output_file}) # 使用示例 extractor FormulaExtractor() math_paper math_paper.pdf formulas extractor.extract_formulas(math_paper) print(f从论文中提取了 {formulas[total_formulas]} 个公式) for i, formula in enumerate(formulas[formulas][:5], 1): # 显示前5个 print(f{i}. {formula[:50]}...) # 导出为LaTeX extractor.export_to_latex(formulas, extracted_formulas.tex)5.3 场景三表格数据提取与转换表格是文档中最常见也最难处理的部分。Chandra的表格识别准确率高达88%这在OCR领域是相当出色的成绩。import pandas as pd import json from chandra import ChandraOCR class TableProcessor: def __init__(self): self.ocr ChandraOCR() def extract_tables(self, document_path): 从文档中提取所有表格 result self.ocr.recognize(document_path) tables [] # 方法1从Markdown中提取表格 lines result.markdown.split(\n) current_table [] in_table False for line in lines: if | in line and --- in line: # 表格开始 in_table True if current_table: # 保存上一个表格 tables.append(\n.join(current_table)) current_table [] current_table.append(line) elif in_table and | in line: # 表格行 current_table.append(line) elif in_table: # 表格结束 if current_table: tables.append(\n.join(current_table)) current_table [] in_table False # 方法2从JSON中提取表格数据更准确 json_tables [] if hasattr(result, json) and result.json: # 遍历所有元素找到表格 for element in result.json.get(elements, []): if element.get(type) table: json_tables.append(element) return { markdown_tables: tables, json_tables: json_tables, total_tables: len(tables) len(json_tables) } def convert_to_excel(self, tables, output_file): 将表格转换为Excel with pd.ExcelWriter(output_file, engineopenpyxl) as writer: for i, table_data in enumerate(tables[json_tables]): # 从JSON表格数据创建DataFrame rows table_data.get(data, []) if rows: # 假设第一行是表头 headers rows[0] data_rows rows[1:] if len(rows) 1 else [] df pd.DataFrame(data_rows, columnsheaders) sheet_name fTable_{i1} df.to_excel(writer, sheet_namesheet_name, indexFalse) print(f已导出 {len(tables[json_tables])} 个表格到 {output_file}) def compare_with_manual(self, auto_result, manual_result): 对比自动识别和人工录入的结果 # 这里可以添加对比逻辑 # 比如计算准确率、召回率等 pass # 使用示例 processor TableProcessor() document financial_report.pdf tables processor.extract_tables(document) print(f文档中包含 {tables[total_tables]} 个表格) print(fMarkdown格式表格: {len(tables[markdown_tables])} 个) print(fJSON格式表格数据: {len(tables[json_tables])} 个) # 显示第一个表格 if tables[markdown_tables]: print(\n第一个表格的Markdown格式:) print(tables[markdown_tables][0]) # 导出到Excel if tables[json_tables]: processor.convert_to_excel(tables, extracted_tables.xlsx)6. 总结与建议我们走完了从HuggingFace权重加载到vLLM推理服务的完整路径。现在来回顾一下关键点并给出一些实用建议。6.1 不同场景的选择建议根据你的具体需求可以选择不同的使用方式1. 快速体验和原型开发推荐方式pip install chandra-ocr优点安装简单有CLI和Web界面适合个人使用、功能测试、小批量处理2. 深度集成和自定义开发推荐方式HuggingFace Transformers直接加载优点完全控制灵活性最高适合需要定制识别逻辑、集成到现有系统、研究用途3. 生产环境和高并发场景推荐方式vLLM推理服务优点高性能、高吞吐量、易于扩展适合企业应用、批量处理、API服务6.2 性能优化建议在实际使用中这些技巧可以帮助你获得更好的体验硬件配置GPU选择RTX 306012GB是个性价比很高的选择内存至少16GB系统内存处理大文档时更流畅存储使用SSD硬盘加快模型加载速度软件优化批量处理尽量一次性处理多个文档而不是一个一个处理图片预处理如果图片质量差可以先进行简单的预处理调整大小、增强对比度缓存机制对于重复处理的文档可以缓存识别结果异步处理对于Web服务使用异步处理避免阻塞参数调优# 在初始化时调整这些参数 ocr ChandraOCR( devicecuda, # 使用GPU precisionfp16, # 使用半精度节省显存 cache_dir./model_cache # 指定缓存目录 )6.3 常见问题解决在实际使用中你可能会遇到这些问题问题1显存不足症状程序崩溃提示CUDA out of memory解决减小批量大小使用precisionfp16半精度尝试CPU模式速度会慢问题2识别结果不理想症状表格结构混乱、公式识别错误解决检查图片质量确保清晰度足够尝试调整图片方向有些文档需要旋转对于特别复杂的文档可以分区域识别问题3处理速度慢症状单个文档处理时间过长解决确保使用GPU而不是CPU检查是否有其他程序占用GPU资源考虑升级到vLLM服务6.4 未来展望Chandra作为一个新开源的OCR模型已经展现出了强大的能力。基于目前的发展趋势我认为这些方向值得关注模型轻量化可能会有更小的模型版本适合移动端或边缘设备多模态扩展结合语音、视频等多模态输入领域专业化针对特定领域医疗、法律、金融的优化版本实时处理支持视频流中的文字实时识别无论你是开发者、研究人员还是普通用户Chandra都提供了一个强大的OCR解决方案。它的开源性质和友好的商业许可让更多人能够享受到先进的OCR技术带来的便利。从简单的pip安装到复杂的vLLM服务部署从单张图片处理到批量文档自动化Chandra都能胜任。希望这篇指南能帮助你快速上手在实际工作中发挥它的价值。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

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

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…