Python深度学习实用代码合集

2023-10-29


背景:这篇文章的背景是在日常的学习和项目中,经常会遇到一些基础功能的组合复用,每次去查函数的用法和pipeline都是比较耗时耗力需要重新调试,所以想着把一些经常用到的代码段固化成函数,方便未来的调用,快速迭代和验证。另外,发现谷歌的colab比较好使,对于算法的快速验证迭代还是很有帮助的(尤其对于我这个垃圾笔记本),在环境的配置,算力的提供上都有无与伦比的优势,本地的部署除了在必须的情况下使用,尽量还是可以通过colab的形式迭代算法。除了colab,kaggle也提供类似的平台,二者功能相仿,可以对比学习使用。

Colab 代码集合

怎么在colab打开ipynb文件

https://colab.research.google.com/github/
然后把ipynb文件的github地址复制过去

保存文件夹内的所有文件

import os
from google.colab import files
 
def traverse_dir(data_dir):
  file_name_list = os.listdir(data_dir)
  for file_name in file_name_list:
    files.download('{}/{}'.format(data_dir, file_name))  # 多层文件夹需要修改这里
 
traverse_dir('/content/PhotoWCT2/figures/style') # 文件路径

从github拉代码

from google.colab import drive, output
import os
import json

%cd /content/
!rm -rf '/content/wct2'
!git clone https://github.com/chiutaiyin/PhotoWCT2.git  # 代码仓地址
%cd /content/PhotoWCT2  # 修改当前工作路径

Python代码集合

可交互选取文件路径

from tkinter import filedialog
filepath = filedialog.askopenfilename()  # 选择文件,路径保存于filepath中

文件目录

使用Python中的os模块下的方法listdir()是一个不错的选择,样例如下:

import os
os.listdir()

上面的代码将打印当前路径下所有文件和目录的名称。
如果我们想基于特定路径来打印结果,只需传递给函数os.listdir() 相应的参数,举例如下:

os.listdir(myPath)

如果想知道当前运行脚本的目录:

currentdir = os.path.dirname(__file__)
parentdir = os.path.abspath(os.path.join(currentdir, os.pardir))

遍历文件夹批量修改文件名和后缀

os.path的用法

def renaming(file):
    """修改后缀"""
    ext = os.path.splitext(file)    # 将文件名路径与后缀名分开

    if ext[1] == '.jpg':  # 文件名:ext[0]
        new_name = ext[0] + '.bmp'  # 文件后缀:ext[1]
        os.rename(file, new_name)  # tree()已切换工作地址,直接替换后缀
    elif ext[1] == '.jpeg':
        new_name = ext[0] + '.bmp'
        os.rename(file, new_name)

path = r'C:\Users\Desktop\wallpaper'  # 文件目录
for filename in os.listdir(path):
    oripath = path + os.sep + filename  # 获取绝对路径
    os.chdir(path)  # 修改工作地址(相当于文件指针到指定文件目录地址)
    renaming(oripath)  # 修改后缀


def tree(path):
    """递归函数"""
    files = os.listdir(path)  # 获取当前目录的所有文件及文件夹
    for file in files:
        file_path = os.path.join(path, file)  # 获取该文件的绝对路径
        if os.path.isdir(file_path):  # 判断是否为文件夹
            tree(file_path)  # 开始递归
        else:
            os.chdir(path)  # 修改工作地址(相当于文件指针到指定文件目录地址)
            renaming(file)  # 修改后缀

复制文件

def mycopyfile(srcfile, dstpath):  # 复制文件
    if not os.path.isfile(srcfile):
        print("%s not exist!" % (srcfile))
    else:
        fpath, fname = os.path.split(srcfile)  # 分离文件名和路径
        if not os.path.exists(dstpath):
            os.makedirs(dstpath)  # 创建路径
        shutil.copy(srcfile, dstpath + os.sep + fname)  # 复制文件
        print("copy %s -> %s" % (srcfile, dstpath + fname))


path1 = r'C:\Users\Desktop\wallpaper\0a2efbd136628de3094007cf3c8f3cdd.bmp'
path2 = r'C:\Users\Desktop\wallpaperedit'
mycopyfile(path1, path2)

删除文件

def del_file(path_data):
    for i in os.listdir(path_data) :# os.listdir(path_data)#返回一个列表,里面是当前目录下面的所有东西的相对路径
        file_data = path_data + os.sep + i#当前文件夹的下面的所有东西的绝对路径
        if os.path.isfile(file_data) == True:#os.path.isfile判断是否为文件,如果是文件,就删除.如果是文件夹.递归给del_file.
            os.remove(file_data)
        else:
            del_file(file_data)

读取图片(PIL和CV2)


from PIL import Image
img1 = Image.open(bp).convert("RGBA")
# img转换为cv用的arry
CVarray= np.array(PILimg)


import cv2
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)
# cv用的arry转换为img
PIVimg = Image.fromarray(CVarray)
PIVimg .save("out.jpeg")

显示图片(PIL和CV2)

from PIL import Image
img=Image.open('d:/dog.png')
img.show()
import cv2
img_grayscale = cv2.imread('test.jpg',0)
cv2.imshow('graycsale image',img_grayscale)
cv2.waitKey(0)

拼接图片

path = r'C:\Users\Desktop\wallpaper'
sourcepath = r'D:\algorithm\Color-Transfer-between-Images-master\Color-Transfer-between-Images-master\source'
resultpath = r'D:\algorithm\Color-Transfer-between-Images-master\Color-Transfer-between-Images-master\result'
savepath = r'C:\Users\Desktop\wallpaperedit'
# mycopyfile(path1, path2)
# del_file(sourcepath)
for filename in os.listdir(path):
    oripath = path + os.sep + filename
    mycopyfile(oripath, sourcepath)
    color_transfer()
    del_file(sourcepath)

    oriimg = Image.open(oripath)
    sp = oriimg.size
    joint = Image.new("RGBA", (sp[0]*10, sp[1]))
    joint.paste(oriimg, (0, 0))
    idx = 1
    for imgname in os.listdir(resultpath):
        curimgpath = resultpath + os.sep + imgname
        curimg = Image.open(curimgpath)
        loc = (sp[0]*idx, 0)
        joint.paste(curimg, loc)
        idx += 1
    pth = savepath + os.sep + filename
    joint.save(pth)
    del_file(resultpath)

图片与base64的互相转化

base 64

import base64
data1 = base64.b64encode(open('C:/Users/l00817249/Desktop/universe.bmp', 'rb').read())
data2 = data1.decode('utf-8')
print(data2)

im = base64.b64decode(data2)
img = cv2.imdecode(np.frombuffer(im, dtype=np.uint8), -1)
cv2.imshow('graycsale image', img)
cv2.waitKey(0)

python打包成为exe

python 生成 exe

根据分割mask(rgb通道)的信息从图片中提取png图的A通道

import os
import cv2
def extract_mask(mskpath, oripath, savepath, oriformat):
    """
    用于根据分割掩膜从视频提取分割物体
    从分割得到的RGBmask图片获取mask的A通道图像
    mskpath和oripath的文件需要有相同的图片名称
    :param mskpath: 原始的分割掩膜路径
    :param oripath: 原始图片的路径
    :param savepath: 提取出分割物体的存储路径
    :param oriformat: 生成图的格式,.jpg/.png
    :return: 保存结果到savepath
    """
    for filename in os.listdir(mskpath):
        # 读取文件夹中的每个文件
        maskpath = mskpath + os.sep + filename  # 获取掩膜绝对路径
        realfilename = filename.split('.')
        # 读取原始素材的路径
        originalpath = oripath + os.sep + realfilename[0] + oriformat
        # 读取图片
        mskimg = cv2.imread(maskpath, cv2.IMREAD_UNCHANGED)  # 掩模图
        msktmp = cv2.cvtColor(mskimg, cv2.COLOR_BGR2GRAY)
        # 掩模图转化为二值图
        thresh, mask = cv2.threshold(msktmp, 0, 255, cv2.THRESH_BINARY)
        # 原图
        oriimg = cv2.imread(originalpath, cv2.IMREAD_UNCHANGED)
        # 提取图片
        im = cv2.bitwise_and(oriimg, oriimg, mask=mask)
        finalsavepath = savepath + os.sep + filename
        cv2.imwrite(finalsavepath, im, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

图片生成视频

import os
import cv2
def build_video(refvideopath, resourcepath, imgfmt, savepath, savename):
    """
    从一系列的图片生成视频
    :param refvideopath:原视频的路径,用来根据原始视频的帧率设定处理之后视频的帧率
    :param resourcepath:图片序列的路径
    :param imgfmt:图片格式,.png/.jpg
    :param savepath:保存的路径
    :param savename:保存的名字
    :return:保存视频
    """
    videoCapture = cv2.VideoCapture(refvideopath)  # 读取视频文件
    fps = videoCapture.get(cv2.CAP_PROP_FPS)  # 计算视频的帧率

    # 图片文件夹路径和格式(例如:/path/to/folder/*.jpg)
    img_folder = resourcepath
    img_format = imgfmt

    # 视频文件保存路径和名称
    video_name = savename

    # 获取图片列表
    img_list = sorted([os.path.join(img_folder, f) for f in os.listdir(img_folder) if f.endswith('.' + img_format)])

    # 读取第一张图片,获取图片尺寸
    img = cv2.imread(img_list[0])
    height, width, channels = img.shape

    # 创建视频编写器
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 定义视频编码器
    savepath = savepath + os.sep + video_name
    video = cv2.VideoWriter(savepath, fourcc, fps, (width, height))  # 定义视频文件,帧率为读取到的fps

    # 逐个将图片写入视频文件
    for img_path in img_list:
        img = cv2.imread(img_path)
        video.write(img)

    # 释放资源
    video.release()

图片叠加

from PIL import Image
import numpy as np
def combinevideo(mskpath, oripath, segpath, oriformat, savepath):
    """
    将分割得到的前景和背景组合展示
    :param mskpath: 掩膜的路径,即png中A通道的路径
    :param oripath: 背景图的路径
    :param segpath: 前景图的路径
    :param oriformat: 背景图图像格式
    :param savepath: 保存路径
    :return: 保存粘贴好的图片
    """
    for filename in os.listdir(mskpath):
        maskpath = mskpath + os.sep + filename  # 获取掩膜绝对路径
        realfilename = filename.split('.')
        originalpath = oripath + os.sep + realfilename[0] + oriformat
        segmentationpath = segpath + os.sep + filename
        mskimg = cv2.imread(maskpath, cv2.IMREAD_UNCHANGED)  # 掩模图
        oriimg = cv2.imread(originalpath, cv2.IMREAD_UNCHANGED)  # 原图
        segimg = cv2.imread(segmentationpath, cv2.IMREAD_UNCHANGED)  # 分割图
        height, width, channels = segimg.shape
        oriimg = cv2.resize(oriimg, (width, height), interpolation=cv2.INTER_AREA)
        msktmp = cv2.cvtColor(mskimg, cv2.COLOR_BGR2GRAY)
        thresh, msk = cv2.threshold(msktmp, 0, 255, cv2.THRESH_BINARY)
        # im = cv2.bitwise_and(oriimg, segimg)
        oriimg = cv2.cvtColor(oriimg, cv2.COLOR_BGR2RGB)
        segimg = cv2.cvtColor(segimg, cv2.COLOR_BGR2RGB)
        ORIimg = Image.fromarray(oriimg)
        SEGimg = Image.fromarray(segimg)
        MSKimg = Image.fromarray(msk)
        # MSKimg.show()
        ORIimg.paste(SEGimg, (0, 0), mask=MSKimg)
        # ORIimg.show()
        finalsavepath = savepath + os.sep + filename
        CVarray = np.array(ORIimg)
        CVarray = cv2.cvtColor(CVarray, cv2.COLOR_RGB2BGR)
        cv2.imwrite(finalsavepath, CVarray, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python深度学习实用代码合集 的相关文章

  • 在 numpy 数组中查找满足条件的大量连续值

    我在 numpy 数组中加载了一些音频数据 我希望通过查找静音部分 即一段时间内音频幅度低于特定阈值的部分 来对数据进行分段 一个非常简单的方法是这样的 values join 1 if abs x lt SILENCE THRESHOLD
  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • 刷新访问令牌时出现“invalid_grant”错误的情况?

    最近我一直在为这个问题揪心 一些背景 使用oauth2客户端 https code google com p google api python client 库来管理用户的令牌 这些令牌用于定期并发执行各种后台任务 每次要为用户运行其中一
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 使用 python 通过搜索端点从 Spotify API 获取曲目

    因此 我尝试使用 API 的搜索端点进行搜索 从而从 Spotify API 获取曲目 请参阅文档 https developer spotify com documentation web api reference search sea
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 在一张图中同时绘制两个截面强度

    我有一个形状数组 512 512 看起来像 行 x 列 y 密度 z 数组的数量 0 012825 0 020408 0 022976 0 015938 0 02165 0 024357 0 036332 0 031904 0 025462
  • 如何编写高效的配对算法?

    我需要一种算法的帮助 该算法可以有效地将人们分组 并确保以前的配对不会重复 例如 假设我们有 10 位候选人 candidates 0 1 2 3 4 5 6 7 8 9 并假设我们有一个先前匹配的字典 这样每个键值对即candidate
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 将 stdout 重定向到 Python 中的文件? [复制]

    这个问题在这里已经有答案了 如何将 stdout 重定向到 Python 中的任意文件 当长时间运行的 Python 脚本 例如 Web 应用程序 从 ssh 会话内启动并处于后台 并且 ssh 会话关闭时 应用程序将引发 IOError
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • Python/Flask:应用程序在关闭后正在运行

    我正在开发一个简单的 Flask Web 应用程序 我使用 Eclipse Pydev 当我开发该应用程序时 由于代码更改 我必须经常重新启动该应用程序 这就是问题所在 当我运行该应用程序时 我可以在本地主机上看到该框架 这很好 但是当我想
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • Python将csv数据导出到文件中

    我有以下运行良好的代码 但我无法修剪数据并将其存储在数据文件中 import nltk tweets love this car this view amazing not looking forward the concert def g
  • 如何创建指向指针数组的 Python ctypes 指针

    我需要学习如何处理char 在下面的 C 方法中通过 Python ctypes 我通过使用调用其他只需要单个指针的方法做得很好create string buffer 但此方法需要一个指向指针数组的指针 ladybugConvertToM
  • python IDLE shell 似乎无法正确处理一些转义

    例如 b 退格键打印为四元 在下面的示例中显示为 但是 n 换行是可以的 gt gt gt print abc bd abc d gt gt gt print abc nd abc d 我在 Vista pro python 2 7 下运行
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo

随机推荐

  • iostat 命令查看io信息

    在使用htop命令的时候会看到这么一行 翻译一下 us 用户态使用的cpu时间比 sy 系统态使用的cpu时间比 ni 用做nice加权的进程分配的用户态cpu时间比 id 空闲的cpu时间比 wa cpu等待磁盘写入完成时间 hi 硬中断
  • 大厂年薪30W+数据分析师学习路线,实用到哭!会Python的更有优势!

    不知道大家发现没 近几年 国内对数据分析类人才需求越来越大了 这点从国家开始批准大学设立数据分析相关专业就能看出来 2016年2月 教育部公布新增 数据科学与大数据技术 专业 北京大学 对外经济贸易大学 中南大学成为首家获批高校 后来又有中
  • 常用Shell命令汇总-vim

    不知道大家平时有没有跟我一样的感受 就是很多shell命令自己其实用过 但时间一久又忘记了 导致又要到处百度 开始写这个系列的目的第一是为了总结 第二是为了以后忘记时可以直接到这找哈哈哈哈哈 平时在百度时还发现一个问题 就是其实我只想要最常
  • 怎么看服务器的token信息,token查看

    token查看 内容精选 换一换 本章节通过示例演示如何调用API来删除负载均衡器 删除负载均衡器时 需要逐个删除负载均衡器下的资源 负载均衡器关联的资源如图1 包括监听器 转发策略 后端服务器组 健康检查和后端服务器 当您使用Token认
  • C/C++ 全局变量初始化

    C语言全局变量只能用常量表达式初始化 不能用一个数学函数或者其他的需要在运行时才能计算出结果的表达式进行初始化 C 标准 全局变量的初始化要在 main 函数执行前完成 常识无疑 但是这个说法有点含糊 main 函数执行前到底具体是什么时候
  • 超级厉害的汇总图——人工智能之机器学习算法体系

    1 人工智能之机器学习体系汇总 直接上干货 此处梳理出面向人工智能的机器学习方法体系 主要体现机器学习方法和逻辑关系 理清机器学习脉络 后续文章会针对机器学习系列讲解算法原理和实战 抱着一颗严谨学习之心 有不当之处欢迎斧正 2 人工智能相关
  • (Struts2学习篇) Struts2数据校验之二

    struts2数据校验的方法 1 validateXxx方法验证 validate多业务action方法的验证 如果业务验证方法不止一个则可以使用validateXXX 来验证 在struts xml配置方法调用 span style fo
  • OSI与TCP/IP的区别

    OSI的概念 Open System Interconnect开放系统互连参考模型 是由ISO 国际标准化组织 定义的 它是个灵活的 稳健的和可互操作的模型 并不是协 议 常用来分析和设计网络体系结构 OSI模型分为七层 OSI把网络按照层
  • 身份识别与访问管理(IAM)

    身份识别与访问管理 IAM Identity and Access Management 参考文章 涨知识 认识IAM 向着 零信任 安全架构迈进 什么是身份和访问管理 IAM IAM 身份识别与访问管理 简称大4A 百度百科 身份访问与管
  • EDA第一次课<1117电路图的绘制>

    EDA第一次课 lt 1117电路图的绘制 gt 电路图1117 我们把需要用到的元器件先列出来 PWR2 5 1 GND 3 RES2 4 LED0 2 VCC 1 双刀双掷开关 1 自制元器件 黄框框 1 绘制1117 1 首先我们打开
  • 【自然语言处理】关系抽取 —— CoIn 讲解

    CoIn 论文信息 标题 Consistent Inference for Dialogue Relation Extraction 作者 Xinwei Long Shuzi Niu Yucheng Li 期刊 IJCAI 2021 主题
  • Golang 结构化日志包 log/slog 详解(三):属性字段和日志级别

    上一篇文章讲解了 log slog 包中的 Handler 的使用方法 通过不同的 Handler 可以输出不同格式的日志 接下来看一下如何自定义日志的属性字段和日志级别 属性字段 attribute 许多日志都有一些通用的的字段 例如日志
  • [每日一氵]Latex 的通讯作者怎么搞

    之前看文章 通讯作者都是默认放在最后一个位置 然后用十字或者双十字标注上 今天看到这个模板的通讯作者 还是这个好看 机构 标题都是我瞎编的 title Rethinking the eyes Problem in Game author D
  • 安装完华为的opengauss 后,能ping通服务地址,telnet不通端口

    一 事件起因 安装完华为的openGauss 后 能ping通服务的地址 telnet不通端口 linux服务本机可以用gsql客户端访问 但是外部用 Data Studio 或者 Navicat 进行连接时 连接服务失败 利用 cmd 进
  • 大牛深入讲解!最经典的HashMap图文详解

    栈和队列部分 10 设计一个有getMin功能的栈 士 由两个栈组成的队列 尉 如何仅用递归函数和栈操作逆序一个栈 尉 猫狗队列 士 用一个栈实现另一个栈的排序 士 用栈来求解汉诺塔问题 校 生成窗口最大值数组 尉 构造数组的MaxTree
  • AStyle.exe -h的完整内容,方便配置时查阅

    AStyle exe h Artistic Style 3 1 Maintained by Jim Pattee Original Author Tal Davidson Usage astyle OPTIONS File1 File2 F
  • 如何剪辑一个好的短视频?教你一个小技巧,剪辑视频很简单

    短视频现在越来越受到大众喜欢 不管是老人 小孩 年轻人都会在有空余时间刷下短视频 不知不觉得短视频已形成人们平时生活中一部分 那么要如何剪辑一个好的短视频 制作短视频可以分成两个部分 第一部分就是选题再拍一个短视频这个一般都很容易操作的 第
  • lua 函数 默认值_Unity热更新框架之xLua

    一 xLua概述 二 Lua文件加载 三 xLua文件配置 四 Lua与C 交互 五 xLua热更新 一 xLua概述 1 1 xLua简介 xLua是由腾讯维护的一个开源项目 xLua为Unity Net Mono等C 环境增加Lua脚本
  • 计算某字符出现次数

    写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 n 1000 输入描述 第一行输入一个由字母和数字以及空格组成的字符串 第二行输入一个字符 输出描述 输
  • Python深度学习实用代码合集

    Python深度学习实用代码合集 Colab 代码集合 怎么在colab打开ipynb文件 保存文件夹内的所有文件 从github拉代码 Python代码集合 可交互选取文件路径 文件目录 遍历文件夹批量修改文件名和后缀 复制文件 删除文件