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