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 mp4v
videoWriter = cv2.VideoWriter('saveVideo.mp4',fourcc,fps,(1280,720))
#视频地址,视频编码,帧率,画面大小(要和图片一致)
print (cap.isOpened() )
success = True
i = 1
while(success):
success, frame = cap.read()
if success==False:
break
cv2.imwrite("video.jpg" , frame)
if i%5==1 : #每5帧判断一次
i=2
result = 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+=1
cap.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.audio
audio.write_audiofile('test.mp3') # 提取原视频声音
io
audio.write_audiofile('test.mp3') # 提取原视频声音
open(path)
运行脚本完成后,.mp3和.mp4就是我们AI识别后的视频了
问:为什么要提取mp3?
答:最后获取的视频时在原视频转换成图片进行Ai识别后合并成的并不存在音频,所以需要将原视频的音频提取(mp3只是音频格式,也可以使用其他的),在将获取到的视频和音频合并,就是我们想要的结果