首页 > 其他分享 >数字人实时对话的实现过程

数字人实时对话的实现过程

时间:2024-03-25 14:25:04浏览次数:21  
标签:数字 cid 实时 headers danmu api 对话 弹幕 response

数字人实时对话的实现过程

一、直播间实时对话

1、实现数字人功能

2、爬取视频弹幕(获取输入)

  • 编写爬虫脚本,获取弹幕
import requests
import json

def crawl_danmu(video_url):
    # 添加请求头,模拟浏览器请求
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
    }
    
    # 发送带有请求头的请求
    response = requests.get(video_url, headers=headers)
    if response.status_code != 200:
        print("Failed to fetch the webpage.")
        return
    
    # 获取弹幕数据的接口地址
    cid_api = "https://api.bilibili.com/x/player/pagelist?bvid=" + video_url.split("/")[4]
    cid_response = requests.get(cid_api, headers=headers)
    cid_data = json.loads(cid_response.text)
    cid = cid_data["data"][0]["cid"]
    
    danmu_api = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + str(cid)
    
    # 发送请求获取弹幕数据
    danmu_response = requests.get(danmu_api, headers=headers)
    danmu_response.encoding = 'utf-8'  # 设置编码为 utf-8,确保可以正确解析中文字符
    if danmu_response.status_code != 200:
        print("Failed to fetch the danmu.")
        return
    
    # 解析弹幕数据并打印
    danmu_list = danmu_response.text.split("</d><d p=")[1:]
    for danmu in danmu_list:
        content = danmu.split(">")[1].split("<")[0]
        print(content)

# 将视频链接替换为您要爬取的视频链接
video_url = "https://www.bilibili.com/video/BV1qy4y1x7aW"

# 调用函数获取弹幕
crawl_danmu(video_url)

  • 保存爬取数据为txt文本,进行整理

3、回复输入及应答

  • 链接chatgpt的api(第一种)

  • 将获取输入链接给chatgpt,并逐条回复文本(第二种)

    • 写python脚本将txt文本输入到cha'tgpt输入框中,点回车
  • 获取chatgpt回答的文本内容

  • 将文字输入给模块一,实现数字人实时对话功能

note:直播和实时对话要调延迟


二、数字人直接与人语音对话

标签:数字,cid,实时,headers,danmu,api,对话,弹幕,response
From: https://www.cnblogs.com/woods-/p/18094269

相关文章

  • 看赵本山(瞎子)与潘长江(瘸子)相约去观灯的对话,多搞笑!
    看赵本山(瞎子)与潘长江(瘸子)相约去观灯的对话,多搞笑!——小品《大观灯》(中2)的台词(接上)潘长江:哎对亲家,这回你你你座下我不调理你了啊赵本山:我也看明白了要不跟你玩点速度那是不行了潘:挺挺鬼的呢你说赵:别闹了,干啥来了潘:亲家,唠点真格的(正经)今个不是新春的佳节那大街上有......
  • 为什么使用类型化数组来进行字节操作而不是普通的 javascript 数字数组
    1.javascript中的数字数据类型默认为64位(8字节),无论任何数字。这意味着可以在不损失精度的情况下表示-2⁵³+1到2⁵³–1范围内的数字。这意味着即使我们想存储10个,也会消耗8个字节的内存,而这是根本不需要的。当内存效率是一个问题时,特别是在处理大型整数数组或二进制数......
  • 水坝水流3D可视化:探索自然力量的数字奇幻之旅
    在科技的海洋中,我们不断探寻着自然界的奥秘,而3D可视化技术正是我们揭开自然之力神秘面纱的一把钥匙。今天,就让我们一起走进这个充满奇幻与真实的数字世界,感受水流之美,领悟自然之力。 水坝作为人类智慧的结晶,既是大自然的驯服者,又是生态平衡的守护者。而水流则是水坝的灵魂,是生......
  • CNN实现手写数字识别
    全部代码如下:importtorchimporttorch.nnasnnimporttorch.optimasoptimimporttorch.nn.functionalasFfromtorchvisionimportdatasets,transforms#超参数batch_size=64epochs=10learning_rate=0.01momentum=0.5log_interval=10#准备数据t......
  • 基于GD32E230C8T6的数字示波器
    基于GD32E230C8T6的数字示波器文章目录基于GD32E230C8T6的数字示波器基于GD32E230C8T6的数字示波器实物演示电路原理**模拟前端处理电路**image.png**交直流耦合电路****输入信号衰减电路****信号调理电路****虚断:****虚短:****电压跟随器****反相......
  • BM56 有重复项数字的全排列(回溯)
    importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramnumint整型一维数组*@returnint整型ArrayList<ArrayList<>>*/publicvo......
  • python趣味编程-使用 Django 和 WebSockets 的 Python 简单实时聊天室网站
    在Python中使用Django的简单实时聊天室系统该项目名为“简单实时聊天室系统”。这是一个使用Python和DjangoFramework开发的基于Web的应用程序。该应用程序是一个供随机用户使用的简单聊天室。所有人都可以在一个聊天框或对话框中进行交流。聊天消息会自动更新到所......
  • 获取所有EFT基金实时行情数据
    获取所有EFT基金实时行情数据,打印完整数据,并保存到csv文件代码:importpandasaspdimportakshareasak#列名与数据对其显示pd.set_option('display.unicode.ambiguous_as_wide',True)pd.set_option('display.unicode.east_asian_width',True)#显示所有列pd.set_o......
  • 字符串中提取数字
    10.16输入一个字符串,内有数字和非数字字符,如:                 a123x45617960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。#include<stdio.h>#include<s......
  • 银行数字人民币系统应用架构设计
    2019年10月,01区块链联合数字资产研究院发布了《人民币3.0:中国央行数字货币运行框架与技术解析》,从数字货币界定和人民币发展历程出发,区分了央行数字货币与比特币、移动支付等的区别,全面介绍了央行数字货币的发展历程及现状,并对2019年9月之前央行及其下属机构申请的84项相关专利......