我想用flask_restful调用python脚本,然后按照下面的链接来实现 https://dev.to/aaahmedaa/create-restapi-for-your-python-scripts-using-flask-with-15-line-of-code-10ml
我从命令提示符执行命令python app.py并将图像作为输入从浏览器传递,如下所示 http://localhost:5000/ImageClassification/image1.jpg
我的输出为{" data":null}
假设从cnn_classification.py脚本获得如下所示的输出,请告诉我错误的位置。
cnn_classification.py:
import os
import subprocess
os.getcwd()
os.chdir("D:/LH_data/LH_tensorflow/tensorflow-for-poets-2/")
def lh_image_classification(input_image):
subprocess.call(['python', '-m', 'scripts.label_image', '--graph=tf_files/optimized_graph.pb', '--image=' + input_image])
app.py:
import cnn_classification
from flask import Flask, request
from flask_restful import Resource, Api
from sys import argv
app = Flask(__name__)
api = Api(app)
#input_image = argv[1]
class imageClassification(Resource):
def get(self, input_image):
return {'data': cnn_classification.lh_image_classification(input_image)}
api.add_resource(imageClassification, '/ImageClassification/<input_image>')
if __name__ == '__main__':
app.run()
答案 0 :(得分:0)
您不应该以最基本的方式调用subproccess,因为您正在创建安全漏洞。通过使用0
或更差的方式调用端点,可以将命令传递给您描述的端点。
首先,使用脚本而不是使用子进程。细节取决于/ImageClassification/image.png;sudo rm -rf /
内部的内容,但我想它应该看起来像
scripts.label_image
这假设脚本import scripts.label_image
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class ImageClassification(Resource):
def get(self, input_image):
result = label_image(
graph="tf_files/optimized_graph.pb",
image=input_image
)
return {'data': result}
api.add_resource(ImageClassification, '/ImageClassification/<input_image>')
if __name__ == '__main__':
app.run()
是表单
label_image
您可能需要将一些内容从def label_image(graph, image):
#... does stuff
return result
移到项目文件夹中,以便能够将其导入到烧瓶应用程序中。