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

 本文主要讲解了在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

选择音频文件后

 

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天|여름이다

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值