EasyAnimateV5-7b-zh-InP开源大模型实战:对接OSS对象存储自动归档生成视频

news2026/5/19 22:54:08
EasyAnimateV5-7b-zh-InP开源大模型实战对接OSS对象存储自动归档生成视频1. 从图片到视频EasyAnimateV5-7b-zh-InP模型初探你有没有想过一张静态的照片能在几秒钟内“活”过来变成一段生动的短视频这听起来像是科幻电影里的场景但现在通过EasyAnimateV5-7b-zh-InP这个开源大模型我们每个人都能轻松实现。这个模型的核心能力非常明确图生视频。简单来说你给它一张图片它就能根据这张图片的内容生成一段大约6秒钟的动态视频。这和我们平时接触的“文字生成视频”或者“视频风格转换”模型完全不同它专注于一件事——让图片动起来。想象一下这些应用场景你有一张漂亮的风景照想让它变成一段有云彩飘动、水面波光粼粼的动态视频电商平台上商品主图可以变成展示产品细节的短视频社交媒体上一张普通的自拍照可以变成有表情变化的动态头像这个模型占用22GB的存储空间训练标准是49帧、每秒8帧生成的视频时长大概在6秒左右。这个时长对于短视频平台、产品展示、社交媒体分享来说刚刚好——足够展示动态效果又不会太长让人失去耐心。更实用的是它支持多种分辨率输出512、768、1024。这意味着你可以根据不同的使用场景生成不同清晰度的视频。比如社交媒体分享用512分辨率就够了产品展示可能需要768而专业用途可能需要1024的高清版本。2. 快速上手Web界面与核心参数详解2.1 最简单的开始方式Web界面对于大多数用户来说最方便的方式就是通过Web界面来使用EasyAnimate。服务地址是http://183.93.148.87:7860打开浏览器就能直接使用。整个操作流程非常简单只需要四步打开浏览器在地址栏输入上面的网址选择模型页面加载后系统已经预置了EasyAnimateV5-7b-zh-InP模型通常不需要额外选择上传图片并输入描述这是最关键的一步。你需要上传一张图片然后在Prompt框中用文字描述你希望图片怎么“动”起来点击生成等待几十秒到几分钟视频就生成了让我给你一个具体的例子。假设你上传了一张森林里站着一位年轻女性的照片你可以在Prompt框中这样写A young woman with beautiful clear eyes and blonde hair stands in the forest, wearing a white dress and a crown. Her expression is serene. High quality, masterpiece, best quality这段描述告诉模型主体是一位年轻女性她有美丽的眼睛和金色头发站在森林里穿着白色裙子和戴着王冠表情宁静。最后还强调了要高质量的输出。2.2 理解核心参数让生成效果更可控虽然Web界面很简单但了解几个关键参数能让你更好地控制生成效果。下面这个表格帮你快速理解参数默认值作用调整建议Sampling Steps50生成步数数值越高画面越精细日常使用30-50追求高质量可以调到80-100Width / Height672×384视频的宽度和高度必须是16的倍数768×432是比较平衡的选择Animation Length49视频的总帧数帧数越多视频越长但生成时间也越长CFG Scale6.0提示词的影响力强度数值越高模型越“听话”但可能失去创意建议5-8之间Seed-1随机种子控制随机性-1表示完全随机固定一个数字可以复现相同结果Negative Prompt负向提示词是个很有用的功能。你可以告诉模型不想要什么比如Blurring, mutation, deformation, distortion, dark and solid, comics, text subtitles, line art, static, ugly, error, messy code这段提示词的意思是不要模糊、不要突变、不要变形、不要扭曲、不要太暗太实、不要漫画风格、不要文字字幕、不要线稿、不要静态、不要丑陋、不要错误、不要乱码。3. 自动化实战Python API对接与视频生成3.1 为什么要用APIWeb界面适合偶尔使用但如果你需要批量处理图片或者想把图生视频功能集成到自己的应用里API就是必须的。通过API你可以用程序自动完成所有操作效率提升不是一点半点。想象这些场景电商平台每天有上千张商品图需要生成展示视频社交媒体管理工具需要为每篇帖子自动生成动态封面个人相册想要把所有照片都变成动态回忆这些场景下手动操作Web界面根本不现实API自动化才是解决方案。3.2 基础API调用生成你的第一个程序化视频下面是一个完整的Python示例展示了如何通过API调用EasyAnimate生成视频import requests import json import time class EasyAnimateClient: def __init__(self, base_urlhttp://183.93.148.87:7860): self.base_url base_url self.api_endpoint f{base_url}/easyanimate/infer_forward def generate_video_from_image(self, image_path, prompt, output_pathNone): 从图片生成视频 参数: image_path: 图片文件路径 prompt: 描述视频内容的文本 output_path: 可选指定视频保存路径 返回: 生成的视频信息 # 读取图片并转换为base64 import base64 with open(image_path, rb) as image_file: image_base64 base64.b64encode(image_file.read()).decode(utf-8) # 准备请求数据 data { prompt_textbox: prompt, negative_prompt_textbox: Blurring, mutation, deformation, distortion, sampler_dropdown: Flow, sample_step_slider: 40, # 适当降低步数以加快生成 width_slider: 672, height_slider: 384, generation_method: Video Generation, length_slider: 49, cfg_scale_slider: 6.0, seed_textbox: -1, input_image: image_base64 # 传入base64编码的图片 } try: # 发送生成请求 print(f正在生成视频提示词: {prompt[:50]}...) start_time time.time() response requests.post(self.api_endpoint, jsondata, timeout300) result response.json() if save_sample_path in result: generation_time time.time() - start_time print(f✅ 视频生成成功耗时: {generation_time:.1f}秒) print(f 保存路径: {result[save_sample_path]}) # 如果有base64编码的视频数据可以解码保存 if base64_encoding in result: video_data base64.b64decode(result[base64_encoding]) if output_path: with open(output_path, wb) as f: f.write(video_data) print(f 视频已保存到: {output_path}) return result else: print(f❌ 生成失败: {result.get(message, 未知错误)}) return None except requests.exceptions.Timeout: print(⏰ 请求超时可能是生成时间过长) return None except Exception as e: print(f❌ 发生错误: {str(e)}) return None # 使用示例 if __name__ __main__: # 初始化客户端 client EasyAnimateClient() # 生成视频 result client.generate_video_from_image( image_pathforest_photo.jpg, promptA young woman with beautiful eyes stands in the forest, wearing a white dress, gentle breeze blowing her hair, output_pathgenerated_video.mp4 ) if result: print( 视频生成任务完成)这段代码做了几件重要的事情读取本地图片文件并转换为base64格式构造包含所有必要参数的请求数据发送POST请求到API端点处理响应保存生成的视频文件添加了超时处理和错误捕获3.3 批量处理自动化你的工作流单个视频生成很有用但真正的威力在于批量处理。下面我们扩展一下实现批量生成功能import os from concurrent.futures import ThreadPoolExecutor, as_completed class BatchVideoGenerator: def __init__(self, client, input_dir, output_dir): self.client client self.input_dir input_dir self.output_dir output_dir # 创建输出目录 os.makedirs(output_dir, exist_okTrue) def generate_for_single_image(self, image_file, prompt_template): 为单张图片生成视频 image_path os.path.join(self.input_dir, image_file) # 可以根据图片文件名生成对应的提示词 # 这里简单使用固定提示词实际可以根据需要定制 prompt prompt_template output_filename fvideo_{os.path.splitext(image_file)[0]}.mp4 output_path os.path.join(self.output_dir, output_filename) result self.client.generate_video_from_image( image_pathimage_path, promptprompt, output_pathoutput_path ) return image_file, result def batch_generate(self, prompt_template, max_workers2): 批量生成视频 # 获取所有图片文件 image_files [f for f in os.listdir(self.input_dir) if f.lower().endswith((.png, .jpg, .jpeg, .bmp))] if not image_files: print( 输入目录中没有找到图片文件) return [] print(f 找到 {len(image_files)} 张图片开始批量生成...) results [] completed 0 total len(image_files) # 使用线程池并发处理注意GPU资源有限并发数不宜过高 with ThreadPoolExecutor(max_workersmax_workers) as executor: # 提交所有任务 future_to_image { executor.submit(self.generate_for_single_image, img_file, prompt_template): img_file for img_file in image_files } # 处理完成的任务 for future in as_completed(future_to_image): image_file future_to_image[future] try: img_file, result future.result() completed 1 if result: print(f✅ [{completed}/{total}] {image_file} 生成成功) results.append((image_file, True, result.get(save_sample_path))) else: print(f❌ [{completed}/{total}] {image_file} 生成失败) results.append((image_file, False, None)) except Exception as e: print(f⚠️ [{completed}/{total}] {image_file} 处理异常: {str(e)}) results.append((image_file, False, None)) # 生成报告 success_count sum(1 for _, success, _ in results if success) print(f\n 批量生成完成成功: {success_count}/{total}失败: {total-success_count}) return results # 使用示例 if __name__ __main__: client EasyAnimateClient() generator BatchVideoGenerator( clientclient, input_dir./input_images, # 输入图片目录 output_dir./output_videos # 输出视频目录 ) # 批量生成 prompt_template A beautiful scene with dynamic elements, high quality, cinematic results generator.batch_generate(prompt_template, max_workers2)这个批量处理类提供了自动扫描输入目录中的图片文件并发处理控制并发数避免GPU过载进度跟踪和结果统计错误处理和日志记录4. 对接OSS实现视频自动归档存储4.1 为什么需要OSS存储当你的视频生成量上来之后本地存储很快就会成为问题存储空间有限视频文件占用大量磁盘不方便分享和访问缺乏备份数据丢失风险高难以与现有业务系统集成对象存储服务OSS解决了这些问题。它提供几乎无限的存储空间高可靠性和持久性方便的访问控制和分享与各种应用系统的集成能力4.2 完整的OSS集成方案下面是一个完整的实现将视频生成、OSS上传、元数据管理整合在一起import oss2 from datetime import datetime import hashlib import json class OSSVideoArchiver: def __init__(self, access_key_id, access_key_secret, endpoint, bucket_name): 初始化OSS客户端 参数: access_key_id: OSS访问密钥ID access_key_secret: OSS访问密钥 endpoint: OSS端点如 oss-cn-hangzhou.aliyuncs.com bucket_name: 存储桶名称 # 创建OSS客户端 auth oss2.Auth(access_key_id, access_key_secret) self.bucket oss2.Bucket(auth, endpoint, bucket_name) # 创建元数据存储目录 self.metadata_dir video_metadata/ print(f✅ OSS客户端初始化完成Bucket: {bucket_name}) def generate_file_key(self, original_filename, prompt, timestampNone): 生成唯一的文件存储键名 参数: original_filename: 原始文件名 prompt: 生成提示词 timestamp: 时间戳默认为当前时间 返回: 唯一的文件键名 if timestamp is None: timestamp datetime.now() # 使用时间戳、原始文件名和提示词的哈希生成唯一键名 timestamp_str timestamp.strftime(%Y%m%d_%H%M%S) name_part os.path.splitext(original_filename)[0] # 创建哈希值确保唯一性 hash_input f{timestamp_str}_{name_part}_{prompt[:50]} hash_value hashlib.md5(hash_input.encode()).hexdigest()[:8] # 生成最终键名 file_key fgenerated_videos/{timestamp.year}/{timestamp.month:02d}/{timestamp.day:02d}/video_{timestamp_str}_{hash_value}.mp4 return file_key def upload_to_oss(self, local_file_path, file_key, metadataNone): 上传文件到OSS 参数: local_file_path: 本地文件路径 file_key: OSS中的存储键名 metadata: 额外的元数据 返回: 上传结果信息 try: print(f 正在上传文件到OSS: {file_key}) # 设置对象元数据 headers {} if metadata: # 添加自定义元数据 for key, value in metadata.items(): headers[fx-oss-meta-{key}] str(value) # 上传文件 start_time time.time() result self.bucket.put_object_from_file(file_key, local_file_path, headersheaders) upload_time time.time() - start_time if result.status 200: file_size os.path.getsize(local_file_path) print(f✅ 上传成功大小: {file_size/1024/1024:.2f}MB, 耗时: {upload_time:.1f}秒) print(f OSS地址: {file_key}) return { success: True, file_key: file_key, file_size: file_size, upload_time: upload_time, etag: result.etag, url: fhttps://{self.bucket.bucket_name}.{self.bucket.endpoint}/{file_key} } else: print(f❌ 上传失败状态码: {result.status}) return {success: False, error: f上传失败状态码: {result.status}} except Exception as e: print(f❌ 上传过程中发生错误: {str(e)}) return {success: False, error: str(e)} def save_metadata(self, file_key, generation_info, upload_info): 保存视频生成和上传的元数据 参数: file_key: OSS文件键名 generation_info: 生成相关信息 upload_info: 上传相关信息 metadata { file_key: file_key, generation_time: datetime.now().isoformat(), generation_info: generation_info, upload_info: upload_info, access_url: upload_info.get(url) if upload_info.get(success) else None } # 生成元数据文件名 metadata_filename fmetadata_{os.path.basename(file_key).replace(.mp4, .json)} metadata_key f{self.metadata_dir}{metadata_filename} # 上传元数据到OSS metadata_json json.dumps(metadata, ensure_asciiFalse, indent2) result self.bucket.put_object(metadata_key, metadata_json) if result.status 200: print(f 元数据保存成功: {metadata_key}) return metadata_key else: print(f⚠️ 元数据保存失败) return None def generate_and_archive(self, image_path, prompt, negative_promptNone): 完整的生成并归档流程 参数: image_path: 输入图片路径 prompt: 生成提示词 negative_prompt: 负向提示词 返回: 完整的处理结果 print(f\n 开始处理: {os.path.basename(image_path)}) print(f 提示词: {prompt}) # 步骤1: 生成视频 client EasyAnimateClient() # 创建临时输出文件 temp_dir ./temp_output os.makedirs(temp_dir, exist_okTrue) temp_output os.path.join(temp_dir, ftemp_{int(time.time())}.mp4) generation_result client.generate_video_from_image( image_pathimage_path, promptprompt, output_pathtemp_output ) if not generation_result: print(❌ 视频生成失败流程终止) return None # 步骤2: 准备上传到OSS original_filename os.path.basename(image_path) file_key self.generate_file_key(original_filename, prompt) # 准备元数据 generation_info { original_image: original_filename, prompt: prompt, negative_prompt: negative_prompt or Blurring, mutation, deformation, distortion, generation_params: { steps: 40, width: 672, height: 384, length: 49, cfg_scale: 6.0 }, local_path: temp_output, generation_time: generation_result.get(generation_time, time.time()) } # 步骤3: 上传到OSS upload_result self.upload_to_oss(temp_output, file_key, { source_image: original_filename, prompt: prompt, generator: EasyAnimateV5-7b-zh-InP }) if not upload_result.get(success): print(❌ OSS上传失败) # 清理临时文件 if os.path.exists(temp_output): os.remove(temp_output) return None # 步骤4: 保存元数据 metadata_key self.save_metadata(file_key, generation_info, upload_result) # 步骤5: 清理临时文件 if os.path.exists(temp_output): os.remove(temp_output) print(f 已清理临时文件: {temp_output}) # 返回完整结果 final_result { status: success, original_image: original_filename, oss_file_key: file_key, oss_url: upload_result.get(url), metadata_key: metadata_key, file_size_mb: upload_result.get(file_size, 0) / 1024 / 1024, total_time: time.time() - generation_info[generation_time] } print(f\n 处理完成) print(f OSS存储位置: {file_key}) print(f 访问链接: {upload_result.get(url)}) print(f 文件大小: {final_result[file_size_mb]:.2f} MB) print(f⏱️ 总耗时: {final_result[total_time]:.1f} 秒) return final_result # 配置和使用示例 if __name__ __main__: # OSS配置请替换为你的实际配置 OSS_CONFIG { access_key_id: your_access_key_id, access_key_secret: your_access_key_secret, endpoint: oss-cn-hangzhou.aliyuncs.com, # 根据你的区域修改 bucket_name: your-bucket-name } # 初始化归档器 archiver OSSVideoArchiver(**OSS_CONFIG) # 单次生成并归档 result archiver.generate_and_archive( image_pathsample_photo.jpg, promptA beautiful sunset over mountains, clouds moving slowly, cinematic quality, 4K resolution, negative_promptblurry, low quality, distorted, watermark ) if result: print(f\n✅ 视频已成功生成并归档到OSS) print(f永久访问链接: {result[oss_url]})这个完整的集成方案提供了智能文件命名基于时间、原始文件名和内容生成唯一的存储键名自动目录组织按年月日自动组织存储结构元数据管理保存生成参数、提示词等完整信息错误处理完善的异常捕获和错误恢复临时文件清理自动清理本地临时文件节省空间4.3 高级功能监控与管理系统对于生产环境我们还需要监控和管理功能class VideoGenerationManager: def __init__(self, archiver, db_connectionNone): self.archiver archiver self.db_connection db_connection self.stats { total_processed: 0, successful: 0, failed: 0, total_size_mb: 0, total_time_seconds: 0 } def process_image_folder(self, folder_path, prompt_template, file_filterNone): 处理整个文件夹的图片 import glob # 获取图片文件列表 if file_filter: image_files glob.glob(os.path.join(folder_path, file_filter)) else: image_files glob.glob(os.path.join(folder_path, *.jpg)) \ glob.glob(os.path.join(folder_path, *.png)) \ glob.glob(os.path.join(folder_path, *.jpeg)) print(f 发现 {len(image_files)} 个图片文件) results [] for i, image_path in enumerate(image_files, 1): print(f\n{*50}) print(f 处理进度: {i}/{len(image_files)}) print(f 当前文件: {os.path.basename(image_path)}) # 可以根据文件名生成定制化的提示词 prompt self._generate_prompt_from_filename(image_path, prompt_template) # 处理单个文件 start_time time.time() result self.archiver.generate_and_archive(image_path, prompt) process_time time.time() - start_time # 更新统计 self.stats[total_processed] 1 if result and result.get(status) success: self.stats[successful] 1 self.stats[total_size_mb] result.get(file_size_mb, 0) results.append({ file: os.path.basename(image_path), status: success, oss_url: result.get(oss_url), time_seconds: process_time }) else: self.stats[failed] 1 results.append({ file: os.path.basename(image_path), status: failed, error: 生成或上传失败, time_seconds: process_time }) self.stats[total_time_seconds] process_time # 可选添加延迟避免服务器过载 if i len(image_files): time.sleep(2) # 2秒间隔 return results def _generate_prompt_from_filename(self, filename, template): 根据文件名生成提示词简单示例 name os.path.splitext(os.path.basename(filename))[0] # 这里可以根据文件名中的关键词生成不同的提示词 # 例如如果文件名包含sunset就生成日落相关的提示词 if sunset in name.lower(): return f{template} Beautiful sunset scene, golden hour lighting, warm colors elif mountain in name.lower(): return f{template} Majestic mountain landscape, clear sky, panoramic view elif portrait in name.lower(): return f{template} Professional portrait, natural lighting, detailed facial features else: return template def generate_report(self): 生成处理报告 report { timestamp: datetime.now().isoformat(), statistics: self.stats, success_rate: (self.stats[successful] / self.stats[total_processed] * 100) if self.stats[total_processed] 0 else 0, average_time_per_file: (self.stats[total_time_seconds] / self.stats[total_processed]) if self.stats[total_processed] 0 else 0, average_size_mb: (self.stats[total_size_mb] / self.stats[successful]) if self.stats[successful] 0 else 0 } print(f\n{*60}) print( 处理报告) print(f{*60}) print(f总处理文件数: {self.stats[total_processed]}) print(f成功数: {self.stats[successful]}) print(f失败数: {self.stats[failed]}) print(f成功率: {report[success_rate]:.1f}%) print(f总处理时间: {self.stats[total_time_seconds]:.1f}秒) print(f平均每个文件耗时: {report[average_time_per_file]:.1f}秒) print(f总生成大小: {self.stats[total_size_mb]:.2f} MB) print(f平均文件大小: {report[average_size_mb]:.2f} MB) return report # 使用管理器进行批量处理 if __name__ __main__: # 初始化OSS归档器 archiver OSSVideoArchiver(**OSS_CONFIG) # 创建管理器 manager VideoGenerationManager(archiver) # 批量处理文件夹中的所有图片 results manager.process_image_folder( folder_path./batch_images, prompt_templateHigh quality cinematic scene, dynamic movement, professional photography, file_filter*.jpg ) # 生成报告 report manager.generate_report() # 保存报告到文件 with open(processing_report.json, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) print(f\n 详细报告已保存到: processing_report.json)5. 总结构建完整的图生视频工作流通过上面的实战我们完成了一个完整的图生视频自动化流程。让我总结一下关键要点5.1 技术栈回顾整个方案基于以下几个核心组件EasyAnimateV5-7b-zh-InP模型负责核心的图生视频功能支持多种分辨率和帧率Python API客户端通过HTTP接口与模型服务交互实现程序化调用OSS对象存储提供可靠、可扩展的视频文件存储自动化脚本将生成、上传、管理流程串联起来5.2 实际应用建议根据我的实践经验这里有一些实用建议对于个人用户可以从Web界面开始熟悉基本的图片上传和提示词编写掌握几个关键参数Sampling Steps30-50够用、分辨率768×432平衡效果和速度使用详细的提示词描述你想要的动态效果对于开发者API调用时注意错误处理和超时设置批量处理时控制并发数避免服务器压力过大实现断点续传和失败重试机制记录完整的日志便于问题排查对于企业应用考虑使用消息队列如RabbitMQ、Kafka处理大量请求实现用户认证和配额管理添加水印或版权信息到生成的视频建立监控告警系统确保服务稳定性5.3 性能优化技巧生成速度优化降低Sampling Steps到30-40使用512×288等较低分辨率减少帧数到30帧左右视频质量提升提供详细、具体的提示词使用负向提示词排除不想要的效果尝试不同的随机种子Seed找到最佳效果存储成本控制根据使用频率设置OSS生命周期规则对不常访问的视频转换为低频或归档存储定期清理本地临时文件5.4 扩展可能性这个基础框架可以扩展到更多应用场景与内容管理系统集成将生成的视频自动发布到网站或APP社交媒体自动化定时生成并发布动态内容电商平台集成为商品图自动生成展示视频教育内容制作将静态教材图片转化为动态教学视频个性化相册让家庭照片活起来创建动态回忆图生视频技术正在快速发展EasyAnimateV5-7b-zh-InP提供了一个强大且易用的起点。通过自动化流程和云存储的配合你可以轻松地将这个能力集成到各种应用中创造出真正有价值的内容。记住技术只是工具真正的价值在于如何用它解决实际问题。从一个小项目开始逐步迭代优化你会发现图生视频技术能为你的工作带来意想不到的效率和创意提升。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2532691.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…