Jelajahi Sumber

直接返回mp4格式文件路径

xujunwei 5 bulan lalu
induk
melakukan
1cfba533d6
2 mengubah file dengan 64 tambahan dan 5 penghapusan
  1. 51 3
      app.py
  2. 13 2
      ultralytics.egg-info/PKG-INFO

+ 51 - 3
app.py

@@ -354,8 +354,8 @@ def yolov12_predict(params: PredictParams):
                                 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
                                 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
                                 
-                                # 尝试不同的MP4编码器
-                                fourcc_options = ['mp4v', 'avc1', 'H264']
+                                # 尝试不同的MP4编码器(按兼容性排序)
+                                fourcc_options = ['avc1', 'H264', 'mp4v']
                                 out = None
                                 
                                 for fourcc in fourcc_options:
@@ -378,11 +378,59 @@ def yolov12_predict(params: PredictParams):
                                     cap.release()
                                     out.release()
                                     
+                                    # 使用ffmpeg进一步优化MP4文件(如果可用)
+                                    try:
+                                        import subprocess
+                                        temp_mp4 = output_mp4 + '.temp.mp4'
+                                        os.rename(output_mp4, temp_mp4)
+                                        
+                                        # 使用ffmpeg重新编码为H.264格式
+                                        cmd = [
+                                            'ffmpeg', '-i', temp_mp4,
+                                            '-c:v', 'libx264',
+                                            '-preset', 'fast',
+                                            '-crf', '23',
+                                            '-y', output_mp4
+                                        ]
+                                        
+                                        result = subprocess.run(cmd, capture_output=True, text=True)
+                                        if result.returncode == 0:
+                                            os.remove(temp_mp4)
+                                            logging.info(f"使用ffmpeg优化MP4文件: {output_mp4}")
+                                        else:
+                                            # ffmpeg失败,恢复原文件
+                                            os.rename(temp_mp4, output_mp4)
+                                            logging.warning(f"ffmpeg优化失败,使用OpenCV生成的MP4: {output_mp4}")
+                                            
+                                    except (FileNotFoundError, subprocess.SubprocessError) as e:
+                                        # ffmpeg不可用,使用OpenCV生成的MP4
+                                        logging.warning(f"ffmpeg不可用,使用OpenCV生成的MP4: {output_mp4}")
+                                    
                                     # 删除原文件
                                     os.remove(video_file)
                                     logging.info(f"视频已转换为MP4格式: {output_mp4}")
                                 else:
-                                    logging.warning(f"无法创建MP4编码器,保持原格式")
+                                    # OpenCV编码器失败,尝试使用ffmpeg直接转换
+                                    logging.warning(f"OpenCV编码器失败,尝试使用ffmpeg转换")
+                                    try:
+                                        import subprocess
+                                        cmd = [
+                                            'ffmpeg', '-i', video_file,
+                                            '-c:v', 'libx264',
+                                            '-preset', 'fast',
+                                            '-crf', '23',
+                                            '-y', output_mp4
+                                        ]
+                                        
+                                        result = subprocess.run(cmd, capture_output=True, text=True)
+                                        if result.returncode == 0:
+                                            os.remove(video_file)
+                                            logging.info(f"使用ffmpeg直接转换MP4文件: {output_mp4}")
+                                        else:
+                                            logging.error(f"ffmpeg转换失败: {result.stderr}")
+                                            
+                                    except (FileNotFoundError, subprocess.SubprocessError) as e:
+                                        logging.error(f"ffmpeg不可用,保持原格式: {e}")
                                     
                             except Exception as e:
                                 logging.error(f"转换视频格式时出错: {e}")

+ 13 - 2
ultralytics.egg-info/PKG-INFO

@@ -109,7 +109,8 @@ Dynamic: license-file
 ## Updates
 
 - 2025/06/17: **Use this repo for YOLOv12 instead of [ultralytics](https://github.com/ultralytics/ultralytics/tree/main/ultralytics/cfg/models/12). Their implementation is inefficient, requires more memory, and has unstable training, which are fixed here!**
-
+  
+- 2025/07/01: YOLOv12's **classification** models are released, see [code](https://github.com/sunsmarterjie/yolov12/tree/Cls).
 - 2025/06/04: YOLOv12's **instance segmentation** models are released, see [code](https://github.com/sunsmarterjie/yolov12/tree/Seg).
 
 - 2025/04/15: Pretrain a YOLOv12 model with [LightlyTrain](https://docs.lightly.ai/train/stable/index.html), a novel framework that lets you pretrain any computer vision model on your unlabeled data, with [YOLOv12 support](https://docs.lightly.ai/train/stable/models/yolov12.html). Here is also a [Colab tutorial](https://colab.research.google.com/github/lightly-ai/lightly-train/blob/main/examples/notebooks/yolov12.ipynb)!
@@ -164,7 +165,7 @@ YOLOv12 surpasses all popular real-time object detectors in accuracy with compet
 | [YOLO12x](https://github.com/sunsmarterjie/yolov12/releases/download/v1.0/yolov12x.pt) | 640                   | 55.2                 | 11.79                           | 59.1               | 199.0             |
 
 [**Instance segmentation**](https://github.com/sunsmarterjie/yolov12/tree/Seg):
-| Model (seg)                                                                              | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>mask<br>50-95 | Speed  (ms) <br><sup>T4 TensorRT10<br> | params<br><sup>(M) | FLOPs<br><sup>(B) |
+| Model (seg)                                                                              | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>mask<br>50-95 | Speed  (ms) <br><sup>T4 TensorRT10<br> | params<br><sup>(M) | FLOPs<br><sup>(G) |
 | :------------------------------------------------------------------------------------| :--------------------: | :-------------------: | :---------------------: | :--------------------------------:| :------------------: | :-----------------: |
 | [YOLOv12n-seg](https://github.com/sunsmarterjie/yolov12/releases/download/seg/yolov12n-seg.pt) | 640                   | 39.9                 | 32.8                  | 1.84                           | 2.8                | 9.9              |
 | [YOLOv12s-seg](https://github.com/sunsmarterjie/yolov12/releases/download/seg/yolov12s-seg.pt) | 640                   | 47.5                 | 38.6                  | 2.84                           | 9.8                | 33.4              |
@@ -172,6 +173,16 @@ YOLOv12 surpasses all popular real-time object detectors in accuracy with compet
 | [YOLOv12l-seg](https://github.com/sunsmarterjie/yolov12/releases/download/seg/yolov12l-seg.pt) | 640                   | 54.0                 | 43.2                  | 7.61                          | 28.8               | 137.7             |
 | [YOLOv12x-seg](https://github.com/sunsmarterjie/yolov12/releases/download/seg/yolov12x-seg.pt) | 640                   | 55.2                 | 44.2                  | 15.43                          | 64.5               | 308.7             |
 
+
+[**Classification**](https://github.com/sunsmarterjie/yolov12/tree/Cls):
+| Model (cls)                                                                              | size<br><sup>(pixels) | Acc.<br><sup>top-1<br> | Acc.<br><sup>top-5<br> | Speed  (ms) <br><sup>T4 TensorRT10<br> | params<br><sup>(M) | FLOPs<br><sup>(G) |
+| :----------------------------------------------------------------------------------------| :-------------------: | :------------: | :------------: | :-------------------------------------:| :----------------: | :---------------: |
+| [YOLOv12n-cls](https://github.com/sunsmarterjie/yolov12/releases/download/cls/yolov12n-cls.pt) | 224             | 71.7           | 90.5           | 1.27                                   | 2.9                | 0.5               |
+| [YOLOv12s-cls](https://github.com/sunsmarterjie/yolov12/releases/download/cls/yolov12s-cls.pt) | 224             | 76.4           | 93.3           | 1.52                                   | 7.2                | 1.5               |
+| [YOLOv12m-cls](https://github.com/sunsmarterjie/yolov12/releases/download/cls/yolov12m-cls.pt) | 224             | 78.8           | 94.4           | 2.03                                   | 12.7               | 4.5               |
+| [YOLOv12l-cls](https://github.com/sunsmarterjie/yolov12/releases/download/cls/yolov12l-cls.pt) | 224             | 79.5           | 94.5           | 2.73                                   | 16.8               | 6.2               |
+| [YOLOv12x-cls](https://github.com/sunsmarterjie/yolov12/releases/download/cls/yolov12x-cls.pt) | 224             | 80.1           | 95.3           | 3.64                                   | 35.5               | 13.7              |
+
 </details>