|
@@ -37,9 +37,33 @@ class Pipeline(Interface):
|
|
|
def execute(self, storage: MediaStorage, file: MediaFile):
|
|
|
print('hcffdv1 execute')
|
|
|
|
|
|
- # load image, convert to grayscale, scale down
|
|
|
- image = cv2.imread(file.path)
|
|
|
+ # load file and analyze frames
|
|
|
+ found = False
|
|
|
|
|
|
+ if file.type == 'image':
|
|
|
+ found = self.__find(file, cv2.imread(file.path))
|
|
|
+ else:
|
|
|
+ video = cv2.VideoCapture(file.path)
|
|
|
+ index = 0
|
|
|
+
|
|
|
+ ret, image = video.read()
|
|
|
+ while ret:
|
|
|
+ if self.__find(file, image, index):
|
|
|
+ found = True
|
|
|
+
|
|
|
+ ret, image = video.read()
|
|
|
+ index += 1
|
|
|
+
|
|
|
+ video.release()
|
|
|
+
|
|
|
+ # set file collection
|
|
|
+ if found:
|
|
|
+ file.set_collection('face')
|
|
|
+ else:
|
|
|
+ file.set_collection('none')
|
|
|
+
|
|
|
+ def __find(self, file: MediaFile, image, frame=None):
|
|
|
+ # convert to grayscale, scale down
|
|
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
|
height, width = gray.shape
|
|
|
|
|
@@ -55,18 +79,12 @@ class Pipeline(Interface):
|
|
|
minSize=(192, 192)
|
|
|
)
|
|
|
|
|
|
- # convert faces to result list
|
|
|
- result = False
|
|
|
-
|
|
|
+ # add faces to results
|
|
|
for x, y, w, h in faces:
|
|
|
file.add_bounding_box(x / scale_width,
|
|
|
y / scale_height,
|
|
|
w / scale_width,
|
|
|
- h / scale_height)
|
|
|
- result = True
|
|
|
+ h / scale_height,
|
|
|
+ frame=frame)
|
|
|
|
|
|
- # set file collection
|
|
|
- if result:
|
|
|
- file.set_collection('face')
|
|
|
- else:
|
|
|
- file.set_collection('none')
|
|
|
+ return len(faces) > 0
|