Files
inference_rpi_hailo/run_me.py
The Bears 09ed1b8c97 stuff
2025-10-31 20:57:56 -04:00

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'])