【AI创造营】AI陪你看《动物世界》
AI陪你看《动物世界》
人工智能识别视频小动物
项目地址(fork即使用)AI陪你看《动物世界》
哔站:哔哩哔哩
GitHub:Github
原理:对视频每一帧进行识别动物并生成新视频(带有识别标识)使用PaddleHub的mobilenet_v2_animals模型识别视频,
还记得中央频道的《动物世界》么,童年~~
每一期都有新的主题,还是百看不厌,如今AI这么火,哪里能没有AI嘞!!!
下面教大家五十行代码,带你走进Ai的《动物世界》
开始前有必要提醒下,导入的python包有些同学的环境可能没有安装
还是需要手动下载的,直接在cmd pip install 包名
即可这里不做演示了哈
1.导入包
这些都是常用的Opencv,PaddleHub,numpy,time还有画图和编辑视频用的 moviepy 和 PIL
import cv2
import paddlehub as hub
import numpy
import time
from moviepy.editor import *
from PIL import Image, ImageDraw, ImageFont
2.图片转类型
因为我们接下来要将Ai识别的结果导入到 视频里面,所以我将视频内的每一帧都保存成图片,并转化成可以在图像上绘图的对象,添加上识别的结果,以便操作
# ---------------------------------转换图片------------------------------
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):if (isinstance(img, numpy.ndarray)): # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(img)# 字体的格式fontStyle = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")# 绘制文本draw.text((left, top), text, textColor, font=fontStyle)# 转换回OpenCV格式return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
3. 读取视频帧并存储新的视频
读取视频内每一帧,并且每5帧识别一次图片,将结果添加到帧上面,且一边读取一边写入输出的视频
# ------------------------------------读取视频帧---------------------------------
def open(path):cap = cv2.VideoCapture(path) #打开原视频fps = cap.get(cv2.CAP_PROP_FPS) #读取帧率print(fps)fourcc = cv2.VideoWriter_fourcc(*'mp4v') # avi DIVX mp4vvideoWriter = cv2.VideoWriter('saveVideo.mp4',fourcc,fps,(1280,720))#视频地址,视频编码,帧率,画面大小(要和图片一致)print (cap.isOpened() )success = Truei = 1while(success): success, frame = cap.read() if success==False:breakcv2.imwrite("video.jpg" , frame) if i%5==1 : #每5帧判断一次i=2result = classifier.classification(images=[cv2.imread(r'video.jpg')])print(result)font = cv2.FONT_HERSHEY_SIMPLEX # 定义字体img = cv2ImgAddText(cv2.imread(r'video.jpg'), str(result[0]), 50, 130, (255, 255, 255), 25)# 图像, 文字内容, 横坐标,纵坐标, 颜色, 字体大小videoWriter.write(img) #把图片写进视频# cv2.imshow("animals",img) if cv2.waitKey(100) & 0xff == ord('1'):#按下1退出break i+=1cap.release() #释放视频cv2.destroyAllWindows() #删除窗口videoWriter.release() #释放编辑视频
4.运行脚本,识别视频内动物
if __name__=='__main__':classifier = hub.Module(name="mobilenet_v2_animals")path=r"C:\Users\Skr-Skr-Skr\Desktop\dw1_1.mp4" # 原视频路径video = VideoFileClip(path)audio = video.audioaudio.write_audiofile('test.mp3') # 提取原视频声音
ioaudio.write_audiofile('test.mp3') # 提取原视频声音open(path)
运行脚本完成后,.mp3和.mp4就是我们AI识别后的视频了
问:为什么要提取mp3?
答:最后获取的视频时在原视频转换成图片进行Ai识别后合并成的并不存在音频,所以需要将原视频的音频提取(mp3只是音频格式,也可以使用其他的),在将获取到的视频和音频合并,就是我们想要的结果
问:python这么强大,不能把视频和音频合成吗?
答:之前试过sox用于合成视频,搞了一晚上也没弄好(菜是原罪),有兴趣的小伙伴可以自己尝试下(弄好的话记得给俺评论下,在线‘白嫖’,哈哈哈)
个人主页:我在AI Studio上获得钻石等级,点亮9个徽章,来互关呀~乌拉__----
【AI创造营】AI陪你看《动物世界》相关推荐
- Metaverse启动机之重构现世,AI创造营创意赛开启
ibrandup @shadow 听说最近又有好玩的竞赛啦? Metaverse启动机 2021.7.9 AI创造营 创意赛正式发布 近日,由百度大脑AI Studio平台发布,PaddlePaddl ...
- 【AI创造营】基于PaddleHub与Jetson Nano的智能宠物看护助手
基于PaddleHub与Jetson Nano的智能宠物看护助手 一.效果展示 二.实现思路 1.训练一个适用于该需求的模型 2.使用PaddleHub预训练模型 三.数据采集 硬件部分 代码部分 四 ...
- [AI创造营]Wechaty实用小工具---九宫图爱心生成器~
[AI创造营]Wechaty实用小工具-九宫图爱心生成器~ 项目地址: https://aistudio.baidu.com/aistudio/projectdetail/2300569 背景 跟随抖 ...
- AI创造营来了!万元奖金、Switch等你来拿...
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 朋友,看青你和创了吗? 牛年最先牛起来的无疑是这两档选秀节目,100多位小哥哥轮番上阵,每个观众都能pick ...
- 【AI创造营】是极客就坚持一百秒?
因为项目需要用到摄像头和显示效果,所以无法在aistudio上直接运行,Fork项目后可见可运行文件,下面直接上效果 [AI创造营]是极客就坚持100秒 参赛作品名 是男人就坚持100秒(DodgeF ...
- 【AI创造营】鬼畜小视频
鬼畜小视频 AiStuido地址:[AI创造营]星爷:焦了诶,emmmm GitHub: -AI-emmmm BiliBili视频地址:星爷:焦了.菩提老祖:emmm~ 这里使用的PaddleGan的 ...
- 【AI创造营】决战二仙桥
参赛作品名 [AI创造营]决战二仙桥(DodgeFace-EXQver) 作品简介 和前作DodgeFace操作方式一样,内部使用的技术换了:之前是ace2p,如果电脑配置不好的话,可能跑起来非常的卡 ...
- [AI创造营]Wechaty实用小工具---证件照助手
[AI创造营]Wechaty实用小工具-证件照助手 项目地址: https://aistudio.baidu.com/aistudio/projectdetail/2253862 你是否苦恼于没有条件 ...
- AI创造营~AnimeGAN一键生成日系动漫Vlog
目录: AI创造营-AnimeGAN一键生成日系动漫Vlog 引子 效果展示图 动漫化结果 一.安装相关的库 二.函数 三.从视频提取图像 四.图像转换为动漫风格并合成新的视频 五.添加原始音频 六. ...
- Mixlab 【AI创造营】 百度飞桨创意赛 参赛项目介绍
Mixlab [AI创造营] 百度飞桨创意赛 参赛项目介绍 项目名称 个性图腾-灵魂使者 Stand by me 作品简介 Jojo立的具象版,从此路人也能看到灵魂使者了! 不用再担心你熊熊燃烧的中二 ...
最新文章
- suricata规则
- Longest Substring Without Repeating Characters(最长不重复子序列求解)
- CSS浮动属性Float到底什么怎么回事,下面详细解释一下
- 面象对象设计6大原则之一:单一职责原则
- q7goodies事例_Java 8 Friday Goodies:java.io终于成功了!
- 管理(1)--- 管理者的基本要求是什么?
- 7个现象告诉你手游圈为什么会有寒冬
- seaJS 模块加载过程分析
- inittab 分析
- Codeforces 165D Beard Graph 边权树剖+树状数组
- 清空SQL数据库日志
- 如何远程配置DHCP服务器
- wincc怎么做一个弹出画面_Wincc如何利用单个弹出窗口画面的模板,来实现调用多组画面参数?...
- Qt涂鸦板及其放大简例
- Conditional ternary operator...
- 什么软件可以截取电视剧视频片段?这3款软件极易上手!
- 怎样设置计算机默认字体及语言,电脑中默认输入法如何设置 Win7系统设置默认输入法技巧...
- dat图片 电脑端微信_微信电脑图片dat转为jpg
- 【工具使用系列】关于 MATLAB 多机电力应用,你需要知道的事
- mysql存储过程基础写法
热门文章
- MP4v2 Android
- count(1) 和count(*)哪个高效?
- vue查看pdf,禁止复制文字,禁止页面鼠标右击,禁用F12
- 申请二类医疗器械备案,对经营场地及人员有什么要求
- 下列不是C语言字符型常,以下选项中,()是不正确的C语言字符型常量。
- Java往文件里写入字符串_Java将字符串写入文本文件代码示例
- leetcode 编译错误member access within null pointer of type ‘TreeNode‘
- SDUT ACM 4078 女装大佬买地
- 以太坊区块链也拥堵_以太坊开发人员怀疑EOS刻意拥堵网络,ETH和EOS大战即将开启?...
- 以太坊拥堵持续加重,谁能弯道超车?