香橙派 AIpro 根据心情生成专属音乐

香橙派 AIpro 根据心情生成专属音乐

      • 一、OrangePi AI pro 开发版参数介绍
        • 1.1 接口简介
        • 1.2 OrangePi AI pro 的Linux系统功能适配情况
        • 1.3 开发板开机
        • 1.4 远程连接到 OrangePi AIpro
      • 二、开发环境搭建
        • 2.1 创建环境、代码部署文件夹
        • 2.2 安装 miniconda
        • 2.3 为 miniconda 更新国内源
        • 2.4 创建一个 python 3.9 版本的开发环境
      • 三、基于MindNLP + MusicGen生成自己的个性化音乐
        • 3.1 模型介绍
        • 3.2 下载模型
        • 3.3 生成音乐
        • 3.4 无提示生成
        • 3.5 文本提示生成
        • 3.6 音频提示生成
      • 四、总结

这篇博客 用 OrangePi AIpro 实现了根据文字、音频、生成音乐

一、OrangePi AI pro 开发版参数介绍

首先必须要提的一点是 OrangePi AI pro 是 业界首款基于昇腾深度研发的AI开发板,采用昇腾AI技术路线,集成图形处理器,拥有16GB LPDDR4X,最大可支持外接 256GB eMMC 模块,支持双 4K 高清输出,8/20 TOPS AI算力。

1.1 接口简介

Orange Pi AIpro 有着强大的可拓展性。包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB、两个MIPI摄像头、一个MIPI屏等,一个预留电池接口。
在这里插入图片描述

1.2 OrangePi AI pro 的Linux系统功能适配情况
功能是否能测试Linux 内核驱动
HDMI0 1080p 显示OKOK
HDMI0 4K 显示NONO
HDMI0 音频OKNO
HDMI1 显示OKNO
HDMI1 音频OKNO
耳机播放OKNO
耳机 MIC 录音OKNO
Type-C USB3.0(无 USB2.0)OKOK
USB3.0 Host x 2OKOK
千兆网口OKOK
千兆网口灯OKOK
WIFIOKOK
蓝牙OKOK
Micro USB 调试串口OKOK
复位按键OKOK
关机按键(无开机功能)OKOK
烧录按键OKOK
MIPI 摄像头 0OKNO
MIPI 摄像头 1OKNO
MIPI LCD 显示OKNO
电源指示灯OKOK
软件可控的 LED 灯OKOK
风扇接口OKOK
电池接口OKOK
TF 卡启动OKOK
TF 卡启动识别 eMMCOKOK
TF 卡启动识别 NVMe SSDOKOK
TF 卡启动识别 SATA SSDOKOK
eMMC 启动OKOK
SATA SSD 启动OKOK
NVMe SSD 启动OKOK
2 个拨码开关OKOK
40 pin-GPIOOKOK
40 pin-UARTOKOK
40 pin-SPIOKOK
40 pin-I2COKOK
40 pin-PWMOKNO
1.3 开发板开机

这里之所以要拿出来单独说一下,就是因为我本人开了两三次没打开,以为是板子坏了,自己还满心愤懑,后来发现是自己操作不对(确实没看说明书)为了避免大家有同样的错误!!!这里重点介绍!

首先 将烧好系统的 TF 卡查到对应位置上,将两个启动方式拨码开关都向右拨(图示为两个启动方式拨码开关都拨向左)
在这里插入图片描述
之后将电源插入电源插口
在这里插入图片描述

1.4 远程连接到 OrangePi AIpro

默认的用户名:root
默认的密码:Mind@123

在这里插入图片描述

二、开发环境搭建

2.1 创建环境、代码部署文件夹
# 创建环境目录
mkdir ~/env# 创建代码目录
mkdir ~/workshop
2.2 安装 miniconda

下载 miniconda 到 ~/env 目录,这里需要注意的是 OrangePi AIpro 是 arm 架构的在这里插入图片描述

bash ~/env/Miniconda3-py312_24.3.0-0-Linux-aarch64.sh

conda 安装完成如如图所示:
在这里插入图片描述

2.3 为 miniconda 更新国内源

更新 miniconda 的源,如果有梯子的话这一步可以不做,但是如果梯子的网速感人的话,还是建议将源更新为清华源

# 修改 .condarc 文件
vi ~/.condarc

.condarc 文件修改如下

channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/clouddeepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/

清理之前预留的缓存

conda clean -i
2.4 创建一个 python 3.9 版本的开发环境

通过 conda 创建一个 python 3.9 的开发环境,并安装 mindspore 框架,以及一些其他必要的库函数

# 创建一个 python 3.9 的环境
conda create -n py39 python=3.9# 激活环境
conda activate py39

安装 mindspore 框架,版本必须选择 2.3.0rc2

conda install mindspore=2.3.0rc2 -c mindspore -c conda-forge# 安装 mindnlp 包
pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindnlp==0.2.4 jieba

三、基于MindNLP + MusicGen生成自己的个性化音乐

3.1 模型介绍

这里简单介绍一下 MusicGen 模型。MusicGen 是基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本,相关研究成果参考论文《Simple and Controllable Music Generation》。

MusicGen 模型基于Transformer结构,可以分解为三个不同的阶段:

  1. 用户输入的文本描述作为输入传递给一个固定的文本编码器模型,以获得一系列隐形状态表示。
  2. 训练 MusicGen 解码器来预测离散的隐形状态音频 token
  3. 对这些音频 token 使用音频压缩模型(如 EnCodec)进行解码,以恢复音频波形。

MusicGen 直接使用谷歌的 t5-base 及其权重作为文本编码器模型,并使用EnCodec 32kHz及其权重作为音频压缩模型。MusicGen 解码器是一个语言模型架构,针对音乐生成任务从零开始进行训练。

MusicGen取消了多层级的多个模型结构,例如分层或上采样,这使得MusicGen 能够生成单声道和立体声的高质量音乐样本,同时提供更好的生成输出控制。因此,MusicGen 不仅能够生成符合文本描述的音乐,还能够通过旋律条件控制生成的音调结构。

请添加图片描述

Figure 1: MusicGen使用的码本延迟模式,来源于 MusicGen paper.

3.2 下载模型

MusicGen提供了small、medium和big三种规格的 预训练权重文件,本次指南默认使用 small 规格的权重,生成的音频质量较低,但是生成的速度是最快的(我的板子内存只有 8G大家可以选择 16G 的板子):

from mindnlp.transformers import MusicgenForConditionalGeneration# 下载并导入模型
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
3.3 生成音乐

MusicGen 支持两种生成模式:贪心(greedy)和采样(sampling)。在实际执行过程中,采样模式得到的结果要显著优于贪心模式。因此我们默认启用采样模式,并且可以在调用 MusicgenForConditionalGeneration.generate 时设置 do_sample=True 来显式指定使用采样模式。

3.4 无提示生成

我们可以通过方法 MusicgenForConditionalGeneration.get_unconditional_inputs 获得网络的随机输入,然后使用 .generate 方法进行自回归生成,指定 do_sample=True 来启用采样模式:

unconditional_inputs = model.get_unconditional_inputs(num_samples=1)audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)

音频输出是格式是: a Torch tensor of shape (batch_size,num_channels,sequence_length)

使用第三方库scipy 将输出的音频保存为 musicgen_out.wav 文件。

import scipysampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
3.5 文本提示生成

首先基于文本提示,通过 AutoProcessor 对输入进行预处理。然后将预处理后的输入传递给 .generate 方法以生成文本条件音频样本。同样,我们通过设置 do_sample=True 来启用采样模式。

其中,guidance_scale 用于无分类器指导(CFG),设置条件对数之间的权重(从文本提示中预测)和无条件对数(从无条件或空文本中预测)。guidance_scale 越高表示生成的模型与输入的文本更加紧密。通过设置guidance_scale > 1 来启用 CFG。为获得最佳效果,使用guidance_scale=3(默认值)生成文本提示音频。

from mindnlp.transformers import AutoProcessorprocessor = AutoProcessor.from_pretrained("facebook/musicgen-small")inputs = processor(text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],padding=True,return_tensors="ms",
)audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)scipy.io.wavfile.write("musicgen_out_text.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)
3.6 音频提示生成

AutoProcessor同样可以对用于音频预测的音频提示进行预处理。在以下示例中,我们首先加载音频文件,然后进行预处理,并将输入给到网络模型来进行音频生成。最后,我们将生成出来的音频文件保存为musicgen_out_audio.wav

from datasets import load_datasetdataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]# take the first half of the audio sample
sample["array"] = sample["array"][: len(sample["array"]) // 2]# 使用音视频提示生成,耗时较久processor = AutoProcessor.from_pretrained("facebook/musicgen-small")inputs = processor(audio=sample["array"],sampling_rate=sample["sampling_rate"],text=["80s blues track with groovy saxophone"],padding=True,return_tensors="ms",
)audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)scipy.io.wavfile.write("musicgen_out_audio.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)

在这里插入图片描述

四、总结

总体使用下来我将从 用户友好程度、开发文档支持程度、性能三个方面 对 Orange Pi AI Pro 进行总结:

  1. 用户友好程度:烧录好的系统和日常经常使用 Unbutu 系统体验上并无任何不同,更为绚丽的界面、精简的系统、完整的开发资料都极大的有助于新手快速玩转开发板。我做的是一个音频生成的模型,模型参数超过了 2G,在 c 上可以顺利的运行、并生成相应风格的音乐。此外,OrangePi AIpro 系统的烧录和启动都很为新手着想(我就是新手),可以选择TF卡、eMMC 或 SSD 作为启动介质,每种方式都有详细的官方指南,系统玩出问题了,恢复起来也很简单。
  2. 开发文档支持:作为新手,其实我们最担心的问题就是文档全不全、教程多不多、教程详细不详细!很幸运,OrangePi AIpro 有着详尽的教程;用户手册内容详实,从硬件参数到软件配置,乃至进阶功能均有详细解说(收集到的一些教程我也会附在后面,方便大家查阅)。每个模块都有单独的说明,比较丰富的应用示例,一站式找到所有文档的服务极大的降低了新手在开发中走弯路的可能。
  3. 性能:Orange Pi AI Pro 主打一个性价比!搭载的华为昇腾AI处理器,以 8TOPS 的INT8 算力和 4 TFLOPS FP16 的浮点运算能力,为复杂AI模型提供了强大的计算支撑。我在 8G 版本的 Orange Pi AI Pro 上 成功的运行了 MusicGen模型,其模型参数大小为 2.2G 这对于 8G 版本的 Orange Pi AI Pro 来说,无疑是一个极大的挑战。板子在运行时内存使用超 90%,但是散热真的很好,风扇噪音较小,整块处理器的问题摸起来并不烫手,即使在满载的情况下运行半小时左右,处理器的温度略高于手指温度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/368576.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分子AI预测赛笔记

#AI夏令营 #Datawhale #夏令营 Taks1 跑通baseline 根据task1跑通baseline 注册账号 直接注册或登录百度账号,etc fork 项目 零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 启动项目 选择运行环境,并点击确定,没…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储,它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章,可以用来进阶康康! 1. 字符串 (Stri…

轻松跨越国界:使用WildCard畅享全球AI服务

大家好,现在AI技术已经深入到我们的日常生活中。然而,许多朋友仍然难以获取优质的AI工具和应用。那么,如何才能使用像ChatGPT这样的AI服务呢? 今天我为大家介绍一个“一劳永逸”的解决方案,它就是我们的主角——WildC…

基于antv x6实现的组织架构图

X6 是基于 HTML 和 SVG 的图编辑引擎,基于 MVC 架构,用户更加专注于数据逻辑和业务逻辑。 一、业务背景 将组织树形结构图形化,更直观的展示个人所在的组织架构。 二、功能点 组织结构按需渲染,支持层级展开、收缩按需求自定义…

秋招突击——设计模式补充——单例模式、依赖倒转原则、工厂方法模式

文章目录 引言正文依赖倒转原则工厂方法模式工厂模式的实现简单工厂和工厂方法的对比 抽线工厂模式最基本的数据访问程序使用工厂模式实现数据库的访问使用抽象工厂模式的数据访问程序抽象工厂模式的优点和缺点使用反射抽象工厂的数据访问程序使用反射配置文件实现数据访问程序…

PhysioLLM 个性化健康洞察:手表可穿戴设备实时数据 + 大模型

个性化健康洞察:可穿戴设备实时数据 大模型 提出背景PhysioLLM 图PhysioLLM 实现数据准备用户模型和洞察生成个性化数据总结和洞察是如何生成的? 解析分析 提出背景 论文:https://arxiv.org/pdf/2406.19283 虽然当前的可穿戴设备伴随应用&…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端,为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口,S272不仅支持多路数字量和模拟量输入,还具备灵活的扩展性和强大的控制功能&#xff0…

什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!从科普的角度,…

Python酷库之旅-第三方库Pandas(001)

目录 一、Pandas库的由来 1、背景与起源 1-1、开发背景 1-2、起源时间 2、名称由来 3、发展历程 4、功能与特点 4-1、数据结构 4-2、数据处理能力 5、影响与地位 5-1、数据分析“三剑客”之一 5-2、社区支持 二、Pandas库的应用场景 1、数据分析 2、数据清洗 3…

记录OSPF配置,建立邻居失败的过程

1.配置完ospf后,在路由表中不出现ospf相关信息 [SW2]ospf [SW2-ospf-1]are [SW2-ospf-1]area 0 [SW2-ospf-1-area-0.0.0.0]net [SW2-ospf-1-area-0.0.0.0]network 0.0.0.0 Jul 4 2024 22:11:58-08:00 SW2 DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25 .1…

二分查找及其变种

一、概念 二分查找算法(Binary Search Algorithm)是一种在有序数组中查找特定元素的高效搜索方法。 其基本思想是将目标值与数组中间的元素进行比较,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素&…

Visual Studio 设置回车代码补全

工具 -> 选项 -> 文本编辑器 -> C/C -> 高级 -> 主动提交成员列表 设置为TRUE

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时,学校给的是Word模板,习惯了Latex排版和添加参考文献的便利后,真不想用word写东西。 之前投《机器人》期刊(被拒了)和准备开题的时候也是用word写的,当时为方便添加参考文献和定…

【人工智能】--生成对抗网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉GAN 的基本原理 🍈生成器(Generator) 🍈判别器&…

【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示DS3231 RTC时间

LCD ST7735显示DS3231 RTC时间 文章目录 LCD ST7735显示DS3231 RTC时间1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板 (ESP-12E) 和 DS3231 RTC 模块制作一个简单的数字实时时钟,其中可以使用连接到 NodeMCU 的两个按钮设置时间和日期,并将它们打印(带…

llm学习-4(llm和langchain)

langchain说明文档:langchain 0.2.6 — 🦜🔗 langChain 0.2.6https://api.python.langchain.com/en/latest/langchain_api_reference.html#module-langchain.chat_models 1:模型 (1)自定义模型导入&#x…

c语言回顾-内存操作函数

目录 前言 1.memcpy 函数 1.1函数介绍 1.2与strcpy的区别 1.3memcpy的模拟 2.memmove 函数 2.1函数介绍和使用 2.2函数的模拟 3.memset函数 3.1函数介绍 3.2函数的模拟 4.memcmp函数 4.1函数的使用 4.2函数的模拟 结束语 前言 在动态内存的章节中小编详细讲解了动…

7.基于SpringBoot的SSMP整合案例-表现层开发

目录 1.基于Restfu1进行表现层接口开发 1.1创建功能类 1.2基于Restful制作表现层接口 2.接收参数 2使用Apifox测试表现层接口功能 保存接口: 分页接口: 3.表现层一致性处理 3.1先创建一个工具类,用作后端返回格式统一类:…

【人工智能学习之图像操作(一)】

【人工智能学习之图像操作(一)】 图像读写创建图片并保存视频读取色彩空间与转换色彩空间的转换通道分离理解HSV基本图形绘制 阀值操作OTSU二值化简单阀值自适应阀值 图像读写 图像的读取、显示与保存 import cv2 img cv2.imread(r"1.jpg")…

Unity休闲手机游戏开发课程

课程介绍 Unity休闲手机游戏开发课程将教您如何利用Unity游戏引擎创建令人愉快的休闲手机游戏。从基础的游戏开发知识到高级的游戏制作技巧,您将学习到创建各种类型的休闲游戏所需的关键技能和工具。无论您是初学者还是有一定经验的开发者,本课程都能帮助…