首页 > 编程语言 >一文告诉你如何用 Python 对图片和视频进行高清修复

一文告诉你如何用 Python 对图片和视频进行高清修复

时间:2024-08-12 11:06:28浏览次数:14  
标签:视频 https 一文 Python 高清 whl env Scripts cp310

估计大家应该在网上看过很多用 AI 修复的高清视频,最近我也有相关需求,需要修复几张图片。于是便去 GitHub 上寻找相关开源项目,结果还真找到一个,效果还很不错,这里特意分享出来给大家。

首先将 https://github.com/xinntao/Real-ESRGAN.git 克隆下来,项目结构如下:

然后我们要安装相关依赖,为了避免污染本地 Python 环境,这里先创建一个虚拟环境,在当前目录中执行以下命令:

# 创建虚拟环境 env,我当前的 Python 版本是 3.10
python -m venv env

接着将依赖安装到虚拟环境中:

# 首先更新 pip
./env/Scripts/python -m pip install pip --upgrade
# 安装依赖
./env/Scripts/pip install basicsr facexlib gfpgan Pillow opencv-python tdqm -i https://mirrors.cloud.tencent.com/pypi/simple

然后安装 torch,可以选择 CPU 版和 GPU 版,由于我当前的显卡是 RTX4080,所以选择 GPU 版本。注意:torch 的安装包比较大,安装可能会失败,建议先将 .whl 文件下载到本地。

# torch
https://download.pytorch.org/whl/cu121/torch-2.1.2%2Bcu121-cp310-cp310-win_amd64.whl
# torchvision
https://download.pytorch.org/whl/cu121/torchvision-0.16.2%2Bcu121-cp310-cp310-win_amd64.whl
# torchaudio
https://download.pytorch.org/whl/cu121/torchaudio-2.1.2%2Bcu121-cp310-cp310-win_amd64.whl

下载下来之后进行安装,注意:下载的时候要根据你当前机器选择一个合适的版本。

./env/Scripts/pip install C:\Users\satori\Desktop\torch-2.1.2+cu121-cp310-cp310-win_amd64.whl
./env/Scripts/pip install C:\Users\satori\Desktop\torchvision-0.16.2+cu121-cp310-cp310-win_amd64.whl
./env/Scripts/pip install C:\Users\satori\Desktop\torchaudio-2.1.2+cu121-cp310-cp310-win_amd64.whl
# 安装当前项目
./env/Scripts/python setup.py develop

到目前为止,相关依赖就已经安装完毕了,然后下载模型。

# 下载完之后丢到当前项目的 weights 目录中
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth

# 下载完之后丢到当前项目的 gfpgan/weights 目录中
https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth
https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth

# 下载完之后丢到当前项目的 env/Lib/site-packages/gfpgan/weights 目录中,env 就是我们刚才创建的虚拟环境
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth

到此,所有准备工作就算完成了,下面我们来修复图片。

./env/Scripts/python inference_realesrgan.py \
     -n [模型名称],默认 RealESRGAN_x4plus,还可以选择 RealESRGAN_x4plus_anime_6B.pth(针对动漫)
     -i [目录路径或图片文件路径],默认是当前项目的 inputs 目录,注:不能包含中文
     -o [文件输出路径],默认是当前目录的 results 目录,注:不能包含中文
     -s [采样比例],默认是 4,值越大,像素越高
     --face_enhance 是否开启面部增强
     --ext [auto | jpg | png],图片格式,默认 auto,表示和输入图片的格式相同

好,下面我们来试一试。

./env/Scripts/python inference_realesrgan.py -i inputs/xiaoyun.jpg -o results -s 1

效果如下:

再来试试面部增强效果,会有些耗时。

./env/Scripts/python inference_realesrgan.py -i inputs/xiaoyun.jpg -o results -s 1 --face_enhance

效果如下:

再来试试动漫图片,看看效果如何。

# -s 默认为 4,如果原始图片比较小,那么在修复的时候还会有放大的效果
./env/Scripts/python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B.pth -i inputs/0030.jpg -o results -s 3

效果还不错,以上就是如何使用 Python 进行图像修复,感兴趣的话可以自己动手试试。

当然,如果你想修复视频的话也是可以的,通过 OpenCV 将视频的每一帧都转成图片,然后对图片进行修复。

import os
from pathlib import Path
import cv2

# 视频路径
video_path = "inputs/video/onepiece_demo.mp4"
# 输出图片的目录路径
output_folder = "inputs/onepiece"
os.makedirs(output_folder, exist_ok=True)
# 读取视频(路径不能包含中文)
cap = cv2.VideoCapture(video_path)
# 获取帧率
fps = cap.get(cv2.CAP_PROP_FPS)
print(f"视频帧率:{fps}")  # 视频帧率:23.98

frame_count = 1
# 循环直到视频结束
while cap.isOpened():
    # 读取当前帧
    ret, frame = cap.read()
    if not ret:
        break
    # 成功读取一帧,保存到指定目录中
    output_path = str(Path(output_folder) / f"frame_{frame_count}.png")
    cv2.imwrite(output_path, frame)
    frame_count += 1

然后对每张图片进行修复:

./env/Scripts/python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B.pth -i inputs/onepiece -o results/onepiece

将修复后的图片按照原始视频的帧率,再组合成新的视频。

import re
from pathlib import Path
import cv2

# 按照文件名中的数字,对文件进行排序
input_folder = sorted(
    Path(r"results\onepiece").glob("*.png"),
    key=lambda x: int(re.search(r"(\d+)", str(x)).group(1))
)
input_folder = list(map(str, input_folder))
# 分辨率,从原始视频读取而来
fps = 24

# 读取第一张图片以获取视频的宽高
frame = cv2.imread(input_folder[0])
height, width, layers = frame.shape

# 创建视频写入对象
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
video = cv2.VideoWriter(r"results\onepiece_demo.mp4", fourcc, fps, (width, height))

# 遍历图片列表,将每张图片写入视频
for image in input_folder:
    video.write(cv2.imread(image))

# 释放资源
video.release()

当然组合后的视频,是没有声音的,所以还要把原始视频的声道提取出来,然后和新的视频合在一起。

# 提取视频中的音频
ffmpeg -i [原始视频.mp4] -q:a 0 -map a [生成的音频.mp3]
# 将音频和视频合并在一起
ffmpeg -i [视频文件.mp4] -i [音频文件.mp3] -c:v copy -c:a aac [合并后的视频文件.mp4]

以上就是本文的内容,感兴趣的话就试试吧。

标签:视频,https,一文,Python,高清,whl,env,Scripts,cp310
From: https://www.cnblogs.com/wan-ming-zhu/p/18354539

相关文章

  • 使用 Python 操作 Stable Diffusion 进行 AI 绘图
    在几年前,AI领域对于普通人来说,还是无法触及的高岭之花。但随着chatGPT的爆火,AI变得越来越大众化,大量的工具让你可以在不具备任何前置知识的情况下使用AI,其中最火热的便是AI绘图了。相信很多人都知道Midjourney这个网站,只要输入相关的文字,便可通过网站背后的AI产出相对......
  • 简单的python web项目的docker-compose.yml 示例
    一个简单的pythonweb项目,包含redis,mysql,nginx,定时业务调度等其中web启动注册了自定义命令flaskcreate-db&&flaskinit-db&&uwsgi/web/uwsgi.iniversion:'3.5'services:db:image:mysqlcontainer_name:yeping_mysqlcommand:--default-......
  • Epson C4校准和Python通讯流程
    第一章简介1.1机器人型号EsonC41.2.目的使用EponC4机械臂,通过python进行指令控制,在通讯之前,进行了原点和工具坐标系的校准1.3.流程C4机械臂的机械原点校准C4机械臂的工具坐标系校准C4机械臂的通讯第二章机械原点校准2.1.原点校准-硬件操作2.1.1.原点校准......
  • python实现文字识别
    在Python中实现文字识别(OCR,OpticalCharacterRecognition)的一种流行方式是使用开源库如Tesseract。Tesseract是一个由HP实验室开发、后来由Google优化的OCR引擎,支持多种操作系统,并且能够识别多种语言的文本。步骤1:安装Tesseract首先,你需要在你的系统上安装Tesseract。......
  • CSP真题答案《202309-01、02》基于Python的实现
    注意:注释在测试CSP时应全部删除!!!第一题:#键盘输入两个数以空格隔开,分别为n,mn,m=map(int,input().split())#根据n值可以循环输入n行值,得到一个列表(操作数)madenum=[list(map(int,input().split()))for_inrange(n)]#根据m值可以循环输入m行值,得到一个列表(初始......
  • OpenAI API: How do I handle errors in Python?
    题意:在使用OpenAIAPI进行Python开发时,怎样处理错误?问题背景:Itriedusingthebelowcode,buttheOpenAIAPIdoesn'thavethe AuthenticationError methodinthelibrary.HowcanIeffectivelyhandlesucherror.我尝试使用下面的代码,但是OpenAIAPI的库中并没......
  • 基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物
    植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重......
  • 【python学习】巧用notedown:Markdown与Jupyter Notebook的高效互转指南
    在数据科学、教学、技术写作等领域,Markdown文件和JupyterNotebook都是非常重要的工具。notedown是一个轻量级的Python库,能够方便地将Markdown文件转换为JupyterNotebook,或将JupyterNotebook转换为Markdown文件。这篇博客将介绍notedown的基本用法、常见命......
  • Python爬虫实战入门:豆瓣电影Top250(保你会,不会来打我)
    需求目标网站:https://movie.douban.com/top250需求:爬取电影中文名、英文名、电影详情页链接、导演、主演、上映年份、国籍、类型、评分、评分人数,并保存到csv文件当中目标url:https://movie.douban.com/top250所需第三方库requestslxml安装requests安装命令......
  • Python数据科学的秘密武器:Pandas库的深度解析
    标题:Python数据科学的秘密武器:Pandas库的深度解析Python作为数据科学领域的宠儿,其强大的数据处理能力离不开Pandas库的加持。Pandas是一个开源的数据分析和操作库,它提供了快速、灵活和表达力强的数据结构,旨在使数据清洗和分析工作变得更加简单易行。本文将深入探讨Pandas库......