tornado调用tensorflow模型对视频进行处理

2024-06-03 22:32

本文主要是介绍tornado调用tensorflow模型对视频进行处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系统环境:

linux系统:ubuntu16.04

tensorflow:tensorflow-1.13.1-cp35-cp35m-linux_x86_64.whl

python:3.5

OpenCV:3.4.5

 

1、安装tornado

sudo apt install python3-pip
pip3 install tornado

查看版本号,安装完成

2、运行官方例程 helloworld.py

import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, world")def make_app():return tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":app = make_app()app.listen(8888)tornado.ioloop.IOLoop.current().start()
python3 helloworld.py

打开浏览器,输入http://127.0.0.1:8888即可

3、tornado调用tensorflow模型对视频进行处理

服务端代码video_server.py如下:

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import requests
import base64
from PIL import Image
from io import BytesIO
import numpy as np
import cv2
import jsonfrom tornado.options import define, optionsfrom tf_human_pose_pb import runVideotensorflow_model = r"/mnt/c/workspace/code/model.pb"# http://127.0.0.1:8888/video
define("port", default=8888, help="run on the given port", type=int)class MainHandler(tornado.web.RequestHandler):def get(self):self.write("run demo ......")class testHandler(tornado.web.RequestHandler):def get(self):self.write("test!!!")def post(self):## using json jsonbyte = self.request.bodyjsonstr = jsonbyte.decode('utf8')args = json.loads(jsonstr)video_url = args.get('video_url')if video_url is not None:to_return = {}output = runVideo(video_url,tensorflow_model)to_return['result'] = outputself.write(json.dumps(to_return))else:self.write_error(401)returndef main():tornado.options.parse_command_line()application = tornado.web.Application([(r"/", MainHandler), (r"/video",testHandler)])http_server = tornado.httpserver.HTTPServer(application)http_server.listen(options.port,address='0.0.0.0')tornado.ioloop.IOLoop.current().start()if __name__ == "__main__":main()

客户端代码http_client.py如下:

import requests
import jsonresponse = requests.post('http://XXX.XXX.XXX.XXX:8888/video', json.dumps({"video_url": "https://XXXXXXXXXX视频下载地址XXXXXXXXXXX"}))
print(response.json())

先运行服务端代码,再运行客户端代码,可以在服务端的命令行窗口那看到显示下面这行信息

 

其他的测试工具,可以用Postman或者火狐浏览器的插件RESTClient

在浏览器附加组件选项中搜索RESTClient,如下图

添加启用该组件后就可以愉快地玩耍了

 

参考链接

tornad官网:https://www.tornadoweb.org/en/stable/

 

这篇关于tornado调用tensorflow模型对视频进行处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028291

相关文章

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静