Python全栈项目--基于深度学习的图像超分辨率系统
一、项目简介图像超分辨率Super Resolution是计算机视觉中非常常见的应用场景将低分辨率图片放大为更清晰的高分辨率图片可用于老照片修复、监控画面增强、电商商品图优化、医学影像辅助分析等业务。本文实现一个完整的 Python 全栈项目基于深度学习的图像超分辨率系统。它不是只讲算法概念而是把“用户登录、图片上传、任务管理、结果下载、前后端交互、数据库落库、接口鉴权”全部串起来形成一个可运行的业务系统。项目采用 FastAPI SQLite Vue 3Vite技术栈。后端超分推理流程改用 PyTorch 实现上传图片先转换为 NCHW Tensor再通过torch.nn.functional.interpolate完成 bicubic 上采样并使用逐通道卷积锐化核增强细节同时通过model_name字段预留 FSRCNN、EDSR、Real-ESRGAN 等真实模型接入位置。二、技术栈层级技术作用后端框架FastAPI提供 RESTful API、文件上传、接口鉴权数据库SQLite保存用户、Token、超分任务记录ORMSQLAlchemy定义数据模型并操作数据库数据校验Pydantic请求参数和响应结构校验超分推理PyTorch PillowPyTorch 执行 Tensor 上采样与卷积增强Pillow 负责图片读取与保存前端框架Vue 3 Vite构建单页应用、组件状态管理、接口调用鉴权方式Bearer Token登录后生成 Token保护核心业务接口三、系统架构系统分为三层浏览器 Vue 3 前端 ├── 注册/登录页面 ├── 上传超分任务页面 └── 任务列表与结果下载页面 ↓ HTTP/JSON/FormData FastAPI 后端服务 ├── 用户认证模块 ├── 图片上传模块 ├── 超分推理模块 ├── 任务管理模块 └── 文件下载模块 ↓ SQLAlchemy SQLite 数据库 本地文件存储 ├── users ├── access_tokens ├── image_jobs ├── uploads/ └── results/前端通过api.js统一封装请求。登录成功后 Token 存储在localStorage后续请求自动携带Authorization: Bearer token。后端对/api/jobs等核心接口进行鉴权确保用户只能操作自己的任务。四、功能模块1. 用户认证模块用户注册用户名、邮箱、密码。密码哈希使用 PBKDF2-HMAC-SHA256 加盐存储。用户登录验证密码后生成随机 Token。退出登录撤销当前 Token。登录状态前端刷新页面时调用/api/auth/me恢复用户状态。2. 图像超分任务模块上传低分辨率图片。设置任务标题、放大倍数2x、3x、4x、模型名称、备注。后端保存原图到uploads/。执行 PyTorch 教学版超分推理并保存到results/。数据库保存任务记录包括文件名、输出路径、模型、状态等。3. 历史任务模块查询当前用户的所有任务。查看任务标题、模型、倍数、指标、创建时间。下载处理后的图片。删除任务记录。五、数据库/数据模型设计项目中定义了三个核心表。users 用户表字段类型说明idInteger主键usernameString用户名唯一emailString邮箱唯一password_hashString加盐哈希后的密码created_atDateTime创建时间access_tokens 登录令牌表字段类型说明idInteger主键tokenString随机 Token唯一user_idInteger所属用户created_atDateTime创建时间image_jobs 超分任务表字段类型说明idInteger主键owner_idInteger任务所属用户titleString任务标题original_filenameString原始文件名scaleInteger放大倍数model_nameString模型名称statusString任务状态input_pathString原图路径output_pathString结果图路径notesText备注psnrString演示指标created_atDateTime创建时间核心模型代码如下classUser(Base):__tablename__usersidColumn(Integer,primary_keyTrue,indexTrue)usernameColumn(String(64),uniqueTrue,indexTrue,nullableFalse)emailColumn(String(120),uniqueTrue,indexTrue,nullableFalse)password_hashColumn(String(255),nullableFalse)created_atColumn(DateTime,defaultdatetime.utcnow)classImageJob(Base):__tablename__image_jobsidColumn(Integer,primary_keyTrue,indexTrue)owner_idColumn(Integer,ForeignKey(users.id),nullableFalse)titleColumn(String(120),nullableFalse)original_filenameColumn(String(255),nullableFalse)scaleColumn(Integer,default2)model_nameColumn(String(80),defaultFSRCNN-lite)statusColumn(String(30),defaultcompleted)input_pathColumn(String(255),nullableFalse)output_pathColumn(String(255),nullableFalse)六、后端接口设计方法路径功能是否鉴权GET/api/health服务健康检查否POST/api/auth/register注册用户否POST/api/auth/login用户登录否GET/api/auth/me获取当前用户是POST/api/auth/logout退出登录是POST/api/jobs上传图片并创建超分任务是GET/api/jobs获取当前用户任务列表是GET/api/jobs/{job_id}获取任务详情是GET/api/jobs/{job_id}/download下载结果图是DELETE/api/jobs/{job_id}删除任务是鉴权依赖示例defcurrent_user(authorization:strHeader(default),db:SessionDepends(get_db)):ifnotauthorization.startswith(Bearer ):raiseHTTPException(status_code401,detail缺少 Bearer Token)tokenauthorization.removeprefix(Bearer ).strip()usercrud.get_user_by_token(db,token)ifnotuser:raiseHTTPException(status_code401,detail登录已失效)returnuser上传任务接口使用multipart/form-dataapp.post(/api/jobs,response_modelschemas.ImageJobRead)defupload_job(title:strForm(...),scale:intForm(2),model_name:strForm(FSRCNN-lite),notes:strForm(),file:UploadFileFile(...),db:SessionDepends(get_db),user:models.UserDepends(current_user),):dataschemas.ImageJobCreate(titletitle,scalescale,model_namemodel_name,notesnotes)returncrud.create_image_job(db,user,data,file)七、前端页面设计前端使用 Vue 3 Vite 构建单页应用主要包含以下区域顶部介绍区展示系统名称和项目定位。注册表单输入用户名、邮箱、密码。登录表单登录后保存 Token。任务创建表单填写标题、选择模型、选择放大倍数、上传图片。任务列表展示历史任务、下载结果、删除任务。api.js对请求进行统一封装asyncfunctionrequest(path,options{}){constheadersoptions.headers||{}consttokengetToken()if(token)headers.AuthorizationBearer${token}constresawaitfetch(${API_BASE}${path},{...options,headers})constbodyres.headers.get(content-type)?.includes(application/json)?awaitres.json():awaitres.blob()if(!res.ok)thrownewError(body.detail||请求失败)returnbody}任务上传时使用FormDataconstfdnewFormData()fd.append(title,jobForm.title)fd.append(scale,jobForm.scale)fd.append(model_name,jobForm.model_name)fd.append(notes,jobForm.notes)fd.append(file,selectedFile.value)awaitapi.createJob(fd)八、核心代码讲解1. 密码哈希系统没有明文保存密码而是用随机盐和 PBKDF2 生成哈希defhash_password(password:str,salt:Optional[str]None)-str:saltsaltorsecrets.token_hex(16)digesthashlib.pbkdf2_hmac(sha256,password.encode(utf-8),salt.encode(utf-8),120_000)returnf{salt}${digest.hex()}校验密码时重新计算哈希并使用secrets.compare_digest防止简单时序攻击。2. Token 鉴权登录成功后后端生成随机 Tokendefcreate_token(db:Session,user:models.User)-models.AccessToken:tokenmodels.AccessToken(tokensecrets.token_urlsafe(32),user_iduser.id)db.add(token)db.commit()db.refresh(token)returntoken前端保存该 Token后续请求统一带上请求头headers.AuthorizationBearer${token}3. 超分推理流程超分模块用 PyTorch 实现。教学版不依赖外部模型权重而是保留深度学习推理的基本结构图片读取后转换成NCHWTensor使用 PyTorch bicubic 上采样放大再通过逐通道卷积锐化核增强边缘细节最后保存到results/。classTorchSuperResolutionModel:def__init__(self,scale:int):self.scalemax(1,int(scale))def__call__(self,image_tensor):importtorchimporttorch.nn.functionalasF upscaledF.interpolate(image_tensor,scale_factorself.scale,modebicubic,align_cornersFalse,)channelsupscaled.shape[1]kerneltorch.tensor([[0.0,-1.0,0.0],[-1.0,5.0,-1.0],[0.0,-1.0,0.0]],dtypeupscaled.dtype,deviceupscaled.device,).view(1,1,3,3).repeat(channels,1,1,1)returnF.conv2d(upscaled,kernel,padding1,groupschannels).clamp(0.0,1.0)业务入口保持run_super_resolution(input_path, output_path, scale)不变。未来如果要接入真实模型只需将TorchSuperResolutionModel.__call__替换为 FSRCNN、EDSR、Real-ESRGAN 等模型的前向推理。九、部署与运行步骤1. 运行后端cdproject/backend python3-mvenv .venvsource.venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload--host0.0.0.0--port8000后端默认地址http://127.0.0.1:8000。2. 运行前端cdproject/frontendnpminstallnpmrun dev前端默认访问后端http://127.0.0.1:8000Vite 默认页面通常为http://127.0.0.1:5173。3. 使用流程打开前端页面。注册新用户。登录系统。上传一张低分辨率图片。选择 2x、3x 或 4x 放大。查看任务列表并下载结果图片。十、项目总结本文完成了一个完整的 Python 全栈项目基于深度学习的图像超分辨率系统。它覆盖了从用户认证、数据库设计、图片上传、推理处理、任务管理到 Vue 前端交互的完整流程。这个项目的亮点在于不是单纯算法 Demo而是可运行的全栈业务系统。后端接口有完整注册、登录、Token 鉴权。核心业务接口按用户隔离避免越权访问。前端使用 Vue 3 Vite具备登录状态处理和鉴权请求。推理模块已使用 PyTorch 张量与卷积算子实现接口清晰方便后续替换为真实深度学习模型。后续可继续扩展任务队列、GPU 推理、模型管理、图片预览对比、SSIM/PSNR 自动评估、管理员后台等功能使其进一步接近生产级图像增强平台。项目代码下载链接