520,用Python定制你的《本草纲目女孩》

千金一刻莫空度,老大无成空自伤。这篇文章主要讲述520,用Python定制你的《本草纲目女孩》相关的知识,希望能为你提供帮助。

摘要:让我们来用python定制出心仪的“本草纲目女孩”,敲出魔性的代码舞蹈,520,准备好心仪女孩的舞蹈视频,把这份别出心裁的礼物给TA
本文分享自华为云社区《??【云驻共创】华为云AI之用Python定制我的《本草纲目女孩》??》,作者:愚公搬代码。
前言近日,《本草纲目》毽子操的视频刷屏网络。公司里更是多了很多刘畊宏女孩,在520到来之际特意奉献这篇文章给大家。如果有心仪的女孩这篇文章可以帮助你哦。
歌词:抬腿!拍腿!,侧边的肥肉咔咔掉,人鱼线马甲线我都要!刘畊宏的男孩女孩看过来。
让我们来用Python定制出心仪的“本草纲目女孩”,敲出魔性的代码舞蹈,520,准备好心仪女孩的舞蹈视频,把这份别出心裁的礼物给TA??。
一、华为云ModelArts-Notebook介绍1.华为云ModelArts-NotebookModelArts集成了基于开源的Jupyter Notebook和JupyterLab,可为您提供在线的交互式开发调试工具。您无需关注安装配置,在ModelArts管理控制台直接使用Notebook,编写和调测模型训练代码,然后基于该代码进行模型的训练。
其中,ModelArts还提供了华为自研的分布式训练加速框架MoXing,您可以在Notebook中使用MoXing编写训练脚本,让您代码编写更加高效、代码更加简洁。
1.1 Jupyter Notebook是什么
Jupyter Notebook是一个可以在浏览器中使用的交互式的计算应用程序,该应用程序的所有可见的内容,以笔记本文档表示,包括计算的输入和输出、解释文本、数学、图像和对象的富媒体等表示。因此,Jupyter Notebook可以实现将代码、文字完美结合起来,非常适合从事机器学习、数据分析等数据科学工作的人员。
Jupyter Notebook相关文档:https://docs.jupyter.org/en/latest/
1.2 JupyterLab是什么
JupyterLab是一个交互式的开发环境,是Jupyter Notebook的下一代产品,可以使用它编写Notebook、操作终端、编辑MarkDown文本、打开交互模式、查看csv文件及图片等功能。
JupyterLab相关文档:https://jupyterlab.readthedocs.io/en/stable/
1.3 什么是Moxing
MoXing是华为云ModelArts团队自研的分布式训练加速框架,它构建于开源的深度学习引擎TensorFlow、MXNet、PyTorch、Keras之上。相对于TensorFlow和MXNet原生API而言,MoXing API让模型代码的编写更加简单,允许用户只需要关心数据输入(input_fn)和模型构建(model_fn)的代码,即可实现任意模型在多GPU和分布式下的高性能运行,降低了TensorFlow和MXNet的使用门槛。另外,MoXing-TensorFlow还将支持自动超参选择和自动模型结构搜索,用户无需关心超参和模型结构,做到模型全自动学习。
Moxing相关文档:??https://github.com/huaweicloud/ModelArts-Lab/tree/master/docs/moxing_api_doc??
2.Python-OpencvPython由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
OpenCV用C++语言编写,它具有C++,Python,java和MATLAB接口,并支持Windows,Linux,android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令,如今也提供对于C#、Ch、Ruby,GO的支持。
opencv-python的github网址:https://pypi.org/project/opencv-python/
OpenCV官网:https://opencv.org/
二、本地案例实现Python定制我的《本草纲目女孩》1.案例实现流程众所周知,视频是由一帧帧图像构成,Opencv处理视频图像信息的原理就是将视频转为一帧帧图像,处理完图像后再转换为视频。
用Python实现案例流程如下:
520,用Python定制你的《本草纲目女孩》

文章图片

2.案例环境部署2.1 本机环境
  • vs2022
  • anaconda(已经包括opencv和PIL)
  • python
2.2 安装对应的anaconda包
anaconda这是一个非常常用的python包集成管理工具,其中预安装了很多python库,使得我们不需要去手动安装各种的第三方库,我们知道自己取手动安装的过程中,很容易就会遇到一些报错,解决起来也非常的麻烦。
anaconda官网:https://www.anaconda.com/products/distribution#Downloads
520,用Python定制你的《本草纲目女孩》

文章图片

下载完软件包一路点击安装就行了,安装成功后会出现如下界面。
520,用Python定制你的《本草纲目女孩》

文章图片

查看是否安装成功命令:conda --version
520,用Python定制你的《本草纲目女孩》

文章图片

2.3 安装opencv-python
进入anaconda控制台输入如下命令:
pip install opencv-python

520,用Python定制你的《本草纲目女孩》

文章图片

3.案例实现代码本案例的实现过程主要分为以下几步:
1. 导入数据
2. 导入库函数
3. 将视频转化为图像帧
4. 对图片帧进行ASCII码的转换
5. 将转换好的图片帧合成视频

3.1 导入数据
视频下载地址:https://cnnorth4-modelhub-datasets-obsfs-sfnua.obs.cn-north-4.myhuaweicloud.com/content/35d24c0e-f337-442b-935f-ef8123062d3e/QzNm9F/dataset/test_demo0510.mp4
【520,用Python定制你的《本草纲目女孩》】
520,用Python定制你的《本草纲目女孩》

文章图片

3.2 导入库函数
#导入Python库
import cv2
from PIL import Image,ImageFont,ImageDraw
import os
from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize

3.3 将视频转化为图像帧
#将视频转换为图片存入目标文件夹

def video_to_pic(vp):
number = 0

# 判断载入的视频是否可以打开
if vp.isOpened():

#r:布尔型 (True 或者False),代表有没有读取到图片,frame:表示截取到的一帧的图片的数据,是个三维数组
r,frame = vp.read()

#判断文件夹是否存在,不存在的话则新建文件夹
if not os.path.exists(cache_pic):
os.mkdir(cache_pic)
os.chdir(cache_pic)

else:
r = False

#遍历视频,并将每一帧图片写入文件夹
while r:
number += 1
cv2.imwrite(str(number)+.jpg,frame)
r,frame = vp.read()

print(\\n由视频一共生成了张图片!.format(number))

# 修改当前工作目录至主目录
os.chdir("..")
return number

3.4 对图片帧进行ASCII码的转换
#将图片进行批量化处理

def star_to_char(number, save_pic_path):

#判断文件夹是否存在,不存在的话则新建文件夹
if not os.path.exists(cache_char):
os.mkdir(cache_char)

# 生成目标图片文件的路径列表
img_path_list = [save_pic_path + r/.jpg.format(i) for i in range(1, number + 1)]
task = 0

for image_path in img_path_list:

# 获取图片的分辨率
img_width, img_height = Image.open(image_path).size
task += 1

#处理图片,并显示处理进程
img_to_char(image_path, img_width, img_height, task)

print(/ is processed..format(task, number))

print(=======================)
print(All pictures were processed!)
print(=======================)
return 0

# 将图片转换为灰度图像后进行ascii_char中的ASCII值输出
# 函数输入像素RGBA值,输出对应的字符码。其原理是将字符均匀地分布在整个灰度范围内,像素灰度值落在哪个区间就对应哪个字符码。

def get_char(r, g, b, alpha=256):

#ascii_char就是字符列表,用来将不同灰度的像素进行不同字符体替换的参照。
ascii_char = list("#RMNHQODBWGPZ*@$C& 98?32I1> !:-; . ")

#alpha在为0的时候便是完全透明的图片,所以返回空
if alpha == 0:
return

length = len(ascii_char)

#转为灰度图
#RGBA是代表Red(红色)、Green(绿色)、Blue(蓝色)和Alpha的色彩空间,Alpha通道一般用作不透明度参数
#如果一个像素的alpha通道数值为0%,那它就是完全透明的,而数值为100%则意味着一个完全不透明的像素

gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
# unit = (256.0 + 1) / len(ascii_char)
unit = 256 / len(ascii_char)
return ascii_char[int(gray / unit)]
def img_to_char(image_path, raw_width, raw_height, task):
width = int(raw_width / 6)
height = int(raw_height / 15)

# 以RGB模式打开
im = Image.open(image_path).convert(RGB)
im = im.resize((width, height), Image.NEAREST)

txt =
color = []

#遍历图片的每个像素
for i in range(height):

    推荐阅读