python 图片/语音文件实现base64的转换与解析

本文介绍如何使用Base64编码与解码技术来处理图像和语音文件。通过二进制读取文件,将其转换为Base64编码字符串,并能够从Base64字符串还原成原始文件格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转化与解析流程:二进制读取---转为base64(b64encode)--- 解码(b64decode)--- 输出图片/语音文件

# 实现base64的转化与解析
with open('test.png', 'rb') as f:     # 二进制的方式打开图片
    byte_data = base64.b64encode(f.read())    # 读取文件内容,转换为base64编码,输出的为bytes类型
    str = byte_data.decode('UTF-8')  # 将bytes格式转为字符串
    with open('./data/pic_base64.txt', 'w') as out_file:  # 将转化的base64字符串输出到文件中
        out_file.write(str)
    # print(str)

    # 将base64解码,并输出为图片
    imagedata = base64.b64decode(byte_data)  # 解码为二进制
    print(type(imagedata))
    with open('out.png', 'wb') as out_pic:
        out_pic.write(imagedata)

语音文件同理按如上处理

### 使用Python实现基于讯飞开放平台的语音交互功能 以下是使用 Python 调用讯飞开放平台 API 或 SDK 来实现语音交互功能的具体方法。此过程涉及创建项目、获取访问凭证以及编写代码来完成录音上传和文字转语音等功能。 #### 1. 创建项目并配置环境 在使用讯飞开放平台之前,需先注册账号并登录到开发者控制台,创建一个新的应用以获得 `AppID` 和密钥(API Key 和 Secret Key)。这些参数将在后续请求中用于身份验证[^1]。 #### 2. 安装依赖库 为了简化 HTTP 请求处理流程,推荐安装第三方库如 `requests` 及其扩展模块 `websocket-client`: ```bash pip install requests websocket-client ``` #### 3. 编写核心逻辑代码 下面展示了一个简单的例子,演示如何通过 RESTful 接口发送音频文件给服务器端进行识别,并接收返回的结果;同时也包含了 TTS (Text To Speech) 的基本调用方式。 ##### STT (Speech-To-Text): 音频转换成文本 ```python import base64 import hashlib import hmac import json from datetime import datetime import time import uuid import requests def generate_sign(api_key, api_secret, timestamp): """生成签名""" sign_str = f"{api_key}{timestamp}" signature = hmac.new( bytes(api_secret.encode('utf8')), msg=sign_str.encode('utf8'), digestmod=hashlib.sha256).hexdigest() return signature def stt(audio_path, app_id, api_key, api_secret): url = 'https://lva.xfyun.cn/v2/aiui' with open(audio_path, 'rb') as file: audio_data = file.read() headers = { 'Content-Type': 'application/json', 'Authorization': None, 'X-Param': '{}', 'X-CurTime': str(int(time.time())), 'X-CheckSum': hashlib.md5(audio_data).hexdigest(), 'X-AppName': '', 'X-DeviceId': '' } body = { "common": {}, "business": {"aue": "raw", "result_level": "complete"}, "data": {"audio": {'status': 0, 'format': 'wav'}} } cur_time = int(datetime.now().timestamp()) headers['X-CurTime'] = str(cur_time) headers['Authorization'] = 'Bearer ' + generate_sign(api_key, api_secret, cur_time) response = requests.post(url=url, data=json.dumps(body), headers=headers) result = json.loads(response.text)['data']['result'] return result.get('ws')[0].get('cw')[0]['w'] if __name__ == '__main__': AUDIO_PATH = './test.wav' # 替换为实际路径 APP_ID = '' # 填入您的 App ID API_KEY = '' # 填入您的 Api Key SECRET_KEY = '' # 填入您的 Secret Key text_result = stt(AUDIO_PATH, APP_ID, API_KEY, SECRET_KEY) print(f'Speech Recognition Result: {text_result}') ``` ##### TTS (Text-To-Speech): 文本合成声音 对于将文本合成为语音的操作,则可以参照如下片段: ```python def tts(text_content, voice_name='xiaoyan'): host = 'http://tsn.iflytek.com/' path = '/synthesize' params = {} params["auf"] = "audio/L16;rate=16000" params["aue"] = "RAW" params["voice_name"] = voice_name params["speed"] = "50" params["volume"] = "50" params["pitch"] = "50" params["engine_type"] = "intelligent" business_args = json.dumps(params).replace(' ', '') header = { 'X-Appid': '', # 应用 id 'X-Timestamp': '', # 当前时间戳 'X-Param': business_args, 'X-Key': '', # 动态 key 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' } r = requests.post(host + path, data=text_content.encode(), headers=header) if not os.path.exists('./output_audio'): os.mkdir('./output_audio') output_file = "./output_audio/output.raw" with open(output_file, mode="wb") as out_f: out_f.write(r.content) # Example usage of the function above. sample_text = "欢迎来到科大讯飞技术分享会!" tts(sample_text) print("Audio has been generated successfully.") ``` 以上两段脚本分别实现了从本地读取一段 PCM 格式的 WAV 文件并通过网络传输至云端解析得到对应的文字描述,以及反过来把指定字符串渲染成可播放的声音流保存下来供进一步分析或者直接回放之用[^2]。 --- ### 注意事项 当尝试运行上述样例程序时,请注意以下几点: - **合法性校验**:每次发起新的连接都需要重新计算授权令牌。 - **超时设置**:合理调整等待服务响应的时间长度以防长时间无回应造成阻塞现象发生。 - **错误捕获机制**:增加异常分支判断以便及时发现潜在隐患所在位置进而采取相应措施加以解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值