第十期 使用 Keras 和 Flask 构建一个在线 API 《显卡就是开发板》

本文介绍如何使用Flask和Keras构建一个简单的图像识别API,客户端可通过curl上传图片,服务器利用VGG16模型进行预测并返回JSON格式的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  用Jupyter notebook 来进行演示在生产环境中并不是很实用,在应用环境中如果想要预测一个场景通常需要返回指定格式的文本形式的信息,我写了一个小例子,使用flask架构创建了一个简陋的API,客户端通过curl工具上传图片,并返回指定格式的json流。
  首先需要安装flask

pip install flask

  将下面的代码保存为 keras_api.py 然后在实验环境下输入 python keras_api.py 就可以运行这个API,默认监听6006端口.
  对应github地址: https://github.com/aggresss/GPUDemo/blob/master/keras_api.py

from flask import Flask,request,redirect,url_for
from werkzeug.utils import secure_filename
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np
import os, json


app = Flask(__name__)
@app.route('/upload', methods=['POST', 'GET'])
def upload():
    if request.method == 'POST':
        f = request.files['file']
        basepath = os.path.dirname(__file__)
        upload_path = os.path.join(basepath, 'demo.jpg')
        f.save(upload_path)

        img = image.load_img(upload_path, target_size=(224, 224))
        x = image.img_to_array(img)
        x = np.expand_dims(x, axis=0)
        x = preprocess_input(x)

        model = VGG16(weights='imagenet')
        features = model.predict(x)
        result_list = list(decode_predictions(features, top=1)[0][0])
        result_trans = [ str(x) for x in result_list ]
        result_json = json.dumps(result_trans)
        return result_json + '\n'
    return 'Error Format'

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=6006)

  当API服务运行后,使用下面的命令可以验证API的输出

curl -m 300 -F "file=@demo.jpg;type=image/jpeg" http://127.0.0.1:6006/upload

其中 -m 300 表示超时时间为300秒,如果运算速度慢可以延长超时时间,demo.jpg 为上传图片的路径和文件名.
  正常情况下可以返回类似 [“n02114367”, “timber_wolf”, “0.737966”] 格式的 json 数据流.

工作流程: - 摄像头捕获视频数据并传输至AI计算盒子。 - AI计算盒子利用内置的算力板深度学习模型对视频数据进行实时处理分析。 - 当识别到特定事件或行为时,系统触发预警判断模块,生成预警信息。 - 预警信息通过通信模块发送至微信小程序,用户接收并查看预警内容,进行相应的操作或处理。 (4)具体实施方式: 1. 设置Jetson开发板: - 确保Jetson开发板已安装JetPack,其中包含CUDA、cuDNN、TensorRT等,以支持深度学习推理。 安装必要的软件库: - 安装Python相关库,如OpenCV用于视频处理,NumPy用于数组操作。 - 如果使用PyTorch或TensorFlow模型,确保安装相应框架。可以使用pip命令在终端中安装,如`pip install opencv-python numpy tensorflow`。 核心程序开发: 1. 读取视频流: ```python import cv2 cap = cv2.VideoCapture(0) # 0表示默认摄像头,可以根据需要调整 while True: ret, frame = cap.read() if not ret: break # 处理帧... cap.release() cv2.destroyAllWindows() ``` 2. 加载推理模型: ```python from tensorflow.keras.models import load_model import numpy as np model = load_model('path_to_your_model.h5') def preprocess_frame(frame): frame_resized = cv2.resize(frame, (224, 224)) frame_array = np.expand_dims(frame_resized / 255.0, axis=0) return frame_array while True: ret, frame = cap.read() if not ret: break frame_array = preprocess_frame(frame) predictions = model.predict(frame_array) # 处理预测结果... ``` 3. 特定场景输出报警信号(预设20个场景): ```python def get_alert_type(predictions): alert_type = np.argmax(predictions) return alert_type alert_types = { 0: "Alert Type 1", 1: "Alert Type 2", # ... 19: "Alert Type 20" } while True: ret, frame = cap.read() if not ret: break frame_array = preprocess_frame(frame) predictions = model.predict(frame_array) alert_type_index = get_alert_type(predictions) alert_message = alert_types.get(alert_type_index, "Unknown Alert") print(f"Alert: {alert_message}") ``` 4. 设置HTTP服务器对微信小程序的发送响应信号: - 安装Flask:`pip install flask` - 创建Flask应用: ```python from flask import Flask, request, jsonify import cv2 审核以上程序,是否有问题
03-29
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值