138 lines
3.8 KiB
Python
138 lines
3.8 KiB
Python
from common_code.settings import get_logger
|
|
|
|
from utils import StreamManager, run_model
|
|
import multiprocessing as mp
|
|
import cv2
|
|
|
|
logger = get_logger('live_inference',file_path = '/var/log/live_inference.log', stdout=True)
|
|
|
|
all_cameras_config = {
|
|
"camera_sidefeeder": {
|
|
'url': "rtsp://admin:marybear@192.168.1.157:554/h264Preview_01_sub",
|
|
'resolution': (360, 640, 3)
|
|
},
|
|
"camera_driveway": {
|
|
'url': "rtsp://admin:marybear@192.168.1.152:554/h264Preview_01_sub",
|
|
'resolution': (480, 640, 3)
|
|
},
|
|
"camera_railing": {
|
|
'url': "rtsp://admin:marybear@192.168.1.153:554/h264Preview_01_sub",
|
|
'resolution': (512, 896, 3)
|
|
},
|
|
"camera_ptz": {
|
|
'url': "rtsp://admin:marybear@192.168.1.155:554/h264Preview_01_sub",
|
|
'resolution': (360, 640, 3)
|
|
},
|
|
"camera_wrenwatch": {
|
|
'url': "rtsp://admin:marybear@192.168.1.158:554/h264Preview_01_sub",
|
|
'resolution': (360, 640, 3)
|
|
},
|
|
"camera_backyard": {
|
|
'url': "rtsp://admin:marybear@192.168.1.162:554/h264Preview_01_sub",
|
|
'resolution': (432, 1536, 3),
|
|
'split_into_two': True
|
|
},
|
|
}
|
|
|
|
cameras_config = dict()
|
|
k_c = 'camera_railing'
|
|
#cameras_config[k_c] = all_cameras_config[k_c]
|
|
cameras_config = all_cameras_config
|
|
|
|
|
|
cameras = dict()
|
|
from random import random
|
|
img_scoring_queue = mp.Queue(maxsize = len(cameras_config)*2)
|
|
for cam_name, details in cameras_config.items():
|
|
rtsp_url = details['url']
|
|
if random() < -1:
|
|
rtsp_url = 'rtsp://admin:marybear@192.168.1.124'
|
|
print(f"Switching RTSP stream for {cam_name}")
|
|
resolution = details['resolution']
|
|
cameras[cam_name] = StreamManager(rtsp_url=rtsp_url,
|
|
resolution=resolution,
|
|
img_scoring_queue=img_scoring_queue,
|
|
camera_name=cam_name,
|
|
split_into_two=details.get(
|
|
|
|
'split_into_two', False))
|
|
cameras[cam_name].start_process()
|
|
logger.info(f'Started StreamManager for {cam_name}')
|
|
|
|
pp = mp.Process(target=run_model, args=(img_scoring_queue, ))
|
|
pp.start()
|
|
logger.info(f'Started model scoring process')
|
|
|
|
|
|
|
|
|
|
# %%
|
|
|
|
|
|
|
|
|
|
|
|
iters = 0
|
|
while True:
|
|
for cam_name, obj in cameras.items():
|
|
logger.info(f'Asking {cam_name} process to score')
|
|
obj.score_frame_in_queue( save_to_disk = True)
|
|
# obj.score_frame_in_queue( save_to_disk = iters % 10 == 0)
|
|
obj.health_check()
|
|
|
|
iters+=1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# # %%
|
|
# from utils import species_list
|
|
# import pickle
|
|
# import json
|
|
# with open('crap.p','rb') as fw:
|
|
# dump = pickle.load(fw)
|
|
|
|
|
|
# camera_name = dump[1]['camera_name']
|
|
# timestamp = dump[1]['image_timestamp']
|
|
# ff = dump[0]
|
|
|
|
# has_scores = {idx:x for idx,x in enumerate(dump[0]) if len(x) > 0}
|
|
|
|
# score_dict = {}
|
|
|
|
# score_dict['timestamp'] = timestamp.timestamp()
|
|
# score_dict['scores'] = list()
|
|
|
|
# for idx, sc in has_scores.items():
|
|
# for r in sc:
|
|
# score_dict['scores'].append({'idx': idx, 'species': species_list[idx], 'boxes':r[0:4].tolist(), 'score': r[4].tolist()})
|
|
|
|
|
|
# def round_floats(obj, decimals=4):
|
|
# if isinstance(obj, float):
|
|
# return round(obj, decimals)
|
|
# elif isinstance(obj, dict):
|
|
# return {k: round_floats(v, decimals) for k, v in obj.items()}
|
|
# elif isinstance(obj, list):
|
|
# return [round_floats(item, decimals) for item in obj]
|
|
# return obj
|
|
# json_str = json.dumps(round_floats(score_dict))
|
|
|
|
|
|
# with open('/home/thebears/source/infer/scores/' + camera_name,'a') as ff:
|
|
# ff.write(json_str)
|
|
# ff.write('\n')
|
|
|
|
# import matplotlib.pyplot as plt
|
|
# plt.imshow(dump[1]['frame'])
|
|
# plt.show()
|
|
|
|
# # %%
|
|
# for cam_name, cls in cameras.items():
|
|
# ret = cls.capture_image()
|
|
# cv2.imwrite('images/' + cam_name + '.jpg', ret['image'])
|
|
|