Python 对象检测:在连续请求中覆盖图像

Python 对象检测:在连续请求中覆盖图像,python,flask,Python,Flask,我正在尝试使用flask实现一个对象检测web应用程序 我的应用程序的流程是: 用户将上载一个图像 映像将保存到目录(“/static/uploads”文件夹) 一个名为“get_images”的函数将读取图像,加载对象检测器模型,最后在指定的文件夹(“/static/detections/”中写入具有检测功能的图像 然后,名为“upload.html”的模板将显示上载目录中的上载图像,以及检测目录中的检测图像 第一次运行和再次启动服务器时,应用程序运行正常。但是,如果我在第一张图像上运行检

我正在尝试使用flask实现一个对象检测web应用程序

我的应用程序的流程是:

  • 用户将上载一个图像
  • 映像将保存到目录(“/static/uploads”文件夹)
  • 一个名为“get_images”的函数将读取图像,加载对象检测器模型,最后在指定的文件夹(“/static/detections/”中写入具有检测功能的图像
  • 然后,名为“upload.html”的模板将显示上载目录中的上载图像,以及检测目录中的检测图像
第一次运行和再次启动服务器时,应用程序运行正常。但是,如果我在第一张图像上运行检测后尝试上载另一张图像,则具有检测的图像将被前一张图像覆盖,但其名称将保留,最终导致具有检测的第一张图像被反复显示。My flask app(app.py)代码如下:

app = Flask(__name__)
UPLOAD_FOLDER = './static/uploads/'
DETECTION_FOLDER = './static/detections/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
app.config['DETECTION_FOLDER'] = DETECTION_FOLDER
# app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 
# app.config['TEMPLATES_AUTO_RELOAD'] = True

@app.route("/")
def index():
  return render_template("index.html")

@app.route("/about")
def about():
  return render_template("about.html")

@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():

    if request.method == 'POST':
        f = request.files['file']
        # create a secure filename
        filename = secure_filename(f.filename)
        print(filename)
        # save file to /static/uploads
        filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        print(filepath)
        f.save(filepath)
        print(filepath)     
        
        get_image(filepath,filename)
                
        return render_template("uploaded.html", display_detection = filename, fname = filename)      

if __name__ == '__main__':
   app.run(port=4000, debug=True)
函数
get_image()
是文件
app_helper.py
的一种方法,并最终在图像上执行cv2.imwrite,并进行检测。我认为问题可能出在代码的这一部分,因为这是唯一一个完成“编写”的地方。因此,我多次运行app_helper.py函数,而不是一次覆盖图像(在“/static/detections/”文件夹中)

我加入了一些图片来更好地解释我的担忧

由于新文件名(phone.jpg)现在与“phone2.jpg”相同的图像相关联,因此检测图像不会改变。我不断重复这一点,我上传的任何新图片都被“phone2.jpg”覆盖了

我重复一遍,我尝试分别运行get_images()方法-即使在多个图像上运行它,也没有发生这样的覆盖。对于ref,get_images()方法是对代码的轻微修改。('upload.html'依赖于文件名来显示图像,该文件名在此处维护) e、 g.
get_图像('/data/images/kite.jpg','kite.jpg')

ps-我也试着加上

# app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 
# app.config['TEMPLATES_AUTO_RELOAD'] = True
而且,在第一次执行之后,我清空了uploads and detections文件夹,检查这是否有帮助, 但这些都不起作用

请帮助我,我希望我的应用程序能够承受多次运行(上传和检测),而不会出现此类问题


谢谢。

isn;t在
get_image
part
filepath=os.path.dirname(filepath)
?您已经同时添加了文件名和文件路径earlier@sahasrara62是的,get_images尽管有完整的路径(文件名在末尾),但仍有'filename'参数,这是因为我可以轻松提取图像名,并将最终图像与检测结果以相同的名称保存在检测结果目录中。@sahasrara62仍然,我记录了路径,并使用记录的路径手动运行了get_images,但这并没有导致此类问题。