def camera_handler()

in source/cf/defaults/lambdas/sputnik-gg-ml-inference-squeezenet-demo-python/lambda_function.py [0:0]


def camera_handler():

    global myCamera
    global myModel
    global ggIoT
    global last_update
    global fps
    global nbFramesProcessed

    ret, frame = myCamera.read()
    logging.info("Frame read: {}".format(ret))
    if ret == False:
        logging.error('Something is wrong, cant read frame')
        time.sleep(5)
        return

    logging.info("Frame resize...")
    frame = cv2.resize(frame, parseResolution(RESOLUTION))
    font = cv2.FONT_HERSHEY_SIMPLEX

    logging.info("Frame resized")
    inference_size_x = parseResolution(RESOLUTION)[0] / 2
    inference_size_y = parseResolution(RESOLUTION)[1] / 2

    ggIoT.info('Frame loaded: {}, {}'.format(frame.size, frame.shape))

    if myModel is not None:
        payload = []

        try:
            predictions = myModel.predict_from_image(
                cvimage=frame,
                reshape=(inference_size_x, inference_size_y),
                N=15
            )
            logging.info("Predictions: {}".format(predictions))

            for item in predictions:
                p, n = item
                prediction = {
                    "probability": "{}".format(p),
                    "name": n
                }
                payload.append(prediction)

            nbFramesProcessed += 1

            timeBetweenFrames = timeInMillis() - last_update
            if timeBetweenFrames > 1000:
                fps = math.floor(100 * (fps + (1000 * nbFramesProcessed / timeBetweenFrames)) / 2) / 100
                nbFramesProcessed = 0
                last_update = timeInMillis()

            ggIoT.publish(TOPIC_CAMERA, {
                "fps": str(fps),
                "frame": {
                    "size": frame.size,
                    "shape": frame.shape
                },
                "predictions": payload
            })

        except Exception as err:
            ggIoT.exception(str(err))
            logging.error("Exception: {}".format(str(err)))
            e = sys.exc_info()[0]
            logging.error("Exception occured during prediction: %s" % e)
            logging.error(sys.exc_info())

    cv2.putText(frame, 'FPS: {}'.format(str(fps)), (5, parseResolution(RESOLUTION)[1] - 5), font, 0.4, (0, 0, 255), 1)

    _, jpeg = cv2.imencode('.jpg', frame)
    resultMJPEG.write(jpeg)

    return