Skip to content

Commit

Permalink
Projeto 05 inserido
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosfab committed Nov 6, 2023
1 parent 4c9cdbf commit f23e1f5
Show file tree
Hide file tree
Showing 9 changed files with 228 additions and 184 deletions.
Binary file added data/c_cinza.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/c_cinza_roi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/carlos.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,21 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# Importando as bibliotecas necessárias\n",
"import cv2 \n",
"import numpy as np \n",
"import sigmoidal as sig\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
Expand All @@ -95,15 +109,8 @@
}
],
"source": [
"# Importando as bibliotecas necessárias\n",
"import cv2 \n",
"import numpy as np \n",
"import sigmoidal as sig\n",
"\n",
"%matplotlib inline\n",
"\n",
"# Carregando a imagem\n",
"img = cv2.imread('data/carlos.jpg')\n",
"img = cv2.imread('../data/carlos.jpg')\n",
"\n",
"# Exibindo a imagem usando a função plot_image da biblioteca sigmoidal\n",
"sig.plot_image(img)"
Expand Down Expand Up @@ -138,12 +145,12 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"# Carrega o modelo\n",
"model = cv2.dnn.readNetFromCaffe('data/models/deploy.prototxt', 'data/models/res10_300x300_ssd_iter_140000.caffemodel')"
"model = cv2.dnn.readNetFromCaffe('../data/models/deploy.prototxt', '../data/models/res10_300x300_ssd_iter_140000.caffemodel')"
]
},
{
Expand Down Expand Up @@ -185,7 +192,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -229,7 +236,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -264,7 +271,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -283,7 +290,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 27,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -329,91 +336,6 @@
"sig.plot_image(img_copy)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def process_detections(\n",
" detections: np.ndarray,\n",
" frame: np.ndarray,\n",
" confidence_threshold: float = 0.5\n",
") -> np.ndarray:\n",
" \"\"\"\n",
" Processa as detecções retornadas pelo modelo de detecção de rostos, desenhando os retângulos\n",
" delimitadores e adicionando as informações de confiança.\n",
"\n",
" Parâmetros:\n",
" detections (np.ndarray): Matriz contendo as detecções, onde cada detecção é representada por uma linha \n",
" contendo informações como as coordenadas do retângulo delimitador e a \n",
" confiança da detecção.\n",
" frame (np.ndarray): Imagem de entrada onde os rostos foram detectados.\n",
" confidence_threshold (float): Limiar de confiança para considerar uma detecção válida.\n",
"\n",
" Retorno:\n",
" np.ndarray: Matriz contendo as detecções processadas, onde cada detecção é representada por uma linha \n",
" contendo informações como as coordenadas do retângulo delimitador e a \n",
" confiança da detecção.\n",
"\n",
" Exemplo:\n",
" detections = process_detections(detections, frame)\n",
" \"\"\"\n",
" # Obtém as dimensões da imagem\n",
" (h, w) = frame.shape[:2]\n",
"\n",
" # Itera sobre as detecções\n",
" for i in range(detections.shape[2]):\n",
" # Obtém a confiança da detecção\n",
" confidence = detections[0, 0, i, 2]\n",
"\n",
" # Verifica se a confiança é maior que o limiar\n",
" if confidence > confidence_threshold:\n",
" # Obtém as coordenadas do retângulo delimitador\n",
" box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])\n",
"\n",
" # Converte as coordenadas para inteiros\n",
" (startX, startY, endX, endY) = box.astype(\"int\")\n",
"\n",
" # Desenha o retângulo delimitador\n",
" cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2)\n",
"\n",
" # Adiciona a confiança da detecção\n",
" text = \"{:.2f}%\".format(confidence * 100)\n",
" cv2.putText(frame, text, (startX, startY - 10),\n",
" cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 255, 0), 2)\n",
"\n",
" return frame\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
Expand Down Expand Up @@ -447,72 +369,6 @@
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def load_model(\n",
" model_path: str,\n",
" config_path: str\n",
") -> cv2.dnn_Net:\n",
" \"\"\"\n",
" Carrega um modelo de rede neural pré-treinado.\n",
"\n",
" Parâmetros:\n",
" model_path (str): Caminho para o arquivo contendo o modelo pré-treinado.\n",
"\n",
" Retorno:\n",
" cv2.dnn_Net: Modelo pré-treinado de detecção de rostos no formato Caffe.\n",
"\n",
" Exemplo:\n",
" model = load_model(model_path)\n",
" \"\"\"\n",
" # Carrega o modelo\n",
" model = cv2.dnn.readNetFromCaffe(config_path, model_path)\n",
"\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def detect_faces(\n",
" model: cv2.dnn_Net,\n",
" frame: np.ndarray\n",
") -> np.ndarray:\n",
" \"\"\"\n",
" Detecta rostos em uma imagem utilizando um modelo de rede neural pré-treinado.\n",
"\n",
" Parâmetros:\n",
" model (cv2.dnn_Net): Modelo pré-treinado de detecção de rostos no formato Caffe.\n",
" frame (np.ndarray): Imagem de entrada onde os rostos serão detectados.\n",
"\n",
" Retorno:\n",
" np.ndarray: Matriz contendo as detecções, onde cada detecção é representada por uma linha \n",
" contendo informações como as coordenadas do retângulo delimitador e a \n",
" confiança da detecção.\n",
"\n",
" Exemplo:\n",
" detections = detect_faces(model, frame)\n",
" \"\"\"\n",
" # Cria um blob a partir da imagem\n",
" blob = cv2.dnn.blobFromImage(cv2.resize(\n",
" frame, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))\n",
"\n",
" # Define o blob como entrada para o modelo\n",
" model.setInput(blob)\n",
"\n",
" # Executa uma passagem para frente (forward pass) através do modelo\n",
" detections = model.forward()\n",
"\n",
" return detections"
]
}
],
"metadata": {
Expand Down
Loading

0 comments on commit f23e1f5

Please sign in to comment.