From d3f2c5e170c245aa7c52724b524002d7fa44dce3 Mon Sep 17 00:00:00 2001 From: The Bears Date: Fri, 31 Oct 2025 21:15:14 -0400 Subject: [PATCH] bump --- __pycache__/utils.cpython-311.pyc | Bin 13790 -> 15066 bytes hailort.log | 23 +++- snap_version.py | 112 +++++++++++++++++ species_list | 198 ++++++++++++++++++++++++++++++ test.py | 11 ++ utils.py | 42 +++++-- 6 files changed, 378 insertions(+), 8 deletions(-) create mode 100644 snap_version.py create mode 100644 species_list create mode 100644 test.py diff --git a/__pycache__/utils.cpython-311.pyc b/__pycache__/utils.cpython-311.pyc index 15624c73d1529d090d7af58c0c0f01bf8827d4d2..2e266ffdde09c977556f13daaf3233f27ed4ea58 100644 GIT binary patch delta 2467 zcmcbYeXEpjIWI340|NuYmKfH|35pZ>Bp72hs`D^~GNuTo8m2L)2(>Uq8Kuakh_o<9 z8K;Q0FhrT8$fbz4Fh-fCNVG6SnWad!FhrR%F}O3NNVPDeNH1ezU|7urG7^NNEK+1z z7@{mw7=sx!hGGr|1_ovZ28Peq7#SF*Go&!4Fr_drn0!%8 z#GRo8Bmq@d!UAP5Ffe4n#Zg4zDykS57*bf)utMB3*-%x?B89Dnv4$yyeGXeKTM0Lk zQE<1^u%&RU;e=>`$uD4^d{Inv@_Ir3v|4sfh7v)T1Or1BCyZUgP{UlqUc<76dl?G@ z!)mxIYB_2+vcLfhQklY&4Gx(i#S(E4AA(CHAvB1r;mG0zxplI(G+%u%Ly0U%5Q0;9 zk&QxiBO^l!LokCfLx~(jEr?WMC=#pXL@|M{2F-7b3{4Cv47HqfoaKz=3>D0g4CRcP z{C>Asg7Xp!>We^*y~Xent`vLN*qOKEXx(JhXG#Ny)e{Gya!jEb6!w^)i3(^9KgOH0ypEi{>Lu@@BOS7fFZ z-(o9BEK1BRzQtaWnVXtlTJrJ)0|P^qrE`91PKrW(UVe!}QEEw1W@=fgLP}yuqC#3x zey&1tVs2_tqC#rEe1u70vr?xfwXd@r#o+U$~>>$5U>R4-8DKd z28Ni$LEKENMG7Fjp}d}qnUm-9HcFI$qPP?kG0a5*py*=BEJ@8Rs+erSXU>>Cxq#1@ z(QEP&J{{=_P{e`Uq>uoP*P=3zP7sm0`88iZGh^lCY9V9B!pZA}%;obyCb1PK=NF|G z7o~v|f^-%Yg6v@_YMIO`9Lm-J60V<|Agr$oGUXNvD7oHZEicL}N!8>oN&!iO&Ed%} zEh#81iBBvlN~|o(pS(v{MzRHD0aI~u5vb(6#gSEX`J=ETR~ASwh$z@B zBJzWswFs1kCyUA`%YaQy1xbTkrO6Dj1|l#yM8<|K2P9`Vd78{j)*@3-P?^YTih6?t zgF!?Fi0}Xrfs>15mH0scdyAz!F|(w|3Z#0atOje5Hi&goR$m=t*e&Lw)Z$yrnRx}^ ztP)?GnwL^E3FLg{to)=RN03@wIc3%z3=9mdn?vR9u<#VwfGhy#z?8}E%JSChLHxNO zVjd_2xo)u(r{<&;?E#7G1rbOZK-~Qx0<3A@3=9k(CciSUV*@8^tI2wXF04iRp!lpZROTr%0V(wd5!WZLGqh)1 zHu;^Qx)>-a-C|2FsVo51IK>&IC7C%z$0lnVDKqv>_BYZLp8)bRQ*q8MmZH?elv}LD z1v!}|MLm=Ijikdtp1#HEm!FrK2MJejWPs8jBsYSRd=V%iLEH>-VG+m^MR1S);;_lh tPbtkwwJZA1z`(!=%G9qme>Ku)l6_!kx})$!=?4Z;Mm}`HXtJ8=4gmNZiE01< delta 1323 zcmcardM}%AIWI340|Ntth$w63EV+q%5{!Nu)p?lQrBj4j7^4hRgj*P*j8bG$L|Yi6 zj8nu~7@|y4#9J7mOqm$m8B!!#7*ZscF)=W#W&#-k!ck@^QY{Qo<|&N944Sf=JD657 zZkFT}WM)*Dtj%+f?G{T)VoBoUk34Fu)(i{`nww>KZ!mFLF)%RPVoFOZvYq^o--Xqa zfq}t!vAX~h^DV~g$v#4!i~*CU2{lUiGB7X{`GK@C7YTs0uw<5`<`xA_))zKs44RxS zY|N-MdA6{QbPxjrLovun3JFC*AWi--!e{d%;eKYeUH)xXFLSL)oH0!jY51CG@>OX5M1SFG$V1#adpJ zS(2*BU1STA2Aji^Us_U7S`wdFRFqg*n-N=)RM{SN}8g|AVF;q;RqrWK!oPxR3#-*P~hKUDNoESxy9*P zk(^pkl9``3d76?2$1S#k#G=I9;>m}V^i@Ho-eN9FExyH^nOAU&qbRjFzBn~6r6>pF zRpzYxq+5)slRxrE2yhma=Edjcr=;c-O=nvh=5B*_+El$oAU zqRCwZj%tvJMQR`=;2;8}*`ibs*LLz+9ZlYaAT6w!xryniMedUy>*zC=s9QYDs)?USdHJ!p&eWfF0fhGH3(HkIY42lbADe(~I0E|Il}1+`HM{fQgBx z2xI|EYDH#AQNv_kBTsp-XB$8o;UNU^#}<%S&*ZH}nrtAmiq=eiV&unoWV5kx6r=89 zkR-^aBCxW(ATBsJiGWz(EHV?s0ufUt?=nedoH<#}G+h#;Mw6)sBwPg2q{&pY2&680 z@;p-&) max_fail_age for x in r.lrange(redis_topic_ffmpeg_fail, 0, -1) if float(x) > proc_start_time] + diff --git a/utils.py b/utils.py index b1362ae..4eba147 100644 --- a/utils.py +++ b/utils.py @@ -30,14 +30,45 @@ import json import redis import os pfm = LogColorize.score_obj_det_embed - +# %% with open('/home/thebears/source/infer/species_list','r') as sl: species_list = [x for x in sl.read().split('\n') if len(x) > 0] r = redis.Redis('localhost',port=6379, db=14) logger = logging.getLogger('live_inference') - + +def get_snap( url, username, password, proxies = None, timeout=5, save_image = None, camera_name = 'N/A'): + data = { + 'cmd': 'Snap', + 'channel': 0, + 'rs': ''.join(choices(string.ascii_uppercase + string.digits, k=10)), + 'snapType':'sub', + 'user': username, + 'password': password, + } + parms = parse.urlencode(data, safe="!").encode("utf-8") + + try: + response = requests.get(url, proxies=proxies, params=parms, timeout=timeout) + if response.status_code == 200: + rearr = np.frombuffer(bytearray(response.content), dtype=np.uint8) + img_bgr = cv2.imdecode(rearr,cv2.IMREAD_COLOR) + img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) + if save_image is not None: + os.makedirs(os.path.dirname(save_image), exist_ok=True) + cv2.imwrite( save_image, img_bgr) + logging.info(f'{camera_name}: Wrote image to {save_image}') + + logging.info(f'{camera_name}: Got image of {img_rgb.shape}') + return img_rgb + + except Exception as e: + logging.error(f'{camera_name} failure: {str(e)}') + raise + + +# %% def resize_image(img_in, reshape_to_final=False): if not isinstance(img_in, np.ndarray): img_in = np.asarray(img_in) @@ -153,7 +184,7 @@ class SnapManager(): self.password = password self.camera_name = camera_name self.split_into_two = split_into_two -n self.msg_queue = msg_queue + self.msg_queue = msg_queue self.img_scoring_queue = img_scoring_queue logger.info(f"{self.camera_name}: initialized") @@ -187,21 +218,18 @@ n self.msg_queue = msg_queue return msg def capture_and_prepare(self): - img = get_snap(self.username, self.password, self.url_api, self.camera_name) + img = get_snap(self.url_api,self.username, self.password, camera_name = self.camera_name) if img is not None: timestamp = time.time() return self.format_image_for_model(img, timestamp) return [] - def run_forever(self): while True: try: msg = self.msg_queue.get(timeout=0.1) if msg == 'exit': break - if msg == 'save_image': - if msg == 'get': logger.info(f'Processing capture for {self.camera_name}') model_msgs = self.capture_and_prepare()