Merge pull request 'Used retina' (#1) from Retina into main

Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
2024-12-23 13:03:38 +00:00
4 changed files with 35 additions and 20 deletions
+1
View File
@@ -1 +1,2 @@
.venv .venv
.conda
+4
View File
@@ -23,3 +23,7 @@ services:
- ${PWD}/app_data/:/app/data/ - ${PWD}/app_data/:/app/data/
networks: {} networks: {}
``` ```
```python
pip3 install -r requirements.txt
```
+24 -17
View File
@@ -3,8 +3,9 @@ import time
import os import os
import requests import requests
import json import json
from retinaface import RetinaFace
treashold = float(os.getenv('FACE_TRASHOLD', '0.5')) treashold = float(os.getenv('FACE_TRASHOLD', '0.9'))
sever = os.getenv('API_ROOT', 'localhost:8000') sever = os.getenv('API_ROOT', 'localhost:8000')
root_api_url = 'http://{}/local'.format(sever) root_api_url = 'http://{}/local'.format(sever)
base_path = '/app/data/' base_path = '/app/data/'
@@ -18,7 +19,6 @@ try:
print("LOOP Started !!!", flush=True) print("LOOP Started !!!", flush=True)
r = requests.get('{}/anonymize'.format(root_api_url)) r = requests.get('{}/anonymize'.format(root_api_url))
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# print(r.text, flush=True) # print(r.text, flush=True)
response = r.json() response = r.json()
@@ -26,36 +26,43 @@ try:
print(str(detection['id']) + " Anonymization Started", flush=True) print(str(detection['id']) + " Anonymization Started", flush=True)
img_path = "{}{}".format(base_path, detection['source_image_path']) img_path = "{}{}".format(base_path, detection['source_image_path'])
#print(img_path, flush=True)
#Skip Non existing files #Skip Non existing files
if (not os.path.exists(img_path)): if (not os.path.exists(img_path)):
continue continue
img = cv2.imread(img_path) img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = RetinaFace.detect_faces(img, treashold)
faces, rejects, weights = face_cascade.detectMultiScale3(gray, 1.1, 4, outputRejectLevels = 1)
#Count faces is null dont anonimize file #Count faces is null dont anonimize file
print(str(len(faces)) + " Faces Found" , flush=True) print(str(len(faces)) + " Faces Found" , flush=True)
if (len(faces) < 0): if (len(faces) <= 0):
data = {
"id": detection['id'],
"source_image_path": img_path.replace(base_path,""),
"face_found": 0,
}
response = requests.post('{}/anonymize'.format(root_api_url), json=data)
print(str(detection['id']) + " Anonymized 0 faces" , flush=True)
continue continue
i = 0 i = 0
for (x, y, w, h) in faces: for (key) in faces:
confidence = float(weights[i]) confidence = faces[key]["score"]
print(str(confidence) + " Faces Confidence" , flush=True) print(str(confidence) + " Faces Confidence" , flush=True)
x1, y1 = min(faces[key]["facial_area"][0], faces[key]["facial_area"][2]) - 2, min(faces[key]["facial_area"][1], faces[key]["facial_area"][3]) - 2
if (confidence > treashold): x2, y2 = max(faces[key]["facial_area"][0], faces[key]["facial_area"][2]) + 2, max(faces[key]["facial_area"][1], faces[key]["facial_area"][3]) + 2
face_roi = img[y:y+h, x:x+w] x1, x2 = max(x1, 0), min(x2, img.shape[1])
blurred_face = cv2.GaussianBlur(face_roi, (99, 99), 50) y1, y2 = max(y1, 0), min(y2, img.shape[0])
img[y:y+h, x:x+w] = blurred_face face_roi = img[y1:y2, x1:x2]
print("Faces Anonymized" , flush=True) blurred_face = cv2.GaussianBlur(face_roi, (99, 99), 50)
text = "{}".format(weights[i]) img[y1:y2, x1:x2] = blurred_face
#cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) print("Faces Anonymized" , flush=True)
#cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)
i = i +1 i = i +1
#cv2.imshow("test_img", img)
#cv2.waitKey(0)
extension = img_path[img_path.index(".")+1:] extension = img_path[img_path.index(".")+1:]
new_img_path = img_path new_img_path = img_path
+3
View File
@@ -1,2 +1,5 @@
opencv-python opencv-python
numpy
requests requests
retina-face
tf-keras