480浏览
查看: 480|回复: 0

[教程] 【Mind+Python】元宇宙之舞动的弹幕2

[复制链接]
本帖最后由 gray6666 于 2021-12-9 15:08 编辑

二、【制作过程】3.利用opencv库将视频分割为图片序列

3-2videocut.png

参考代码

import cv2
cap = cv2.VideoCapture(r"史上最愚蠢翻跳.flv")
NO=1
while True:
    # 逐帧读取视频  按顺序保存到本地文件夹
    ret,frame = cap.read()
    if ret:
        NO=NO+1
        cv2.imwrite(f"picture\image_{NO}.jpg",frame)
    else:
        break
cap.release()   # 释放资源


4.在百度AI平台注册,申请人像分割账号,(虽然是人像切割,但是卡通 效果也很棒)制作图像蒙版序列

4-0photocut.png

4-1-1videocut.png

4-1-2photocut.png

4-5.png

在保存图像序列的 picture文件夹 中 编辑如下文件,并运行蒙版制作程序

4-3-1photocut.png

4-3photocut.png


参考代码
import cv2
import base64
import numpy as np

from aip import AipBodyAnalysis

# 在百度云中申请,每天各接口有调用5万次数限制.
APP_ID = '****************************'
API_KEY = '****************************'
SECRET_KEY = '****************************'

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
#i=103 #500
for i in range(511,1040): # 500 _999
    imgfile ='picture\image_'+str(i)+'.jpg'
    ori_img = cv2.imread(imgfile)
    height, width, _ = ori_img.shape
    with open(imgfile, 'rb') as fp:
        img_info = fp.read()
    seg_res = client.bodySeg(img_info)
    labelmap = base64.b64decode(seg_res['labelmap'])
    nparr = np.fromstring(labelmap, np.uint8)
    labelimg = cv2.imdecode(nparr,1)
    labelimg = cv2.resize(labelimg,(width,height), interpolation=cv2.INTER_NEAREST)
    new_img = np.where(labelimg==1, 255, labelimg)
    maskfile = imgfile.replace('.jpg', '.png')
    cv2.imwrite(maskfile, new_img)
    print('第', i, '张完成')


5.爬取视频弹幕

谷歌浏览器按F12,找到 cid 信息

5-1cid.png

在浏览器网址栏输入
https://comment.bilibili.com/cid号.xml

例:https://comment.bilibili.com/408105174.xml
可以查看弹幕
5-3bilibili_cid.png

运行以下python代码爬取弹幕
5-6.png
参考代码
import requests

url=r'https://comment.bilibili.com/408105174.xml'
r=requests.get(url)#访问url
r.encoding='utf8'
#导入BeautifulSoup库,使用lxml解析器解析页面:
from bs4 import BeautifulSoup
import pandas as pd
import re
#解析页面
soup=BeautifulSoup(r.text,'lxml')#lxml是常用的解析器,需要提前使用pip工具安装lxml库
results=soup.find_all('d')#找到所有页面的d标签
print(results)
data = [data.text for data in results]
# 输出到文件

# 正则去掉多余的空格和换行
for i in data:
    i = re.sub('\s+', '', i)
    file = open(r"word.txt", "a")
    print(data)
    file.write(i)#写入弹幕
    file.write('\n')#换行
    file.close()

# 查看数量
print("弹幕数量为:{}".format(len(data)))

5-5.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail