AI陪你看《动物世界》

AI陪你看《动物世界》

人工智能识别视频小动物

项目地址(fork即使用)AI陪你看《动物世界》

哔站:哔哩哔哩

GitHub:Github

原理:对视频每一帧进行识别动物并生成新视频(带有识别标识)使用PaddleHub的mobilenet_v2_animals模型识别视频,

还记得中央频道的《动物世界》么,童年~~

每一期都有新的主题,还是百看不厌,如今AI这么火,哪里能没有AI嘞!!!

下面教大家五十行代码,带你走进Ai的《动物世界》

image

开始前有必要提醒下,导入的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只是音频格式,也可以使用其他的),在将获取到的视频和音频合并,就是我们想要的结果

问:python这么强大,不能把视频和音频合成吗?

答:之前试过sox用于合成视频,搞了一晚上也没弄好(菜是原罪),有兴趣的小伙伴可以自己尝试下(弄好的话记得给俺评论下,在线‘白嫖’,哈哈哈)

个人主页:我在AI Studio上获得钻石等级,点亮9个徽章,来互关呀~乌拉__----

猜你喜欢

转载自blog.csdn.net/qq_38758774/article/details/114868301