From d3aacbbba47c393ef3645afdb8b3d940663328da Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 09 四月 2025 11:09:57 +0800 Subject: [PATCH] 优化 --- herb_ai.py | 75 ++++++++++++++++++++++++++----------- 1 files changed, 52 insertions(+), 23 deletions(-) diff --git a/herb_ai.py b/herb_ai.py index 5721084..c74491e 100644 --- a/herb_ai.py +++ b/herb_ai.py @@ -23,11 +23,33 @@ def variance_of_laplacian(image): # 璁$畻杈撳叆鍥惧儚鐨勬媺鏅媺鏂搷搴旂殑鏂瑰樊 return cv2.Laplacian(image, cv2.CV_64F).var() + + +def clean_directory(path, days_threshold, max_files): + """娓呯悊瓒呰繃鏃堕棿鎴栨暟閲忕殑鏂囦欢""" + now = time.time() + threshold = now - days_threshold * 24 * 3600 + files = [] + for f in os.listdir(path): + file_path = os.path.join(path, f) + if os.path.isfile(file_path): + files.append((file_path, os.path.getmtime(file_path))) + # 鎸変慨鏀规椂闂撮檷搴忔帓搴忥紝淇濈暀鏈�鏂版枃浠� + files.sort(key=lambda x: x[1], reverse=True) + # 鍒犻櫎杩囨湡鏂囦欢 + for file_info in files: + if file_info[1] < threshold: + os.remove(file_info[0]) + # 淇濈暀鏈�鏂版枃浠讹紝鍒犻櫎澶氫綑鏂囦欢 + for file_info in files[max_files:]: + os.remove(file_info[0]) + + # 璋冪敤鍙︿竴涓暱鐒﹂暅澶达紝鎷嶆憚娓呮櫚鐨勫眬閮ㄨ嵂鏉愬浘鐗� def get_image(): logger.info("璇嗗埆绾跨▼鍚姩") global is_loaded, class_count, class_count_max, class_sum - camera2_index = webcams.get(cam2) + camera2_index = config['cam']['cam2'] print("绗簩涓憚鍍忓ご绱㈠紩锛�" + str(camera2_index)) # 鎵撳紑鎽勫儚澶� capture = cv2.VideoCapture(camera2_index, cv2.CAP_DSHOW) @@ -54,7 +76,7 @@ break count += 1 - if count == 2: + if count == config['cam']['frames']: herb_probabilities = herb_identifier(frame2) top_five_classes = np.argsort(herb_probabilities, axis=1)[0][-5:][::-1] name = "" @@ -68,16 +90,17 @@ # 璁$畻鎷夋櫘鎷夋柉鍝嶅簲鐨勬柟宸� laplacian = variance_of_laplacian(frame2) # 鐢熸垚淇濆瓨鏂囦欢鍚嶏紝浠ュ綋鍓嶆椂闂村懡鍚� - save_name2 = name +"_["+ str(round(laplacian, 2)) +"]_"+ time.strftime("%Y%m%d%H%M%S", time.localtime()) + ".jpg" + save_name2 = time.strftime("%Y%m%d%H%M%S", time.localtime()) + "_" +name +"_["+ str(round(laplacian, 2)) +"]"+ ".jpg" logger.info(f"璇嗗埆缁撴灉杞崲涓轰繚瀛樺浘鐗囧悕绉�:, {save_name2}") # 鍒ゆ柇鍥惧儚鐨勬竻鏅板害 # 淇濆瓨璋冩暣灏哄鍚庣殑鍥剧墖 if laplacian > 200: c_ = save_path + "2/c/" - # 鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤� if not os.path.exists(c_): os.makedirs(c_) cv2.imwrite(c_ + save_name2, frame2) + # 鏂板娓呯悊璋冪敤 + clean_directory(c_, config['cam']['days_threshold'], config['cam']['max_files']) # 娓呮櫚鏉′欢涓嬬疮璁¤瘑鍒粨鏋滀腑鑽潗鍚嶇О鍑虹幇鐨勬鏁� # 绱姣忕鑽潗涓嶈鍚嶆鍑虹幇鐨勬鏁�,绱姣忕鑽潗缃俊搴︽渶楂樼殑娆℃暟,绱姣忕鑽潗鐨勭疆淇″害鎬诲拰 # class_count = {} @@ -104,17 +127,18 @@ is_loaded = True else: n_ = save_path + "2/n/" - # 鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤� if not os.path.exists(n_): os.makedirs(n_) cv2.imwrite(n_ + save_name2, frame2) + # 鏂板娓呯悊璋冪敤 + clean_directory(n_, config['cam']['days_threshold'], config['cam']['max_files']) # cv2.imshow("Camera", resized_frame2) print("淇濆瓨鍥剧墖:", save_name2) break # 缁撴潫绾跨▼ capture.release() -def send_result(class_count, class_count_max, class_sum): - global is_loaded +def send_result(): + global is_loaded,class_count, class_count_max, class_sum # 灏嗕笁绉嶇粺璁$粨鏋滆緭鍑哄埌鏃ュ織涓� logger.info("class_count:"+str(class_count)) logger.info("class_count_max:"+str(class_count_max)) @@ -127,7 +151,7 @@ def load_identify(): global is_loaded # 鎽勫儚澶寸储寮曞彿锛岄�氬父涓�0琛ㄧず绗竴涓憚鍍忓ご - camera_index = webcams.get(cam1) + camera_index = config['cam']['cam1'] print("绗竴涓憚鍍忓ご绱㈠紩锛�" + str(camera_index)) # 鎵撳紑鎽勫儚澶� cap = cv2.VideoCapture(camera_index, cv2.CAP_DSHOW) @@ -157,17 +181,12 @@ # 涓婃枡鐘舵�� status = "娌℃湁涓婃枡" - # 绱姣忕鑽潗涓嶈鍚嶆鍑虹幇鐨勬鏁� - class_count = {} - # 绱姣忕鑽潗缃俊搴︽渶楂樼殑娆℃暟 - class_count_max = {} - # 绱姣忕鑽潗鐨勭疆淇″害鎬诲拰 - class_sum = {} + # 寰幆璇诲彇鎽勫儚澶寸敾闈� while True: logger.info("寰幆璇诲彇鎽勫儚澶寸敾闈�") # 鐫$湢100姣 - time.sleep(0.1) + time.sleep(config['cam']['sleep']) ret, frame = cap.read() if not ret: print("鏃犳硶璇诲彇鎽勫儚澶寸敾闈�") @@ -175,6 +194,8 @@ break # 鑾峰彇褰撳墠鏃堕棿 current_time = time.time() + # 姣忛殧3绉掑彇涓�甯у浘鍍� + # 瀹夊叏妫�娴� boxes, scores, class_ids = safety_detect(frame) draw_img = safety_detect.draw_detections(frame, boxes, scores, class_ids) @@ -221,6 +242,8 @@ if not os.path.exists(path_): os.makedirs(path_) cv2.imwrite(path_ + save_name, frame) + # 鏂板娓呯悊璋冪敤 + clean_directory(path_, config['cam']['days_threshold'], config['cam']['max_files']) # 閲嶇疆璁℃椂鍣� stime = time.time() @@ -231,7 +254,7 @@ status = "娌℃湁涓婃枡" if class_ == "meishangliao" and count == 3 and is_loaded: logger.info("鍋滄涓婃枡鍚庡彂閫佽瘑鍒粨鏋�") - send_result(class_count, class_count_max, class_sum) + send_result() if class_ == "meishangliao" and count == 1000: is_loaded = False logger.info("闀挎椂闂存湭涓婃枡锛岄噸缃鍦ㄤ笂鏂欑姸鎬�") @@ -244,10 +267,10 @@ fps = frame_count / elapsed_time # print(f"FPS: {fps:.2f}") # 灏咶PS缁樺埗鍦ㄥ浘鍍忎笂 - cv2.putText(frame, f"FPS: {fps:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, + cv2.putText(draw_img, f"FPS: {fps:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA) # 鏄剧ず鐢婚潰 - cv2.imshow("Camera", draw_img) + cv2.imshow("AICamera", draw_img) # 妫�娴嬫寜閿紝濡傛灉鎸変笅q閿垯閫�鍑哄惊鐜� if cv2.waitKey(1) & 0xFF == ord('q'): break @@ -402,11 +425,17 @@ return 0 if __name__ == '__main__': - cam1 = "USB Camera" - cam2 = "PC Camera" - camUtil = CAM_UTIL(cam1, cam2) - webcams = camUtil.list_webcams() - print("鎽勫儚澶�", webcams) + # 绱姣忕鑽潗涓嶈鍚嶆鍑虹幇鐨勬鏁� + class_count = {} + # 绱姣忕鑽潗缃俊搴︽渶楂樼殑娆℃暟 + class_count_max = {} + # 绱姣忕鑽潗鐨勭疆淇″害鎬诲拰 + class_sum = {} + # cam1 = "USB Camera" + # cam2 = "USB ZOOM Camera" + # camUtil = CAM_UTIL(cam1, cam2) + # webcams = camUtil.webcam_list + # print("鎽勫儚澶�", webcams) save_path = "data/images/" # 鏄惁涓婅繃鏂� is_loaded = False -- Gitblit v1.9.3