in broadcast-monitoring/src/sports_detect/app/main.py [0:0]
def lambda_handler(event, context):
"""
:param event: e.g.
{
"parsed": {...
},
"config": {
"audio_check_enabled": true,
"station_logo_check_enabled": true,
"language_detect_check_enabled": false,
"team_detect_check_enabled": true,
"sports_detect_check_enabled": true
},
"frame": {
...
"S3_Bucket": "aws-rnd-broadcast-maas-video-processing-dev",
"S3_Key": "frames/test_video_single_pipeline/test_1/original/2020/02/10/23/42:43:646000.jpg",
"Resized_S3_Key": "frames/test_video_single_pipeline/test_1/resized/2020/02/10/23/42:43:646000.jpg"
}
}
:param context:
:return:
"""
frame_info = event['frame']
bucket = frame_info['S3_Bucket']
key = frame_info['S3_Key']
min_confidence = int(os.getenv('SPORTS_MIN_CONFIDENCE', 60))
model_arn = os.getenv('SPORTS_MODEL_ARN')
logger.info('Sports Detection for image: %s', os.path.join(bucket, key))
img_data = {'S3Object': {'Bucket': bucket, 'Name': key}}
with DDBUpdateBuilder(key={'Stream_ID': frame_info['Stream_ID'], 'DateTime': frame_info['DateTime']},
table_name=DDB_FRAME_TABLE) as update_builder:
try:
response = rekognition.detect_custom_labels(
Image=img_data, MinConfidence=min_confidence, ProjectVersionArn=model_arn
)
except ClientError as e:
logger.error('Error calling detect)sports: %s', e)
update_builder.update_attr('Sports_Detect_Error', e.response['Error']['Code'])
raise e
else:
result = response.get('CustomLabels', [])
if not result:
logger.info('No sports detected')
else:
res_out = [f'{r["Name"]}: {r["Confidence"]}' for r in result]
logger.info('Sports detected: %s', json.dumps(res_out, indent=4))
# extract expected program
expected_program = event['parsed']['expectedProgram']
for name, value in SportsCheck().execute(expected_program, result):
logger.info("Writing to %s [%s]: %s", DDB_FRAME_TABLE, name, value)
update_builder.update_attr(name, value, convert_to_ddb)
return result