Python视频处理(2)——Flask网页开发+分镜
目录
一、主程序基本结构
1、安装并导入Flask
2、创建Flask对象(很重要的一步,不能忘记)
3、编写主程序
4、路由
5、完整代码
二、渲染网页
三、定义分镜相关函数
1、定义切帧函数并调用
2、Hash均值分镜
3、直方图均值分镜
4、修改完善并呈现
一、主程序基本结构
1、安装并导入Flask
安装:pip3 install flask
导入:
from flask import Flask
(以下2—5部分文案引自Python学习 | 2021-10-22 Flask Web开发_宣纸儿的博客-CSDN博客,博主概括得非常凝练)
2、创建Flask对象(很重要的一步,不能忘记)
- flask程序需要创建一个Flask类对象,用于应用的配置和运行
- name 是Python中的特殊变量,如果文件作为主程序执行,那么
__name__
变量的值就是__main__
,如果是被其他模块引入,那么__name__
的值就是模块名称
app = Flask(__name__)
3、编写主程序
- 在主程序中,执行run()来启动应用
- 改名启动一个本地服务器,默认情况下其地址是localhost:5000,可以使用关键字参数port修改监听端口
if __name__ =="__main__":
app.run(debug=True, port=5008)
4、路由
- 使用app变量的route()装饰器来告诉Flask框架URL如何触发视图函数
- 处理URL和函数之间关系的程序称为路由
- 像index()这样的函数称为视图函数(view function),函数的返回值称为响应,是客户端会收到的内容
- 对路径’/'的请求将转为对index()函数的调用
@app.route('/')
def index():
return 'Hello World!'
- 尖括号里的内容是动态部分
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
5、完整代码
from flask import Flask
app = Flask(__name__)@app.route('/')
def index():return 'Hello, World!'if __name__ == '__main__':app.run(port="5008")
二、渲染网页
创建一个文件夹templates(固定的,不能更改),并在文件夹下创建一个index.html文件
在main.py中修改返回处代码为:
def index():
return render_template('index.html')
完整修改代码:
from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')def index():return render_template('index.html')
if "__main__"==__name__:app.run(port="5008")
三、定义分镜相关函数
(详见上期Python视频处理(1)——视频分镜头提取+视频处理_maplelistener的博客-CSDN博客)
1、定义切帧函数并调用
from flask import Flask,render_templateapp = Flask(__name__)def genFrame():v_path="static/ghz.mp4"image_save="static/pic"cap=cv2.VideoCapture(v_path)frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)for i in range(int(frame_count)):_,img=cap.read()img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imwrite("static/pic/image{}.jpg".format(i),img)@app.route('/')def index():genFrame()pic="static/pic/image"framecount=249return render_template('index.html',pic1=pic,framecount=framecount)
if "__main__"==__name__:app.run(port="5008")
可以在前端显示切帧结果:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask</title>
</head>
<body>
视频分镜
<br>
<video width="640" height="480" controls autoplay><source src="static/ghz.mp4" type="video/mp4"><object data="static/ghz.mp4" width="640" height="480"><embed width="640" height="480" src="static/ghz.mp4"></object>
</video>
<br>
帧数:{{framecount}}<br>
{% for i in range(framecount) %}<img height="20" src="{{pic1}}{{i}}.jpg" />
{% endfor %}
</body>
</html>
运行结果:
注意事项:
上述代码成功的一个重要前提是,一定要记住把要处理的相关文件(视频,图片)都存在static静态文档中。
2、Hash均值分镜
可以利用导入包的方式,新建compareImageHash.py(具体代码内容详见上期Python视频处理(1)——视频分镜头提取+视频处理_maplelistener的博客-CSDN博客)
这样可以离线计算得出所有结果后,再将结果通过html展示
修改函数genFrame()
def genFrame():v_path='static/ghz.mp4'image_save='static/hash'if not(os.path.exists(image_save)):print(image_save)os.mkdir(image_save)cap=cv2.VideoCapture(v_path)fc=cap.get(cv2.CAP_PROP_FRAME_COUNT)print(fc)_, img1 = cap.read()cv2.imwrite('static/hash/image{}.jpg'.format(0), img1)print(int(fc))for i in range(248):_, img2 = cap.read()hash1 = aHash(img1)hash2 = aHash(img2)n = cmpHash(hash1, hash2)#print('均值哈希算法相似度:', n)if (n<0.6):cv2.imwrite('static/hash/image{}.jpg'.format(i),img2)img1=img2
3、直方图均值分镜
compareImageHist.py
(详见上期Python视频处理(1)——视频分镜头提取+视频处理_maplelistener的博客-CSDN博客)
修改函数genFrame()
def genFrame():v_path='static/ghz.mp4'image_save='static/hash'if not(os.path.exists(image_save)):print(image_save)os.mkdir(image_save)cap=cv2.VideoCapture(v_path)fc=cap.get(cv2.CAP_PROP_FRAME_COUNT)print(fc)_, img1 = cap.read()cv2.imwrite('static/hash/image{}.jpg'.format(0), img1)print(int(fc))for i in range(248):_, img2 = cap.read()n = classify_hist_with_split(img1, img2)#print('均值哈希算法相似度:', n)if (n<0.6):cv2.imwrite('static/hash/image{}.jpg'.format(i),img2)img1=img2
4、修改完善并呈现
修改完善main.py:
@app.route('/shot')
def shot():path='static/hash'filename = os.listdir(path)framecount=len(filename)filename.sort(key= lambda x:int(x[5:-4]))print(filename)print(type(filename))print(filename)path='static/hist'histfile = os.listdir(path)histcount=len(histfile)
histfile.sort(key= lambda x:int(x[5:-4])) #对List的元素排序
return render_template('shot.html',filename=filename,framecount=framecount,histfile=histfile,histcount=histcount)
修改网页端:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask</title>
</head>
<body>
视频分镜
<br>
<video width="640" height="480" controls autoplay><source src="static/ghz.mp4" type="video/mp4"><object data="static/ghz.mp4" width="640" height="480"><embed width="640" height="480" src="static/ghz.mp4"></object>
</video>
<br>
均值哈希帧数:{{framecount}}<br>
{% for i in range(framecount) %}<img height="20" src="static/hash/{{filename[i]}}.jpg" />
{{filename[i]}}
{% endfor %}
<br>
直方图相似度帧数:{{histcount}}<br>
{% for i in range(histcount) %}<img height="20" src="static/hist/{{histfile[i]}}.jpg" />
{{histfile[i]}}
{% endfor %}
</body>
</html>
运行结果:
Python视频处理(2)——Flask网页开发+分镜相关推荐
- Python Web实战:Flask + Vue 开发一个漂亮的词云网站
作者:snowspace@掘金 前言 大家好,我是菜鸟哥!Python里面两大最牛的Web框架,一个是Django,一个是Flask .今天就分享一个用Flask做的词云生成网站,非常有意思的小web ...
- 畅游Python 二十二:网页开发技术方案:AJAX
一.概述 对于WEB应用程序而言:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回的是字符串(HTML),浏览器将字符串(HTML)渲染并显示在浏览器上. 1.传统的Web应用 一个简 ...
- 视频直播app和网页版怎么开发?
视频直播APP和网页开发定制的几个功能点: 1.直播类软件最主要的功能是支持手机APP端和电脑端视频直播推流,稳定低延迟,保障画面传输流畅.清晰. 2.主播直接连麦PK.和用户互动聊天,包括文字和表情 ...
- 盘点Python网页开发轻量级框架Flask知识(下篇)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 一曲新词酒一杯,去年天气旧亭台. ...
- python flask web开发 可视化开发_python web开发之——Flask入门教程
一.安装python2.7(略) 1.Mac下使用python2.7 2.Windows下安装python2.7 从官网下载 双击python2.7,然后选择安装路径,一顿下一步就可以了. 设置环境变 ...
- 《Flask Web开发:基于Python的Web应用开发实战》笔记(原创)
内容提要 在学习"狗书"<Flask Web开发:基于Python的Web应用开发实战>的过程中,一直遇到各种各样的坑.该书的第一部分是"Flask简介&qu ...
- Flask Web开发-1.2模板及网页设计基础
目录: 前言: 一,Jinja2模板引擎 1.渲染模板 2.变量 3.控制结构 二,使用Flask-Bootstrap集成Twitter Bootstrap 三,自定义错误页面 四,链接 五,静态文件 ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉还是 ...
- Flask Web开发:基于Python的Web应用开发实战
<Flask Web开发:基于Python的Web应用开发实战> 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 201 ...
最新文章
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- 利用Minhash和LSH寻找相似的集合
- python global将结果存储起来给另外一个文件对象使用
- easyUI tabs 显示与隐藏 tab 页
- SQLite 入门教程(三)好多约束 Constraints
- 变量不同作用域的测试
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
- 作者:曾伟,电子科技大学副教授。
- 改善深层神经网络:超参数调整、正则化以及优化——2.8 Adam算法(Adaptive Moment Estimation)
- mysql连接池 golang_Golang 你一定要懂的连接池
- js的跨域问题和解决办法
- 使用Pix For Windows调试Shader傻瓜教程
- CodeBlocks 20.03 开发基于FLTK 1.4.X 的应用
- 一个简短的指南的iOS越狱及原因
- 推动中国制造升级,汽车装配车间生产流水线 3D 可视化
- java监听微信_fastweixin: 极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...
- 【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名
- STM32的0.96寸OLED显示屏显示数据
- python将房贷数据写进excel表格
- C语言通讯录的制作【数据结构】【课程设计】