聚类项目:1.处理视频

【将自己写的py文件导入环境变量,方便后续import】

如果我们自己写了一个 .py 文件,是不是就可以把这个.py作为模块 import 呢?

事情远没有那么简单,必须让 Python 解释器可以找到你写的模块才可以:

比如我们在 /usr/lib 下建了一个名为 test.py 的文件,你想把它作为一个模块引入,就必须先告诉 Python 解释器我们写了这么一个文件:

import sys
sys.path.append("/usr/lib/test.py")

用上述的方式就是告诉 Python 解释器我们写的那个文件在哪里,在这个告诉的方法中也用了 import sys,不过 sys 是 Python 的标准之一,所以不需要特别告诉 Python 解释器的位置。

实战用法:

import os
import sys

from pathlib import Path

FILE = Path(__file__).resolve()  # 绝对路径
ROOT = FILE.parents[0]  # == FILE.parent
if str(ROOT) not in sys.path:
    sys.path.append(str(ROOT))  # sys.path.append():添加相关路径,但在退出python环境后自己添加的路径就会消失
# Path.cwd():返回当前工作目录,即运行脚本所在的全局目录:/home/meng/deeplearning/yolov5/learn_test.py
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))

【创建输出目录,写一个日志输出代码,用偏函数封装】

import functools

# 创建输出目录
sourcepath = r''
outpath = r''
verbose = False
data_path = Path(sourcepath)  # 视频路径
output_dir = Path(outpath)  # 结果输出的路径
'''
输出三个结果:
1.抽帧后的完整图片
2.对图片切片后的中心样本
3.对图片切片后对样本的聚类
'''
save_dir = output_dir / 'samples'  #
save_img_path = output_dir / 'imgs'
save_seg_path = output_dir / 'segs'

# 创建文件夹
'''
大图片跟样本图片是肯定要的
切片图片根据参数,参数需要切片再创建目录
'''
save_dir.mkdir(parents=True, exist_ok=True)
save_img_path.mkdir(parents=True, exist_ok=True)

if verbose:
    save_seg_path.mkdir(parents=True, exist_ok=True)


# 写偏函数封装日志,方c便查找问题。输出路径:原输出路径/logs
# 先写个日志的输出方法
# 输出是消息,路径,文件名和是否打印日志
def logger_(mess, file_path='./mds_logs/', file_name='video0', printlog=False):
    if printlog:
        print('\n' + mess + '\n')
        # 时间格式
    mess = time.strftime('%m-%d,%H:%M:%S', time.localtime(time.time())) + '||' + mess + '\n'
    time_mark = datetime.datetime.now().strftime('%Y-%m-%d %H')
    error_file_mark = '%s_%s.txt' % (file_name, time_mark)
    error_file_path = os.path.join(file_path, error_file_mark)

    if not os.path.exists(file_path):
        os.makedirs(file_path)
    if not os.path.exists(error_file_path):
        with open(error_file_path, mode='w', encoding='utf-8') as f:
            f.writelines(mess)
    else:
        with open(error_file_path, mode='a', encoding='utf-8') as f:
            f.writelines(mess)


logger = functools.partial(logger_, file_path=str(output_dir / 'logs'),
                           file_name='mds')

【不确定视频格式,先转换视频格式】

# 不确定视频格式,先转换视频格式
# 输入参数为视频路径,和待转换的类型
def convert_videos(data_path, convert_type='MOV'):
    v_file_lst = os.listdir(data_path)  # 先获取文件夹下

    # 写个正则,规则为全部后缀为'mov' 的文件
    regex = re.compile(".*.(%s)" % convert_type)

    # lambda函数过滤正则
    v_names = list(filter(lambda x: regex.match(x) and x[0] != '.', v_file_lst))

    # 对符合条件的视频做转换
    if len(v_names) > 0:
        # 设置一个进度条
        vpbar = tqdm(enumerate(v_names), total=len(v_names), bar_format='{l_bar}{bar:10}{r_bar}{bar:-10b}')
        # 使用cmd转换
        for i, vname in vpbar:
            # 设置进度条信息
            vpbar.set_description("Convert to mp4")
            vpbar.set_postfix(video=vname)
            vpath = str(data_path / vname)
            save_name = vname.split('.')[0] + '.mp4'
            save_path = str(data_path / save_name)
            # 设置cmd命令
            cmd = [
                "ffmpeg",
                "-i", vpath,
                "-vcodec", "copy",
                "-f", "mp4"
                      "-loglevel", "error"
                save_path
            ]
            # 调用cmd命令行
            subprocess.call(cmd)
    # 对转换完的文件做一次正则再排序
    v_file_lst = os.listdir(data_path)
    regex = re.compile(".*.(mp4)")
    v_names = list(filter(lambda x: regex.match(x) and x[0] != '.', v_file_lst))
    v_names = sorted(v_names)

    # 返回排好序的文件名列表


# 调用转换函数
# convert = 这里设置待转换的后缀
v_names = convert_videos(data_path, convert_type=convert)
video_num = len(v_names)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Embedding ProjectorEmbedding Projector 是一款用于交互式可视化和高维数据分析的网页工具,作为 TensorFlow 的一部分,能带来类似 A.I. Experiment 的效果。同时,谷歌也在 projector.tensorflow.org 放出了一个可以单独使用的版本,让用户无需安装和运行 TensorFlow 即可进行高维数据的可视化。介绍探索嵌入(embeddings)训练机器学习系统所需的数据一开始的形式是计算机无法直接理解的。为了将这些我们人类能够自然而然理解的东西(如:话语、声音或视频)翻译成算法能够处理的形式,我们会使用到嵌入(embeddings)——一种获取了数据的不同方面(即:维度 dimension)的数学向量表征。比如说,在一个语言嵌入中,相似的词会被映射到彼此相近的点。降维的方法Embedding Projector 提供了三种常用的数据降维(data dimensionality reduction)方法,这让我们可以更轻松地实现复杂数据的可视化,这三种方法分别是 PCA、t-SNE 和自定义线性投影(custom linear projections):PCA 通常可以有效地探索嵌入的内在结构,揭示出数据中最具影响力的维度。t-SNE 可用于探索局部近邻值(local neighborhoods)和寻找聚类(cluster),可以让开发者确保一个嵌入保留了数据中的所有含义(比如在 MNIST 数据集中,可以看到同样的数字聚类在一起)。自定义线性投影可以帮助发现数据集中有意义的「方向(direction)」,比如一个语言生成模型中一种正式的语调和随意的语调之间的区别——这让我们可以设计出更具适应性的机器学习系统 标签:Tensorflow

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值