添加api服务器

This commit is contained in:
haotian 2025-09-02 17:07:07 +08:00
parent 2412ebec3a
commit befceea2a7

208
005api测试服务.py Normal file
View File

@ -0,0 +1,208 @@
import json
from flask import Flask, request,jsonify
import os
import time
from datetime import datetime
import numpy as np
import base64
import cv2
""" 使用说明
安装
1请首先确保您已经具备Python运行环境
目前支持 Python 3.8 Python 3.12
2安装Python基础依赖库下面依赖库版本是Windows-Python3.10环境下的其他环境需要自行解决可能发生的错误
pip install Flask==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy==1.26.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-python==4.8.1.78 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openai==1.66.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
启动
python api_behaviour.py
"""
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return "This is the api_behaviour.py service"
@app.route('/receiveDetectResults', methods=['POST', 'GET'])
def receiveDetectResults():
print("receiveDetectResults()")
"""
更新时间 2024/12/12
适用于v4.503及其之后的版本
适用于模式一,模式二,模式三,模式四的API行为算法调用示例1
"""
ret = False
msg = "未知错误"
happen = False # True表示发生了报警False表示未发生报警
happenScore = 0.0 # 发生报警的置信度
result_indices = [] # 返回过滤后检测目标的序号数组
try:
print("request_params=", datetime.now())
request_params = request.get_json()
# print(request_params)
detects = request_params.get("detects")
image_base64 = request_params.get("image_base64", None) # 接收base64编码的图片并转换成cv2的图片格式
print("image_base64=", datetime.now(), image_base64)
if detects:
if len(detects) > 0:
# 如果检测目标数大于0只提取第一个目标的序号并返回
result_indices = [0]
ret = True
msg = "success"
except Exception as e:
msg = str(e)
response_data = {
"code": 1000 if ret else 0,
"msg": msg,
"result": {
"happen": happen,
"happenScore": happenScore,
"indices": result_indices,
}
}
return jsonify(response_data)
@app.route('/receiveDetectResults2', methods=['POST', 'GET'])
def receiveDetectResults2():
print("receiveDetectResults2()")
"""
更新时间 2025/01/08
适用于v4.607及其之后的版本
适用于模式一,模式二,模式三,模式四的API行为算法调用示例2
最新一次更新说明新增userdata自定义字段
"""
ret = False
msg = "未知错误"
happen = False # True表示发生了报警False表示未发生报警
happenScore = 0.0 # 发生报警的置信度
result_detects = [] # 返回检测的目标数组
try:
print("request_params=", datetime.now())
request_params = request.get_json()
print(request_params)
detects = request_params.get("detects")
if detects or True:
# 添加一个模拟产生的目标
result_detects.append({
"x1": 100,
"y1": 100,
"x2": 300,
"y2": 300,
"class_score": 0.93456,
"class_id": 0,
"class_name": "test",
"user_data": "hahahah",
})
happen = True
happenScore = 1
ret = True
msg = "success"
except Exception as e:
msg = str(e)
response_data = {
"code": 1000 if ret else 0,
"msg": msg,
"result": {
"happen": happen,
"happenScore": happenScore,
"detects": result_detects
}
}
return jsonify(response_data)
@app.route('/receiveImage', methods=['POST', 'GET'])
def receiveImage():
print("receiveImage()")
"""
更新时间 2024/12/12
适用于v4.503及其之后的版本
适用于模式五的API行为算法调用示例
"""
ret = False
msg = "未知错误"
happen = False # True表示发生了报警False表示未发生报警
happenScore = 0.0 # 发生报警的置信度
happenDesc = "" # 发生报警的描述v4.635支持)
result_detects = []
try:
request_params = request.get_json()
# print("request_params=", datetime.now(), request_params)
image_base64 = request_params.get("image_base64", None) # 接收base64编码的图片并转换成cv2的图片格式
if image_base64:
encoded_image_byte = base64.b64decode(image_base64)
image_array = np.frombuffer(encoded_image_byte, np.uint8)
# image = turboJpeg.decode(image_array) # turbojpeg 解码
image = cv2.imdecode(image_array, cv2.COLOR_RGB2BGR) # opencv 解码
# video_height,video_width,video_channels = image.shape # 输入图像的的高channel
print(image.shape)
result_detects.append({
"x1": 100,
"y1": 100,
"x2": 500,
"y2": 500,
"class_score": 0.93456,
"class_id": 0,
"class_name": "test",
"region_index": 2,
})
happen = True # True 表示发生了报警
happenScore = 1.0 # 发生报警的置信度
ret = True
msg = "success"
except Exception as e:
msg = str(e)
response_data = {
"code": 1000 if ret else 0,
"msg": msg,
"result": {
"happen": happen,
"happenScore": happenScore,
"happenDesc": happenDesc,
"detects": result_detects
}
}
# return json.dumps(response_data)
return jsonify(response_data)
if __name__ == '__main__':
# app.debug = True
# 推荐的json格式化网页工具https://www.sojson.com/
# 接口列表
# http://127.0.0.1:8070/receiveDetectResults
# http://127.0.0.1:8070/receiveDetectResults2
# http://127.0.0.1:8070/receiveImage
app.run(host='0.0.0.0', port=8070, debug=False)