You need to enable JavaScript to run this app. 如何解决Django调用Colab训练的CNN盲文分类模型报无此文件错误
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Django调用Colab训练的CNN盲文分类模型报无此文件错误

Django接入盲文分类模型"无此文件或目录"报错解决方案

核心报错原因及修复方案

你遇到的文件不存在报错由两类路径问题导致,同时代码存在多处逻辑错误需要同步修正:

1. 相对路径不兼容Django运行规则

你使用的./model/BrailleNet.h5、'.'+filelink两种相对路径写法完全依赖Django进程的启动目录,只要启动位置变化就会出现路径读取失败,统一替换为Django内置的绝对路径拼接规则:

  • 首先在视图文件头部导入依赖:
import os
from django.conf import settings
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
import numpy as np
import tensorflow as tf
  • 模型路径替换为绝对路径:
    models=load_model(os.path.join(settings.BASE_DIR, 'model', 'BrailleNet.h5'))
  • 上传图片不要手动拼接.,如果图片存储在媒体目录,用os.path.join(settings.MEDIA_ROOT, 文件名)拼接真实存储路径。

2. 上传文件获取方式错误

表单上传的文件不会存储在request.POST中,你从POST读取myfiles本身就拿不到有效值,自然拼不出合法路径:

  • 首先要求前端提交文件的表单必须添加属性enctype="multipart/form-data"
  • 后端获取上传文件的方式改为:
    upload_file = request.FILES.get('myfiles')
    拿到文件对象后可先写入本地临时目录或者直接读入内存处理,无需通过url反查本地路径。

3. 模型加载逻辑优化(非报错直接原因,但会降低报错概率)

当前你每次请求都会重新加载一次模型文件,不仅响应慢还容易出现文件读取锁冲突,把模型加载逻辑移到视图函数外部,项目启动时仅加载一次即可。

其他致命逻辑错误修复

你当前的分类判断逻辑除了A和Z之外,所有预测值都会返回分类B,所有elif np.argmax(predi) == 1需要依次修改为==2到==24,对应C到Y的分类,也可以用列表映射简化代码:

label_list = [f'Classification : huruf {chr(ord("A")+i)} <br/>' for i in range(26)]
predictedLabel = label_list[np.argmax(predi)]

修正后参考代码

# 项目启动时仅加载一次模型
tf.compat.v1.disable_eager_execution()
img_height, img_width=224,224
model_graph = tf.Graph()
with model_graph.as_default():
    tf_session=tf.compat.v1.Session()
    with tf_session.as_default():
        models=load_model(os.path.join(settings.BASE_DIR, 'model', 'BrailleNet.h5'))
label_list = [f'Classification : huruf {chr(ord("A")+i)} <br/>' for i in range(26)]

def prosesImg(request):
    # 接收上传文件
    upload_file = request.FILES.get('myfiles')
    # 保存文件到临时目录,提前在项目根目录创建temp文件夹
    temp_path = os.path.join(settings.BASE_DIR, 'temp', upload_file.name)
    with open(temp_path, 'wb+') as f:
        for chunk in upload_file.chunks():
            f.write(chunk)
    
    # 图片预处理
    img = image.load_img(temp_path, target_size=(img_height, img_width))
    x = image.img_to_array(img)
    x = x / 255
    x = x.reshape(1, img_height, img_width, 3)
    with model_graph.as_default():
        with tf_session.as_default():
            predi = models.predict(x)
    
    # 获取分类结果
    predictedLabel = label_list[np.argmax(predi)]
    # 可选:删除临时文件避免占用空间
    os.remove(temp_path)
    
    return render(request, 'classification/hasil.html', {
        'judul': 'Result',
        'subjudul': 'RESULT',
        'predictedLabel': predictedLabel,
        'predi': predi,
        'uploaded_file_url': '/temp/'+upload_file.name }
    )

内容的提问来源于stack exchange,提问作者Amanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 17:51:03