You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用Flask OCR接口持续连接失败问题求助

Flutter调用Flask OCR接口连接被拒绝+文本提取失败的解决方案

核心问题定位

出现连接被拒绝+无文本提取的情况,主要是三个问题叠加导致:

  • 网络地址不兼容:模拟器/真机无法通过127.0.0.1访问电脑本地的Flask服务
  • 请求字段不匹配:Flutter上传的文件字段名与Flask接口读取的字段名不一致
  • Flask服务绑定限制:默认仅监听本地回环地址,局域网设备无法访问

分步修复方案

1. 调整Flask服务的监听地址

修改Python代码的启动逻辑,让服务监听所有网卡,确保局域网内设备能访问:

if __name__ == '__main__':
    # host='0.0.0.0' 允许所有网卡访问,port保持5000不变
    app.run(host='0.0.0.0', port=5000, debug=True)

2. 修正Flask接口的字段匹配

Flutter中上传的文件字段为image,但原Python代码错误读取_imagefile,需修正:

@app.route('/extract_text', methods=['POST'])
def extract_text():
    if 'image' not in request.files:
        return jsonify({'error': 'No image file found'})

    # 修正字段名:从_imagefile改为image,与Flutter端保持一致
    image_file = request.files['image']
    image = Image.open(image_file)

    text = pytesseract.image_to_string(image, lang='eng')

    return jsonify({'text': text})

3. 更新Flutter的请求地址

将http://127.0.0.1:5000替换为你的电脑局域网IP地址(Windows用ipconfig、Mac/Linux用ifconfig查看),示例:

var request = http.MultipartRequest(
  'POST',
  // 替换为你的电脑局域网IP,比如192.168.1.100
  Uri.parse('http://192.168.1.100:5000/extract_text'),
);

补充:如果用Android模拟器,也可以用http://10.0.2.2:5000,这个地址是模拟器映射到电脑本地回环的专用地址

4. 检查防火墙配置

确保电脑防火墙允许5000端口的入站连接,避免Flask服务被拦截。


额外优化建议

  • Flutter端的ImagePicker使用了废弃的getImage方法,建议替换为最新API:
    final pickedImage = await picker.pickImage(source: ImageSource.camera);
    
  • 确认Tesseract OCR引擎已正确配置(Windows需将Tesseract路径添加到系统环境变量)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:03:16