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