proginn1530109018
6小时前在线
全职 · 2000/日  ·  43500/月
工作时间: 工作日0:00-24:00、周末0:00-24:00工作地点: 远程
服务企业: 0家累计提交: 0工时
联系方式:
********
********
********
聊一聊

使用APP扫码聊一聊

个人介绍

专业PYT HON开发.多年python 开发经验.能做后端接口 前端 JS开发。各种自动化 桌面 网页 手机端的各种自动化开发.能独立开发一整套BS系统 以及BC系统 .能训练私有大模型 数据清理,并整理 构建私有的大模型 以及私有知识库构建以及AI客服训练.能完整 并熟练的使用各种PYTHON库 实现客户的需求.精通算法逆向 以及API接口逆向等技术

工作经历

  • 2019-10-01 -至今遇由软件科技高级后端工程师

    主要负责后端接口开发以及功能实现. 包含各种数据库优化,其中有大规模并发,基于后端的自动化开发.分布式开发,系统构建等核心业务的构建以及实现

教育经历

  • 2005-09-01 - 2008-07-01四川建筑职业技术学院计算机应用技术专科

    大学英语四级毕业 ,根老师做过几个项目 开发学校的 一些项目和对外接项目

语言

普通话
0
1
2
3
4
5
0
1
2
3
4
5

技能

Android
C
iOS
Node.js
MySQL
小程序
0
1
2
3
4
5
0
1
2
3
4
5
作品
企业ERP系统

本项目是一个基于Next.js开发的虾皮电商平台专用ERP管理系统,提供订单管理、入库管理、物流管理等功能。 ## 功能特点 - **入库管理**:管理产品入库流程,记录库存信息 - **订单管理**:处理订单,跟踪订单状态 - **待发货订单**:查看和处理待发货的订单 - **物流管理**:跟踪物流状态,管理物流信息 - **店铺管理**:管理多个店铺 - **系统设置**:配置系统参数 ## 技术栈 - **前端**:Next.js 14, React 18, TailwindCSS - **后端**:FastAPI (Python) - **数据库**:MySQL - **部署**:支持Docker容器部署 ## 安装与启动 ### 系统要求 - Node.js 18+ - PNPM (推荐) 或 NPM - MySQL 8.0+ - Python 3.8+ (后端) ### 安装步骤 1. 克隆本仓库 ``` git clone cd erp-system ``` 2. 安装前端依赖 ``` pnpm install ``` 3. 配置环境变量 创建`.env.local`文件并添加以下配置: ``` NODE_OPTIONS=--dns-result-order=ipv4first HOSTNAME=127.0.0.1 HOST=127.0.0.1 NEXT_PUBLIC_HOST=127.0.0.1 NEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8000/api/v1 NEXT_TELEMETRY_DISABLED=1 NEXT_PRIVATE_HOST=127.0.0.1 ``` 4. 启动后端服务器 ``` cd bak/backend uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` 5. 启动前端开发服务器 ``` pnpm dev ``` 6. 访问系统 在浏览器中打开 [http://127.0.0.1:8090](http://127.0.0.1:8090) ### 使用快捷启动脚本 我们提供了多个批处理脚本,用于简化启动和修复过程: - `修复并启动.bat`:修复Radix UI问题并启动前端 - `直接进入系统.bat`:跳过登录直接进入系统 - `直接进入系统完整版.bat`:同时启动前后端并跳过登录 ## 项目结构 ``` erp-system/ │ ├── app/ # Next.js应用目录 │ ├── api/ # API路由和工具 │ ├── components/ # 公共组件 │ ├── context/ # 上下文管理 │ ├── inventory/ # 库存管理模块 │ ├── orders/ # 订单管理模块 │ ├── stocks/ # 入库管理模块(新) │ ├── shipping/ # 物流管理模块 │ ├── stores/ # 店铺管理模块 │ └── settings/ # 系统设置模块 │ ├── components/ # UI组件 │ ├── ui/ # UI基础组件 │ └── ... # 其他组件 │ ├── lib/ # 工具库 │ ├── bak/ # 备份和后端代码 │ └── backend/ # Python后端代码 │ ├── public/ # 静态资源 │ └── ... ``` ## API接口 系统主要使用以下API接口: - `/api/v1/stocks/`:入库管理相关API - `/api/v1/orders/`:订单管理相关API - `/api/v1/stores/`:店铺管理相关API - `/api/v1/shipping/`:物流管理相关API ## 常见问题解决 ### React无限循环渲染问题 如遇到"Maximum update depth exceeded"错误,请运行以下修复脚本: ``` node fix-presence-issue.js node fix-compose-refs.js ``` ### 数据库连接问题 如遇到数据库连接问题,请运行: ``` 修复数据库权限.bat ``` ## 贡献指南 如果您想为项目贡献代码,请遵循以下步骤: 1. Fork本仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 发起Pull Request

0
2025-08-24 17:07
DrissionPage独立版本

DrissionPage + FastAPI 独立打包成 EXE 方案 一、 项目架构与思路 核心思路是创建一个后台服务型应用: FastAPI 作为 HTTP 服务器,提供 RESTful API 接口。 DrissionPage 作为核心自动化引擎,在后台运行。 客户端(如 Web 前端、其他程序)通过调用 API 来触发浏览器自动化操作,无需关心底层实现。 使用 pyinstaller 将整个 Python 项目(FastAPI 服务器 + DrissionPage + 所有依赖)打包成一个独立的 exe 文件。 优势: 完全独立:最终用户无需安装 Python、浏览器驱动或任何依赖。 远程调用:可以通过网络 API 控制浏览器,实现分布式部署。 易于集成:任何能发送 HTTP 请求的语言都可以调用其功能。 二、 优化打包方式 (PyInstaller) 打包一个包含浏览器和网络请求的库非常复杂,需要精心配置。 1. 项目结构建议 text your_project/ ├── main.py # FastAPI 应用入口点 ├── core/ │ └── automation.py # 封装 DrissionPage 核心操作 ├── config.py # 配置文件 ├── requirements.txt # 项目依赖 └── build/ # 打包输出目录(自动生成) 2. 关键的 main.py 示例 (FastAPI Server) python from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware import uvicorn from core.automation import AutomationManager # 导入封装好的自动化管理器 import asyncio app = FastAPI(title="DrissionPage Automation Service") # 解决跨域问题,方便前端调用 app.add_middleware( CORSMiddleware, allow_origins=["*"], # 生产环境应更严格 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 全局管理自动化实例 automation_manager = AutomationManager() @app.get("/") async def root(): return {"message": "DrissionPage Automation Service is Running"} @app.post("/start-session/") async def start_session(): """启动一个浏览器会话""" try: session_id = await automation_manager.start_new_session() return {"status": "success", "session_id": session_id, "message": "Session started"} except Exception as e: raise HTTPException(status_code=500, detail=f"Failed to start session: {str(e)}") @app.post("/run-script/{session_id}") async def run_script(session_id: str, script_name: str, params: dict = None): """在指定会话中运行预定义的脚本""" try: result = await automation_manager.run_script(session_id, script_name, params or {}) return {"status": "success", "data": result} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/close-session/{session_id}") async def close_session(session_id: str): """关闭指定浏览器会话""" try: await automation_manager.close_session(session_id) return {"status": "success", "message": f"Session {session_id} closed"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": # 使用 uvicorn 直接运行,方便调试和打包 uvicorn.run(app, host="0.0.0.0", port=8000) 3. 核心自动化封装 core/automation.py python from DrissionPage import ChromiumPage, SessionPage import asyncio import uuid from typing import Dict, Any class AutomationManager: def __init__(self): self.sessions: Dict[str, ChromiumPage] = {} async def start_new_session(self) -> str: """异步方式启动新浏览器,避免阻塞主线程""" loop = asyncio.get_event_loop() # 将阻塞的初始化操作放到线程池中执行 page = await loop.run_in_executor(None, self._init_browser) session_id = str(uuid.uuid4()) self.sessions[session_id] = page return session_id def _init_browser(self): """同步初始化浏览器""" # 重要:配置浏览器路径和选项,避免打包后找不到 # 使用 False 防止自动打开浏览器窗口,适合后台运行 page = ChromiumPage(addr_driver_opts=False) # 或者使用无头模式,不显示图形界面 # page = ChromiumPage(addr_driver_opts=False, headless=True) return page async def run_script(self, session_id: str, script_name: str, params: dict) -> Any: """运行脚本""" if session_id not in self.sessions: raise ValueError(f"Session {session_id} not found") page = self.sessions[session_id] # 在这里定义你的各种自动化任务 if script_name == "baidu_search": return await self._baidu_search(page, params.get('keyword')) elif script_name == "get_page_title": return await self._get_page_title(page, params.get('url')) else: raise ValueError(f"Unknown script: {script_name}") async def _baidu_search(self, page: ChromiumPage, keyword: str): """示例任务:百度搜索""" loop = asyncio.get_event_loop() await loop.run_in_executor(None, self._sync_baidu_search, page, keyword) return f"Search for '{keyword}' completed." def _sync_baidu_search(self, page: ChromiumPage, keyword: str): """同步的搜索操作""" page.get('https://www.baidu.com') page.ele('#kw').input(keyword) page.ele('#su').click() page.wait.ele_displayed('#content_left') async def close_session(self, session_id: str): """关闭会话""" if session_id in self.sessions: page = self.sessions.pop(session_id) loop = asyncio.get_event_loop() await loop.run_in_executor(None, page.quit) 4. 打包配置:pyinstaller.spec 文件 (关键!) 手动创建或通过 pyinstaller main.py 生成后修改 spec 文件。 python # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py'], pathex=[], binaries=[], # 必须手动添加 DrissionPage 和其他依赖 datas=[], hiddenimports=[ 'DrissionPage', 'fastapi', 'uvicorn', 'uvicorn.lifespan.on', 'uvicorn.lifespan.off', 'asyncio', # ... 其他可能缺失的库 ], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) # 必须包含 Chromium 驱动文件 import DrissionPage drission_path = os.path.dirname(DrissionPage.__file__) driver_files = [] # 尝试收集可能的驱动文件 possible_drivers = [ os.path.join(drission_path, 'chromedriver'), os.path.join(drission_path, 'geckodriver'), os.path.join(drission_path, 'msedgedriver'), ] for driver_path in possible_drivers: if os.path.exists(driver_path): driver_files.append((driver_path, '.')) if driver_files: a.datas.extend(driver_files) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', # 输出 exe 的名称 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, # 使用 upx 压缩,减小体积 upx_exclude=[], runtime_tmpdir=None, console=False, # 设置为 True 可以看到控制台日志,False 则作为后台程序运行 icon='icon.ico', # 可选的图标 ) 5. 打包命令 安装依赖:pip install pyinstaller fastapi uvicorn drissionpage 生成初始 spec:pyinstaller main.py 按照上述说明仔细修改生成的 main.spec 文件。 使用 spec 文件打包:pyinstaller main.spec 6. 打包后目录结构 text dist/ └── main/ # 打包生成的文件夹 ├── main.exe # 主可执行文件 ├── chromedriver.exe # PyInstaller 复制过来的驱动 ├── lib/ # 依赖库 └── ... # 其他文件 三、 调用方式 打包后的 exe 是一个独立的 HTTP 服务器。 1. 启动服务 双击运行 main.exe,它会启动一个本地服务器,默认监听 http://127.0.0.1:8000。 或者在命令行中运行 main.exe,以便查看日志输出。 2. API 调用示例 (使用 Python requests) 任何能发送 HTTP 请求的工具都可以调用,如 Postman、curl、或任何编程语言。 python import requests import json BASE_URL = "http://127.0.0.1:8000" # 1. 启动一个浏览器会话 response = requests.post(f"{BASE_URL}/start-session/") session_data = response.json() session_id = session_data['session_id'] print(f"Session ID: {session_id}") # 2. 执行一个自动化任务(例如百度搜索) payload = { "script_name": "baidu_search", "params": { "keyword": "DrissionPage" } } response = requests.post(f"{BASE_URL}/run-script/{session_id}", json=payload) print(response.json()) # 3. 执行另一个任务(例如获取页面标题) payload = { "script_name": "get_page_title", "params": { "url": "https://www.example.com" } } response = requests.post(f"{BASE_URL}/run-script/{session_id}", json=payload) print(response.json()) # 4. 任务完成后,关闭会话,释放资源 response = requests.post(f"{BASE_URL}/close-session/{session_id}") print(response.json()) 3. 查看 API 文档 服务启动后,打开浏览器访问 http://127.0.0.1:8000/docs 即可看到 FastAPI 自动生成的交互式 API 文档(Swagger UI),可以在这里直接测试接口。 四、 重要注意事项与优化提示 防逆向工程:pyinstaller 打包的 exe 容易被反编译。如需商业级保护,考虑使用 pyarmor 等工具进行代码加密。 杀毒软件误报:打包的 Python 程序,尤其是包含浏览器自动化功能的,极易被误报为病毒。需要对用户进行说明或购买商业证书进行签名。 体积优化:最终生成的 exe 会很大(通常 > 100MB),因为包含了 Python 解释器、所有库和浏览器驱动。使用 UPX 压缩可以略微减小体积。 无头模式 (Headless):在服务器部署或不需要图形界面的场景,务必在 _init_browser() 中启用 headless=True,性能更高且更稳定。 会话管理:上述示例使用了简单的内存字典管理会话。生产环境需要增加超时销毁机制,并考虑更持久化的管理方式(如数据库)。 错误日志:确保你的代码中有完善的日志记录(如使用 logging 模块),并将日志写入文件,以便排查打包后程序的运行问题。

0
2025-08-24 17:01
rope 二开

Rope 二次开发项目:功能增强与性能优化方案 一、 项目概述 本项目旨在对开源项目 Rope-Ruby / Rope-Opal(或其他基于 Rope 核心的换脸工具)进行二次开发。核心目标是在原有实时视频换脸功能的基础上,引入突破性新功能、显著提升处理效率与输出质量,并改善用户交互体验,使其更适用于专业级和高效率的生产环境。 二、 原有基础功能回顾 原 Rope 项目通常具备以下核心功能: 实时视频换脸:基于深度学习模型,对视频流或视频文件进行人脸替换。 图形用户界面(GUI):提供参数调节面板,如人脸识别精度、融合程度、分辨率等。 模型管理:支持加载多种预训练的人脸交换模型。 基础输入/输出:支持摄像头捕捉、视频文件输入和处理结果输出。 三、 二次开发核心新功能说明 多脸同时识别与替换 功能描述:单次处理可自动检测并替换视频画面中出现的多张人脸,而非仅限于主目标人脸。 技术要点:改进人脸检测和跟踪算法,为每个检测到的人脸分配独立的处理线程和模型实例,并在UI上提供分别控制选项。 价值:极大扩展了应用场景,如合拍视频、会议录像、影视剧群像场景处理。 高级后处理与融合引擎 功能描述:新增一个综合后处理模块,专门优化换脸后的最终效果。 子功能: 颜色自适应:自动分析源脸和目标脸部的肤色、光照条件,并进行精准匹配,消除色差。 光影重打光:根据目标人脸的光照方向和环境,对源人脸进行虚拟“重打光”,使融合更加自然。 锐化与降噪:智能锐化输出画面,同时抑制处理过程中可能产生的噪点和伪影。 音频克隆与口型同步 功能描述:不仅换脸,还能将声音替换为源人物声音,并确保口型与新声音完美同步。 技术要点:集成如 OpenAI's Whisper(语音转文本)、Coqui TTS 或 Microsoft VALL-E(文本转语音克隆)以及 Wav2Lip(口型同步)等模型管道。 价值:实现真正的“深度伪造”,产出内容的可信度和沉浸感达到新高度。 批量处理与任务队列 功能描述:支持添加多个视频任务到一个处理队列中,无需人工干预即可顺序或并行处理。 技术要点:开发一个稳定的任务调度系统,支持断点续处理、优先级设置和资源分配管理。 价值:极大提升工作效率,满足影视后期等需要处理大量素材的场景。 四、 优化流程与性能提升 推理引擎优化 目标:提升帧率(FPS),降低延迟和资源占用。 措施: 模型量化:将模型从 FP32 转换为 FP16 或 INT8,在几乎不损失质量的前提下大幅提升速度并减少显存占用。 算子融合与图优化:使用 TensorRT、OpenVINO 或 ONNX Runtime 对模型图进行深度优化,合并冗余计算层。 硬件特定加速:全面优化对 NVIDIA GPU(CUDA/cuDNN)、Apple Silicon(MPS)和 Intel CPU(OpenVINO)的支持。 内存与管道优化 目标:避免内存泄漏,支持处理长视频和更高分辨率视频。 措施: 流水线并行:将视频读取、人脸检测、换脸推理、后处理、视频编码等步骤解耦成并行流水线,充分利用硬件资源。 显存管理:实现显存池化和动态加载机制,及时释放不再使用的中间张量。 分块处理:对于超高分辨率视频(如4K),采用分块处理再拼接的策略,避免显存溢出(OOM)。 算法与模型优化 目标:提升换脸质量、减少闪烁和抖动。 措施: 集成更优模型:替换或融合更高性能的 face detector(如 YOLOv8-face)、face parser 和 swapper 模型(如 SimSwap、InsightFace)。 时序一致性处理:引入时间序列滤波器(如光流引导、卡尔曼滤波),利用前后帧信息稳定人脸特征,减少视频闪烁。 超分辨率增强:在输出前集成人脸超分模型(如 GFPGAN、CodeFormer),对替换后的人脸进行修复和增强,使其清晰度与原始视频背景匹配。 五、 实施流程建议 阶段一:环境搭建与代码剖析 Fork 原项目仓库,建立开发分支。 深入阅读源码,理解其架构、数据流和核心模块(如 processing.py, core.py, models.py)。 搭建完整的开发、调试和测试环境。 阶段二:基础优化与加固 实施推理引擎优化(如转换为 TensorRT)。 修复已知的 Bug 和内存泄漏问题。 此阶段目标是得到一个更稳定、更快速的“基础增强版”。 阶段三:模块化开发与集成 以模块化方式开发新功能。例如: multi_face_processor.py (多脸处理模块) enhancement_module.py (后处理模块) audio_pipeline.py (音频克隆管道) 逐个功能进行集成和测试,确保与原有代码兼容。 阶段四:UI/UX 重构与测试 为所有新功能设计并开发直观的 GUI 控件。 进行大规模的功能测试、压力测试和用户体验测试。 收集反馈,进行迭代优化。 阶段五:发布与部署 编写详细的安装说明和使用文档。 打包发布(可提供 Docker 镜像简化部署)。 考虑持续集成/持续部署(CI/CD)流程,便于未来更新。 六、 预期成果 完成二次开发后,项目将蜕变为一个功能强大、性能卓越、体验专业的下一代深度合成工具,在视频创作、影视预演、虚拟人直播等领域具备极高的实用价值和竞争力。

0
2025-08-24 16:51
更新于: 08-01 浏览: 11