Spaces:
Sleeping
Sleeping
| import numpy | |
| import pandas as pd | |
| import sahi.predict | |
| import sahi.utils | |
| from PIL import Image | |
| TEMP_DIR = "temp" | |
| def sahi_yolov8m_inference( | |
| image, | |
| detection_model, | |
| slice_height, | |
| slice_width, | |
| overlap_height_ratio, | |
| overlap_width_ratio, | |
| image_size, | |
| ): | |
| # sliced inference | |
| detection_model.image_size = image_size | |
| prediction_result = sahi.predict.get_sliced_prediction( | |
| image=image, | |
| detection_model=detection_model, | |
| slice_height=slice_height, | |
| slice_width=slice_width, | |
| overlap_height_ratio=overlap_height_ratio, | |
| overlap_width_ratio=overlap_width_ratio, | |
| ) | |
| visual_result = sahi.utils.cv.visualize_object_predictions( | |
| image=numpy.array(image), | |
| object_prediction_list=prediction_result.object_prediction_list, | |
| rect_th=3, | |
| text_size=2 | |
| ) | |
| output_visual = Image.fromarray(visual_result["image"]) | |
| # object prediction annotation | |
| coco_annotations = prediction_result.to_coco_annotations() | |
| # base DataFrame with predefined categories | |
| output_df = pd.DataFrame( | |
| {'category': ['ball-valve', 'butterfly-valve', 'centrifugal-pump', 'check-valve', 'gate-valve'], | |
| 'count': [0, 0, 0, 0, 0] | |
| } | |
| ) | |
| # extract relevant data into a new DataFrame | |
| coco_df = pd.DataFrame( | |
| [(item['category_name'], round(item['score'], 2)) for item in coco_annotations], | |
| columns=['category', 'score'] | |
| ) | |
| # count occurrences of each category | |
| category_counts = coco_df['category'].value_counts().reset_index() | |
| category_counts.columns = ['category', 'count'] | |
| # update the `count` column in the base DataFrame | |
| output_df['count'] = output_df['category'].map(category_counts.set_index('category')['count']).fillna(0).astype(int) | |
| # calculate percentages | |
| output_df['percentage'] = round((output_df['count'] / output_df['count'].sum()) * 100, 1) | |
| return output_visual,coco_df,output_df |