我正在使用 ImageAI 和 ResNet50 模型从照片中检测和提取人物图片。这一切都很好,但我不知道如何禁用检测框被绘制。显然,当多个人在同一个镜头中时,来自一个人的检测框会流血到提取的其他人的图像上。
有谁知道该怎么做?我环顾四周,只能找到另一个具有相同问题的问题,出于某种原因,答案是在谈论 OpenCV 而不是 imageai。
我的代码:
from pathlib import Path
import cv2
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.applications.resnet50 import ResNet50
from imageai.Detection import ObjectDetection
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath('resnet50_coco_best_v2.1.0.h5')
detector.loadModel()
person = detector.CustomObjects(person=True)
source_folder = Path(r'd:/pics')
files = [f for f in source_folder.glob('*.jpg')]
output_folder = Path('c:/python/datasets/raw/extracted_images')
for idx, i in enumerate(files):
print(f'Extracting images from: {i.name}')
image = i
output_path = output_folder.joinpath(f'{idx}.jpg')
detected_image, detections = detector.detectCustomObjectsFromImage(input_image=str(image),
output_image_path=str(output_path),
minimum_percentage_probability=20,
input_type='file',
output_type='file',
display_percentage_probability=False,
extract_detected_objects=True,
custom_objects=person)
编辑:
我找到了一种解决问题的方法 - 通过转到detectObjetcFromImage()
函数源并注释掉这一点:
# image_copy = draw_boxes(image_copy,
# box_points,
# display_box,
# label,
# percentage_probability,
# self.__box_color)
有没有一种侵入性较小的方法来处理这个问题?