实用篇 | Base64详解及代码示例

news2025/1/12 15:51:18

 本文主要讲解了在http等协议传输过程中的base64编码~

目录

1.什么是Base64?

2.什么是 Base64 编码? 

3.编码规则

4.Base64 编码的作用

5.python中base64库

5.1.将一个mp3文件编码为Base64字符串

5.2.在Flask api设置时,以base64编码的发送文件路径

语音转Base64Demo


1.什么是Base64?

Base64 是一种二进制到文本的编码系统,它使用一组 64 个不同的 ASCII 字符将二进制数据传输为基于文本的格式。它通常用于对二进制数据进行编码,例如图像或音频文件。

2.什么是 Base64 编码? 

一般来说,编码是指将数据从一种格式转换为另一种格式的过程。

Base64 编码是通过使用一组 64 个不同的 ASCII 字符表示二进制数据来实现的。当需要在本机不支持二进制数据的系统之间交换数据时,此编码特别有用。

3.编码规则

大写字母 (A-Z)、小写字母 (a-z)、数字 (0-9) 和两个附加字符(通常为“+”和“/”)组成了 Base64 编码中使用的 64 个 ASCII 字符集。当二进制数据的长度不是三个字节的倍数时,“=”字符也用于填充。

4.Base64 编码的作用

  • 是一种二进制到字符串的编码方式,有效地表示二进制数据(如图片、视频等),并使之可以通过非编码兼容的协议(如HTTP)来传输。
  • 解决了二进制数据传输时所遇到的问题。它将二进制数据转换为64个可见字符,所以又称base64编码

5.python中base64库

5.1.将一个mp3文件编码为Base64字符串

import base64

with open("audio.mp3", "rb") as f:
    encoded_string = base64.b64encode(f.read()).decode()

 

5.2.在Flask api设置时,以base64编码的发送文件路径

使用模板

        output = {
            
            "audio": [
                {
                 
                    "@TITLE": base64.b64encode(open(out_path, 'rb').read()).decode()
                                               
                }
            ]
        }
        
        return jsonify(output)

实例

import sys
from flask import Flask, request, jsonify
from flask.views import MethodView
from flask_cors import CORS
import argparse
import base64

import librosa
import numpy as np
import matplotlib.pyplot as plt
import io
import logging

import soundfile
import torch

import commons
import wave
import utils
from models import SynthesizerTrn
from text.symbols import symbols
from text import text_to_sequence

from scipy.io.wavfile import write
import re
from scipy import signal
import time

# check device
if torch.cuda.is_available() is True:
    device = "cuda:0"
else:
    device = "cpu"


app = Flask(__name__)
CORS(app, resources={r'/*': {"origins": '*'}})
app.logger.setLevel(logging.ERROR)

class run_api(MethodView):
    def __init__(self):
        pass

    def post(self):

        #jf_text1 = request.files['text']
        jf_text1 = request.json['text']
        print("jf_text1:",jf_text1)

        def get_text(text, hps):
            text_norm = text_to_sequence(text, hps.data.text_cleaners)
            if hps.data.add_blank:
                text_norm = commons.intersperse(text_norm, 0)
            text_norm = torch.LongTensor(text_norm)
            return text_norm

        fltstr = re.sub(r"[\[\]\(\)\{\}]", "", jf_text1)
        stn_tst = get_text(fltstr, hps)
        speed = 1

        sid = 0
        start_time=time.time()
        with torch.no_grad():
            x_tst = stn_tst.to(device).unsqueeze(0)
            x_tst_lengths = torch.LongTensor([stn_tst.size(0)]).to(device)
            audio = net_g.infer(x_tst, x_tst_lengths, noise_scale=.667, noise_scale_w=0.8, length_scale=1 / speed)[0][
                    0, 0].data.cpu().float().numpy()
            print("audio type:",audio,audio.shape)
        audio_file = write(f'/jf-training-home/src/tts-v1/output/tts_out.wav', hps.data.sampling_rate, audio)
        
        out_path = "path/out.wav"

        
        output = {
            
            "audio": [
                {
                 
                    "@TITLE": base64.b64encode(open(out_path, 'rb').read()).decode()
                                               
                }
            ]
        }
        
        return jsonify(output)
       

app.add_url_rule("/", view_func=run_api.as_view("run_api"))
if __name__ == "__main__":

    print("Flask server is running...")  
    path_to_config = "config.json" 
    path_to_model = "best.pth"
    hps = utils.get_hparams_from_file(path_to_config)

    if "use_mel_posterior_encoder" in hps.model.keys() and hps.model.use_mel_posterior_encoder == True:
        print("Using mel posterior encoder for VITS2")
        posterior_channels = 80  # vits2
        hps.data.use_mel_posterior_encoder = True
    else:
        print("Using lin posterior encoder for VITS1")
        posterior_channels = hps.data.filter_length // 2 + 1
        hps.data.use_mel_posterior_encoder = False

    net_g = SynthesizerTrn(
        len(symbols),
        posterior_channels,
        hps.train.segment_size // hps.data.hop_length,
        **hps.model).to(device)
    _ = net_g.eval()

    _ = utils.load_checkpoint(path_to_model, net_g, None)

    app.run('0.0.0.0',8555,threaded=True,debug=True)

语音转Base64Demo

Audio to Base64 Encoder: Convert Audio to Base64 - B64Encode

选择音频文件后

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TA-Lib学习研究笔记——Cycle Indicators (七)

TA-Lib学习研究笔记——Cycle Indicators (七) Cycle Indicators 周期指标函数组有HT_DCPERIOD, HT_DCPHASE, HT_PHASOR, HT_SINE, HT_TRENDMODE 。 1.HT_DCPERIOD Hilbert Transform - Dominant Cycle Period 函数名:HT_DCPERIOD 名称&am…

功能上新 | 搅拌车智能接料 防拉错 防溢出

据说99%的搅拌站都发生过这样的“糟心事”:驾驶员一恍惚进错了拌台、车还没停好位置就开始放料、放料一不小心就溢出、料没接完车先走了... 面对这样的事故,搅拌站通常的应对都是“下次要注意”。但我们都知道,是人都会犯错,这无…

简化客服系统运营的无代码集成方法,达钛科技助您实现客户运营和广告推广

无代码开发:简化电商与客服系统集成 在数字经济时代,电商平台和客服系统的高效集成对企业的成功至关重要。传统的系统集成往往依赖复杂的API开发,既耗时又费力。达钛科技致力于通过无代码开发的方式,提供简单直观的解决方案&…

Kettle 浅入浅出

前言 最近又要迭代客户定制化的数据处理系统了。提到数据处理,不禁想到了以前使用过的 ETL 处理工具 Kettle。本文将对 Kettle 做一些简单的介绍。 Kettle 介绍 在介绍 Kettle 前先了解下什么是 ETL,ETL 是 Extract-Transform-Load 的缩写&#xff0c…

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理:读入图像 2.2 图片处理:显示图像 2.3 图片处理:图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者,管理好几个开发团队,有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发,很感兴趣,便参…

【Linux】I/O多路转接技术

I/O多路转接技术 一、I/O多路转接之select1、select函数2、fd_set的相关内容3、如何在代码中高效的使用select函数4、select服务器5、select的优缺点6、select的适用场景 二、I/O多路转接之poll1、poll函数2、struct pollfd结构2、poll服务器3、poll的优缺点 三、I/O多路转接之…

一个简单的参数帮助框架,c实现

文章目录 具体实现如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> void print_help(char *argv[]) { printf("Usage: %s [options]\n", argv[0]); printf("Options:\n"); printf(" -h, -…

使用SLS日志服务采集Kong网关的日志

一、阿里云SLS 官方的接入文档已比较丰富了&#xff0c;本文不意重复说明此事。 站在使用的角度&#xff0c;以采集Kong的日志为示例&#xff0c;说明我们应该如何治理日志。 说白了&#xff0c;本文是想给你怎么省钱作一个建议&#xff0c;希望不会让你公司也“降本增笑”。…

1-cuda与gpu编程

文章目录 CUDA与GPU编程1. 并行处理与GPU体系架构1.1 并行处理简介1.1.1 串行处理与并行处理的区别1.1.2 并行处理的概念1.1.3 常见的并行处理 1.2 GPU并行处 理1.2.1 GPU与CPU并行处理的异同1.2.2 CPU的优化方式1.2.3 GPU的特点 1.3 环境搭建1.4 环境变量配置 参考环境搭建设置…

用HeidiSQL在MySQL中创建新的数据库

用有权限的用户登录&#xff1a; 右键单击&#xff0c;选择&#xff1a; 输入要创建的数据库名称&#xff0c;然后点击“确定”&#xff1a; 刷新下&#xff0c;就看到新创建的数据库了&#xff1a; 在新创建的数据库中&#xff0c;就可以做其它操作了&#xff0c;例如…

三、使用CRT连接三台虚拟机

目录 1、建立连接 2、参数配置 3、设置主题,颜色和仿真 1、建立连接

厉害了!!FastReport 全系.NET控件升级v2024,已覆盖支持全新.NET 8 框架 ~

FastReport 作为一款国际知名的报表开发控件&#xff0c;其跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;被世界各地的开发者所认可。 此次FastReport旗下.NET全系更新至v2024新版&#xff0c;在此版本中&#xff0c;上线了许多开发者关注的功能…

SpringSecurity的默认登录页的使用

SpringSecurity的默认登录页的使用 01 前期准备 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mysql驱动--><dependency><grou…

鸿蒙(HarmonyOS)HelloWo入门

1.HarmonyOS简单介绍 1. HarmonyOS特征&#xff1a;一开发发&#xff0c;多端部署&#xff0c;可分可合&#xff0c;自由流转2. HarmonyOS使用的语言&#xff1a;是ArkTs,ArkTs是在TypeScript(简称TS)基础上扩展的&#xff0c;而TS又是在JavaScript(简称JS)的超集、UI框架ArkUI…

看Spring源码不得不会的@Enable模块驱动实现原理讲解

这篇文章我想和你聊一聊 spring的Enable模块驱动的实现原理。 在我们平时使用spring的过程中&#xff0c;如果想要加个定时任务的功能&#xff0c;那么就需要加注解EnableScheduling&#xff0c;如果想使用异步的功能&#xff0c;那就要加EnableScheduling注解&#xff0c;其实…

windows系统可以正常打开蓝牙,但是不能扫描到可连接的设备,蓝牙异常

项目场景&#xff1a; windows系统可以正常打开蓝牙&#xff0c;但是不能扫描到可连接的设备 问题描述 windows系统可以正常打开蓝牙&#xff0c;但是不能扫描到可连接的设备&#xff0c;在尝试卸载重装蓝牙驱动后依然不可以使用 原因分析&#xff1a; 驱动程序问题&#xf…

【23真题】耗时一周还原,终于有真题啦!

今天分享的是23年上海电力850的信号与系统回忆版试题及解析。上电的真题资源极其稀少&#xff0c;去年我找了3份&#xff0c;全部为假&#xff01;好在今年有刚刚上岸的同学全力协助&#xff0c;为大家弄出一份回忆版真题&#xff0c;希望对大家有帮助&#xff01; 小马哥Tips…

Springboot+vue的疗养院管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的疗养院管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的疗养院管理系统&#xff0c;采用M&#xff08;mod…

class dump使用方式和原理

一、安装 官网下载安装包完成后&#xff0c;将class-dump复制到usr/bin文件夹下 如果这个时候没有发现usr文件夹 说明其隐藏起来了 去查询mac系统下怎么显示隐藏文件 发现mac os 10.11不让复制 没有这个权限 解决办法如下&#xff1a; 重启电脑&#xff0c;按住 command …