当我激活树莓派gpio时向客户端发送json响应

时间:2018-12-17 06:18:45

标签: python tornado

我有一个人脸检测项目,我想在检测到人脸时激活树莓派pi gpio端口之一,我可以这样做没有任何问题。 现在,我想要一个API,当激活端口时,将json的真实响应发送到客户端。我使用龙卷风Web服务器。

import cv2
import sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18,GPIO.HIGH)    



cascPath = sys.argv[1]
faceCascade = cv2.CascadeClassifier(cascPath)

video_capture = cv2.VideoCapture(0)

while True:
    # Capture frame-by-frame
    ret, frame = video_capture.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )

    if  len(faces)>0:
        GPIO.output(18,GPIO.LOW)
        sleep(1)
        GPIO.output(18 ,GPIO.HIGH)
    else:    
        GPIO.output(18,GPIO.HIGH)



    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # Display the resulting frame
    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows(

这是我的龙卷风代码:

import face_detection
import tornado.ioloop
import tornado.web
import json
class MainHandler(tornado.web.RequestHandler):
    def get(self):

        '''face detection code'''

        self.write(json.dumps({'response':True}))

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

但是我无法将json响应发送到client.wahts我的代码错误吗?

1 个答案:

答案 0 :(得分:0)

您没有发送正确的标题。对于JSON响应,您需要发送Content-Type标头以告知客户端这是JSON响应,例如:Content-Type: application/json

您现在有两个选择:

1。提供self.write的原始字典而不是json数据

如果给self.write一个字典,它将自动将其转换为JSON并设置适当的Content-Type标头。您不必为此担心。

self.write({'reponse': True}) # pass the dict, not JSON

2。或自行设置标题

如果要手动发送json,则可以自己设置标头,如下所示:

self.set_header('Content-Type', 'application/json')
self.write(json.dumps({'response': True}))