首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用烧瓶的网页上使用京A模板将数据作为无数据返回?

为什么在使用烧瓶的网页上使用京A模板将数据作为无数据返回?
EN

Stack Overflow用户
提问于 2021-09-03 15:48:32
回答 2查看 80关注 0票数 1

我试图打印一个表格来显示我在网页上调用的烧瓶函数中的数据。我查看了精良模板,这是我试图使用的,但是没有用。

我的代码附在下面。来自我的cv_acp文件的是我试图以表格形式显示的内容。

目前,我的TSN_PIC返回的结果如下:

输入视频帧被分类为PlayingCello - 99.33 PlayingGuitar - 0.28 PlayingPiano - 0.16 BoxingSpeedBag - 0.10 StillRings - 0.06

但我希望能够使用表格格式的烧瓶将其显示在网页上。

我的代码如下:

cv_acp

代码语言:javascript
复制
def TSN_PIC(img):
    img = image.imread(img)
 
    fig, ax = plt.subplots(figsize=(18, 18))
    ax.imshow(img.asnumpy())

    transform_fn = transforms.Compose([
    video.VideoCenterCrop(size=224),
    video.VideoToTensor(),
    video.VideoNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
    img_list = transform_fn([img.asnumpy()])
    net = get_model('vgg16_ucf101', nclass=101, pretrained=True)
    pred = net(nd.array(img_list[0]).expand_dims(axis=0))
    classes = net.classes
    topK = 5
    ind = nd.topk(pred, k=topK)[0].astype('int')
    print('The input video frame is classified to be')
    for i in range(topK):
        result = ('\t%s - %.2f'%(classes[ind[i].asscalar()], nd.softmax(pred)[0][ind[i]].asscalar()*100))
        print((result)) 
    return plt.show()

app.py

代码语言:javascript
复制
@app.route("/cv/action_prediction/TSN_PIC", methods=['POST'])
def cv_acp_TSN_PIC_upload_image():
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        flash('No image selected for uploading')
        return redirect(request.url)
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        print(app.config)
        path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        print(path)
        file.save(path)
        #print(file.config)
        result = cv_acp.TSN_PIC(path)
       # print (results)
        #print('upload_image filename: ' + filename)
        flash('Image successfully uploaded and displayed below')
        return render_template('cv_acp_TSN_PIC.html', filename=filename, result=result)
    else:
        flash('Allowed image types are -> png, jpg, jpeg, gif')
        return redirect(request.url)


@app.route('/cv/action_prediction/TSN_PIC/display/<filename>')
def cv_acp_TSN_PIC_display_image(filename):
    #print('display_image filename: ' + filename)
    #return MASK_RCNN('static', filename='uploads/' + filename)
    return redirect(url_for('static', filename='uploads/' + filename), code=301)

if __name__ == "__main__":
#app.run()
app.run()

cv_acp_TSN_PIC.html

代码语言:javascript
复制
<div id="content" class="p-4 p-md-5 pt-5">

        <h2 class="mb-4">TSN PIC</h2>
        <!Doctype html>
<title>Python Flask File Upload Example</title>
<h2>Select a file to upload</h2>
<p>
    {% with messages = get_flashed_messages() %}
      {% if messages %}
        <ul>
        {% for message in messages %}
          <li>{{ message }}</li>
        {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}
</p>
{% if filename %}
    <div>
        <img src="{{ url_for('cv_acp_TSN_PIC_display_image', filename=filename) }}">
        {% block content %}
    <div class="container">
        <p>{{results}}</p>
    </div>
{% endblock %}
    </div>
    

    
{% endif %}
<form method="post" action="/cv/action_prediction/TSN_PIC" enctype="multipart/form-data">
    <dl>
        <p>
            <input type="file" name="file" autocomplete="off" required>
        </p>
    </dl>
    <p>
        <input type="submit" value="Submit">
    </p>
</form>
      </div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-03 17:16:04

创建所需数据的字典列表并返回。然后,您可以遍历数据并构建您的表。

代码语言:javascript
复制
results = []
for i in range(topK):
    result = ('\t%s - %.2f'%(classes[ind[i].asscalar()], nd.softmax(pred)[0][ind[i]].asscalar()*100))
    datadict = {
         'header': yourheadername,
         'data': yourdatahere
    }
        
    results.append(datadict)

return results


<table border=1>
{% for result in results%}
    <tr>
      <th>
        {{result.header}}
      </th>
    </tr>
    <tr>
      <td>
        {{result.data}}
      </td> 
    </tr>
{% endfor %}

    </table>
票数 0
EN

Stack Overflow用户

发布于 2021-09-03 16:51:37

如果你在终端机或木星笔记本上工作,plt.show()会做你想做的事。对于一个网页来说就不是那么重要了。

你有一个好的开端,否则,它的基础似乎是得到一个上传的图像显示。因此,您的挑战将是在生成页面之前将matplotlib映像保存到磁盘,或者推迟生成图像,直到通过<img src=...请求时,然后以某种方式将图像位从cv_acp_TSN_PIC_display_image返回,而不是返回到保存文件的路径。

要做前者,plt.savefig('uploads/image.png')可能是您所需要的,但请注意,只要有多个用户访问该应用程序,固定的文件名就会严重破坏程序的功能。

要执行后一项操作,请参见this question and its answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69047610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档