filter-tiny-segments
              
                 
                
            
          copied
				 4 changed files with 121 additions and 1 deletions
			
			
		| @ -1,2 +1,71 @@ | |||
| # filter-tiny-segments | |||
| # Filter Tiny Segments | |||
| 
 | |||
| *author: Chen Zhang* | |||
| 
 | |||
| 
 | |||
| <br /> | |||
| 
 | |||
| 
 | |||
| 
 | |||
| ## Description | |||
| 
 | |||
| This operator can filter tiny detected segments with format of list of `[start_second_1, start_second_2, end_second_1, end_second_2]` | |||
| <br /> | |||
| 
 | |||
| 
 | |||
| ## Code Example | |||
| 
 | |||
| 
 | |||
| ```python | |||
| import towhee | |||
| towhee.dc['pred']([[[0, 0, 100, 100], [0, 0, 10, 10], [0, 0, 60, 10]]]) \ | |||
|       .video_copy_detection.filter_tiny_segments['pred', 'filtered_pred'](filter_s_thresh=20) \ | |||
|       .show() | |||
| ``` | |||
| 
 | |||
|  | |||
| 
 | |||
| 
 | |||
| 
 | |||
| ## Factory Constructor | |||
| 
 | |||
| Create the operator via the following factory method | |||
| 
 | |||
| ***filter_tiny_segments(filter_s_thresh, segment_len_rate)*** | |||
| 
 | |||
| 
 | |||
| **Parameters:** | |||
| 
 | |||
|    ***filter_s_thresh:*** *float* | |||
| 
 | |||
|    Use a thresh to filter detected box which is smaller than it. | |||
| 
 | |||
|    ***segment_len_rate:*** *float* | |||
| 
 | |||
|    Filter expect longer then segment_len_rate * video length. Only useful for filter expect near video length segments. | |||
| 
 | |||
| <br /> | |||
| 
 | |||
| 
 | |||
| 
 | |||
| ## Interface | |||
| 
 | |||
| A Temporal Network operator takes two numpy.ndarray(shape(N,D) N: number of features. D: dimension of features) and get the duplicated ranges and scores. | |||
| 
 | |||
| 
 | |||
| **Parameters:** | |||
| 
 | |||
| 	***pred_value:*** *List* | |||
| 
 | |||
|   List of predicted segment second infos of a video pair | |||
| 
 | |||
|   ***sim_hw:*** *Tuple* | |||
| 
 | |||
|   Similarity matrix height and weight of a video pair. If sample rate is 1s, sim_hw is also the lengths of these videos. | |||
| 
 | |||
| 
 | |||
| **Returns:** | |||
| 
 | |||
| 	***res_pred_list:*** *List* | |||
| 
 | |||
|    List of filtered predicted segment second infos | |||
|  | |||
| @ -0,0 +1,19 @@ | |||
| # Copyright 2022 Zilliz. All rights reserved. | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| #     http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| 
 | |||
| from .filter_tiny_segments import FilterTinySegments | |||
| 
 | |||
| 
 | |||
| def filter_tiny_segments(filter_s_thresh: float, segment_len_rate: float): | |||
|     return FilterTinySegments(filter_s_thresh, segment_len_rate) | |||
| @ -0,0 +1,32 @@ | |||
| from typing import List, Tuple, Optional | |||
| from towhee.operator.base import Operator | |||
| from towhee import register | |||
| 
 | |||
| 
 | |||
| @register(output_schema=['vec']) | |||
| class FilterTinySegments(Operator): | |||
|     """ | |||
|     FilterTinySegments | |||
|     """ | |||
| 
 | |||
|     def __init__(self, filter_s_thresh: float, segment_len_rate: float = 0.8): | |||
|         super().__init__() | |||
|         self.filter_s_thresh = filter_s_thresh | |||
|         self.segment_len_rate = segment_len_rate | |||
| 
 | |||
|     def __call__(self, pred_value: List[Optional[List]], sim_hw: Tuple = None) -> List: | |||
|         res_pred_list = [] | |||
|         for time_info in pred_value: | |||
|             filterable = True | |||
|             if ((time_info[2] - time_info[0]) + (time_info[3] - time_info[1])) / 2.0 > self.filter_s_thresh: | |||
|                 filterable = False | |||
|             if sim_hw is not None: | |||
|                 sim_h, sim_w = sim_hw | |||
|                 if (time_info[2] - time_info[0]) > sim_h * self.segment_len_rate or ( | |||
|                         time_info[3] - time_info[1]) > sim_w * self.segment_len_rate: | |||
|                     filterable = False | |||
|             if not filterable: | |||
|                 res_pred_list.append(time_info) | |||
|         return res_pred_list | |||
| 
 | |||
| 
 | |||
| After Width: | Height: | Size: 11 KiB | 
					Loading…
					
					
				
		Reference in new issue
	
	