目录

一、主程序基本结构

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网页开发+分镜相关推荐

  1. Python Web实战:Flask + Vue 开发一个漂亮的词云网站

    作者:snowspace@掘金 前言 大家好,我是菜鸟哥!Python里面两大最牛的Web框架,一个是Django,一个是Flask .今天就分享一个用Flask做的词云生成网站,非常有意思的小web ...

  2. 畅游Python 二十二:网页开发技术方案:AJAX

    一.概述 对于WEB应用程序而言:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回的是字符串(HTML),浏览器将字符串(HTML)渲染并显示在浏览器上. 1.传统的Web应用 一个简 ...

  3. 视频直播app和网页版怎么开发?

    视频直播APP和网页开发定制的几个功能点: 1.直播类软件最主要的功能是支持手机APP端和电脑端视频直播推流,稳定低延迟,保障画面传输流畅.清晰. 2.主播直接连麦PK.和用户互动聊天,包括文字和表情 ...

  4. 盘点Python网页开发轻量级框架Flask知识(下篇)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 一曲新词酒一杯,去年天气旧亭台. ...

  5. python flask web开发 可视化开发_python web开发之——Flask入门教程

    一.安装python2.7(略) 1.Mac下使用python2.7 2.Windows下安装python2.7 从官网下载 双击python2.7,然后选择安装路径,一顿下一步就可以了. 设置环境变 ...

  6. 《Flask Web开发:基于Python的Web应用开发实战》笔记(原创)

    内容提要 在学习"狗书"<Flask Web开发:基于Python的Web应用开发实战>的过程中,一直遇到各种各样的坑.该书的第一部分是"Flask简介&qu ...

  7. Flask Web开发-1.2模板及网页设计基础

    目录: 前言: 一,Jinja2模板引擎 1.渲染模板 2.变量 3.控制结构 二,使用Flask-Bootstrap集成Twitter Bootstrap 三,自定义错误页面 四,链接 五,静态文件 ...

  8. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉还是 ...

  9. Flask Web开发:基于Python的Web应用开发实战

    <Flask Web开发:基于Python的Web应用开发实战> 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 201 ...

最新文章

  1. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
  2. 利用Minhash和LSH寻找相似的集合
  3. python global将结果存储起来给另外一个文件对象使用
  4. easyUI tabs 显示与隐藏 tab 页
  5. SQLite 入门教程(三)好多约束 Constraints
  6. 变量不同作用域的测试
  7. BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
  8. 作者:曾伟,电子科技大学副教授。
  9. 改善深层神经网络:超参数调整、正则化以及优化——2.8 Adam算法(Adaptive Moment Estimation)
  10. mysql连接池 golang_Golang 你一定要懂的连接池
  11. js的跨域问题和解决办法
  12. 使用Pix For Windows调试Shader傻瓜教程
  13. CodeBlocks 20.03 开发基于FLTK 1.4.X 的应用
  14. 一个简短的指南的iOS越狱及原因
  15. 推动中国制造升级,汽车装配车间生产流水线 3D 可视化
  16. java监听微信_fastweixin: 极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...
  17. 【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名
  18. STM32的0.96寸OLED显示屏显示数据
  19. python将房贷数据写进excel表格
  20. C语言通讯录的制作【数据结构】【课程设计】

热门文章

  1. 【面试题】面试官:说说你对MySQL的了解
  2. php过waf 一句话,(转)一句话木马绕过WAF
  3. 淘宝618活动节奏指南
  4. ihg的邮箱服务器,【分享】邮箱吧建吧以来花名册, 看看有没有你!
  5. STM32实验六:PWM输出实验总结
  6. random函数概总
  7. 腾讯游戏unity客户端面试题
  8. 《快速阅读术》--如何养成阅读的习惯
  9. 编辑精选 | 程序员大本营5月刊:每月遴选高质量的技术干货与资讯
  10. LINUX——各个命令合集(持续性ing)