部署到服务端的摄像头实时口罩预测报错
Created by: 13433583369
欢迎您反馈PaddleHub使用问题,非常感谢您对PaddleHub的贡献! 在留下您的问题时,辛苦您同步提供如下信息:
- 版本、环境信息 1)PaddleHub和PaddlePaddle版本:请提供您的PaddleHub和PaddlePaddle版本号, PaddleHub1.7.1,PaddlePaddle1.8.3 2)系统环境:请您描述系统类型, Windows,python版本
- 复现信息:如为报错,请给出复现环境、复现步骤
目的:利用一键部署的功能,对摄像头截取的帧直接用post请求r = requests.post(url=url, headers=headers,data=json.dumps(datas))进行预测返回预测结果 具体代码如下(接下来的代码只是对关闭摄像头窗口时候的最后一帧进行预测,不是实时的,只是为了测试能不能对帧预测) capture = cv2.VideoCapture(1,cv2.CAP_DSHOW) # 打开摄像头对帧进行读取 #cv2.CAP_DSHOW参数防止关闭摄像头窗口时出现warning。只不过1才是是默认摄像头 while(1): ret, frame = capture.read() # frame即视频的一帧数据 if ret == False: break cv2.imshow('Mask Detection', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break capture.release() cv2.destroyAllWindows() #接下来对帧进行预测 headers = {"Content-type": "applicaion/json"} datas={'images':[cv2_to_base64(frame)]} url = "http://127.0.0.1:8866/predict/pyramidbox_lite_server_mask" r = requests.post(url=url, headers=headers,data=json.dumps(datas)) results=r.json()["results"] #["results"]只是对字典的索引,把检测结果索引出来!!! print(results) print(json.dumps(r.json(),indent=4,ensure_ascii=False))
报错
打印出的results为空
print(json.dumps(r.json(),indent=4,ensure_ascii=False))打印结果如下
{
"msg": "This usage is out of date, please use 'application/json' as content-type to post to /predict/pyramidbox_lite_server_mask. See 'https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.6/docs/tutorial/serving.md' for more details.",
"results": "",
"status": "-1"
}
而当我把视频帧保存为jpg图片,在对这个图片用和上面同样的方法预测时候一切都是正常的,代码基本不变,下面贴上代码) capture = cv2.VideoCapture(1,cv2.CAP_DSHOW) # 打开摄像头对帧进行读取 #cv2.CAP_DSHOW参数防止关闭摄像头窗口时出现warning。只不过1才是是默认摄像头 while(1): ret, frame = capture.read() # frame即视频的一帧数据 if ret == False: break cv2.imshow('Mask Detection', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break capture.release() cv2.destroyAllWindows() cv2.imwrite("people.png",frame) #保存帧图片 imgs = cv2.imread(test_img_path[1]) datas = {'images':[cv2_to_base64(imgs)]} headers = {"Content-type": "application/json"} url = "http://127.0.0.1:8866/predict/pyramidbox_lite_server_mask" r = requests.post(url=url, headers=headers, data=json.dumps(datas)) results=r.json()["results"] #["results"]只是对字典的索引,把检测结果索引出来!!! print(results) print(json.dumps(r.json(),indent=4,ensure_ascii=False))
打印结果(正常的结果) [{'data': [{'bottom': 450, 'confidence': 0.9915214776992798, 'label': 'NO MASK', 'left': 264, 'right': 424, 'top': 244}], 'path': 'ndarray_time=1596258579876741.0'}]
{ "msg": "", "results": [ { "data": [ { "bottom": 438, "confidence": 0.9628458023071289, "label": "NO MASK", "left": 255, "right": 418, "top": 240 } ], "path": "ndarray_time=1596258558673255.0" } ], "status": "0" }
为何同样是视频帧,为何对帧直接进行预测就会出错,而保存帧为图片时再预测就不会出错。那我如果需要利用部署服务器实时口罩检测的话,我还需要把每一帧都保存下来么。求大佬指点一下谢啦!
好像解答区也有实时监测的demo,可是那个是本地预测的,不是利用部署到服务器端进行预测的。 我是想最后放到树莓派来进行口罩预测(上述还是在windows下运行的),或许大佬还有其他方法吗,不用部署服务器的方式也能在树莓派上预测~ 麻烦提供下思路谢谢~