Files
Photovoltaic_Fault_Detector/Code_Example/Example Detection AllInOne.ipynb

292 lines
378 KiB
Plaintext
Raw Normal View History

2020-06-03 22:46:26 -04:00
{
"cells": [
{
"cell_type": "code",
2020-06-15 18:48:44 -04:00
"execution_count": 1,
2020-06-03 22:46:26 -04:00
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import os\n",
"import argparse\n",
"import json\n",
"import cv2\n",
"import sys\n",
2020-08-26 00:39:38 -04:00
"sys.path += [os.path.abspath('../keras-yolo3-master')]\n",
2020-06-03 22:46:26 -04:00
"\n",
"from utils.utils import get_yolo_boxes, makedirs\n",
"from utils.bbox import draw_boxes\n",
"from tensorflow.keras.models import load_model\n",
"from tqdm import tqdm\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from panel_disconnect import disconnect\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define Image Path and output"
]
},
{
"cell_type": "code",
2020-06-15 18:48:44 -04:00
"execution_count": 2,
2020-06-03 22:46:26 -04:00
"metadata": {},
"outputs": [],
"source": [
2020-08-26 00:39:38 -04:00
"input_path = '../images/Mision 23_DJI_0061.jpg' \n",
2020-11-18 03:05:29 -03:00
"output_path = 'Result_Complete_Example/'\n",
"makedirs(output_path)"
2020-06-03 22:46:26 -04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2020-06-15 18:48:44 -04:00
"# Load Model (Panel Detector, Soiling, Diode, Cell Damage)"
2020-06-03 22:46:26 -04:00
]
},
{
"cell_type": "code",
2020-06-15 18:48:44 -04:00
"execution_count": 3,
2020-06-03 22:46:26 -04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2020-06-15 18:48:44 -04:00
"WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.\n",
2020-06-03 22:46:26 -04:00
"WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.\n",
"WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.\n",
"WARNING:tensorflow:No training configuration found in save file: the model was *not* compiled. Compile it manually.\n"
]
}
],
"source": [
"## Config of trained model, change this for use different trained model\n",
"config_path_panel = 'config_full_yolo_panel_infer.json' #Panel\n",
"config_path_soiling = 'config_full_yolo_fault_1_infer.json' #Soiling\n",
"config_path_diode = 'config_full_yolo_fault_4_infer.json' #Diode\n",
2020-06-15 18:48:44 -04:00
"config_path_cellD = 'config_full_yolo_fault_2_infer.json' #Cell Damage\n",
"\n",
2020-06-03 22:46:26 -04:00
"\n",
"\n",
"\n",
"\n",
"## Parameters of detection\n",
"net_h, net_w = 416, 416 # a multiple of 32, the smaller the faster\n",
"obj_thresh, nms_thresh, nms_thresh_panel = 0.5, 0.45, 0.3\n",
"\n",
"####################################################\n",
"##### Load the model Panel Detector #############\n",
"####################################################\n",
"with open(config_path_panel) as config_buffer:\n",
" config_panel = json.load(config_buffer)\n",
"\n",
"os.environ['CUDA_VISIBLE_DEVICES'] = config_panel['train']['gpus']\n",
"infer_model_panel = load_model(config_panel['train']['saved_weights_name'])\n",
"\n",
"####################################################\n",
"##### Load the model Soiling #############\n",
"####################################################\n",
"with open(config_path_soiling) as config_buffer:\n",
" config_soiling = json.load(config_buffer)\n",
"\n",
"infer_model_soiling = load_model(config_soiling['train']['saved_weights_name'])\n",
"\n",
"####################################################\n",
2020-06-15 18:48:44 -04:00
"##### Load the model Diode #############\n",
2020-06-03 22:46:26 -04:00
"####################################################\n",
"with open(config_path_diode) as config_buffer:\n",
" config_diode = json.load(config_buffer)\n",
"\n",
2020-06-15 18:48:44 -04:00
"infer_model_diode = load_model(config_diode['train']['saved_weights_name'])\n",
"\n",
"####################################################\n",
"##### Load the model Cell Damage #############\n",
"####################################################\n",
"with open(config_path_cellD) as config_buffer:\n",
" config_cellD = json.load(config_buffer)\n",
"\n",
"infer_model_cellD = load_model(config_cellD['train']['saved_weights_name'])"
2020-06-03 22:46:26 -04:00
]
},
{
2020-07-13 21:32:18 -04:00
"cell_type": "markdown",
2020-06-03 22:46:26 -04:00
"metadata": {},
"source": [
"# Load Image paths"
]
},
{
"cell_type": "code",
2020-07-13 21:32:18 -04:00
"execution_count": 11,
2020-06-03 22:46:26 -04:00
"metadata": {},
"outputs": [],
"source": [
"image_paths = []\n",
"\n",
"if os.path.isdir(input_path):\n",
" for inp_file in os.listdir(input_path):\n",
" image_paths += [input_path + inp_file]\n",
"else:\n",
" image_paths += [input_path]\n",
"\n",
"image_paths = [inp_file for inp_file in image_paths if (inp_file[-4:] in ['.jpg', '.png', 'JPEG'])]\n",
"\n",
"# the main loop\n",
"times = []\n"
]
},
{
2020-07-13 21:32:18 -04:00
"cell_type": "markdown",
2020-06-03 22:46:26 -04:00
"metadata": {},
"source": [
"# Detection of images"
]
},
{
"cell_type": "code",
2020-07-13 21:32:18 -04:00
"execution_count": 13,
"metadata": {},
2020-06-03 22:46:26 -04:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2020-07-13 21:32:18 -04:00
"images/Mision 23_DJI_0061.jpg\n",
"Elapsed time = 5.464144468307495\n"
2020-06-03 22:46:26 -04:00
]
2020-07-13 21:32:18 -04:00
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
2020-06-03 22:46:26 -04:00
}
],
"source": [
"for image_path in image_paths:\n",
" image = cv2.imread(image_path)\n",
" print(image_path)\n",
" start = time.time()\n",
" # predict the bounding boxes\n",
" boxes_soiling = get_yolo_boxes(infer_model_soiling, [image], net_h, net_w, config_soiling['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
" boxes_diode = get_yolo_boxes(infer_model_diode, [image], net_h, net_w, config_diode['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
2020-06-15 18:48:44 -04:00
" boxes_cellD = get_yolo_boxes(infer_model_cellD, [image], net_h, net_w, config_cellD['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
2020-06-03 22:46:26 -04:00
" boxes_panel = get_yolo_boxes(infer_model_panel, [image], net_h, net_w, config_panel['model']['anchors'], obj_thresh, nms_thresh_panel)[0]\n",
" boxes_panel = [box for box in boxes_panel if box.get_score() > obj_thresh]\n",
" boxes_disc = disconnect(image, boxes_panel, z_thresh = 1.8)\n",
" print('Elapsed time = {}'.format(time.time() - start))\n",
" times.append(time.time() - start)\n",
" # Draw boxes\n",
" draw_boxes(image, boxes_soiling, config_soiling['model']['labels'], obj_thresh, number_color = 0)\n",
" draw_boxes(image, boxes_diode, config_diode['model']['labels'], obj_thresh, number_color = 2)\n",
2020-06-15 18:48:44 -04:00
" draw_boxes(image, boxes_cellD, config_cellD['model']['labels'], obj_thresh, number_color = 4)\n",
2020-06-03 22:46:26 -04:00
" draw_boxes(image, boxes_disc, ['disc'], obj_thresh, number_color = 5)\n",
" \n",
2020-11-18 03:05:29 -03:00
" cv2.imwrite(output_path + image_path.split('/')[-1], np.uint8(image))\n",
2020-06-03 22:46:26 -04:00
" # write the image with bounding boxes to file\n",
2020-11-18 03:05:29 -03:00
" #plt.figure(figsize=(16, 16))\n",
" #plt.imshow(image)\n",
2020-06-03 22:46:26 -04:00
"\n",
2020-11-18 03:05:29 -03:00
"file = open(output_path + 'time.txt','w')\n",
"file.write('Tiempo promedio:' + str(np.mean(times)))\n",
"file.close()\n",
2020-07-13 21:32:18 -04:00
"\n"
2020-06-03 22:46:26 -04:00
]
},
2020-11-18 03:05:29 -03:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example One image"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"image_path = image_paths[55]\n",
"\n",
"image = cv2.imread(image_path)\n",
"plt.figure(figsize=(12, 10))\n",
"plt.imshow(image)\n",
"print(image_path)\n",
"\n",
"start = time.time()\n",
"# predict the bounding boxes\n",
"boxes_soiling = get_yolo_boxes(infer_model_soiling, [image], net_h, net_w, config_soiling['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
"boxes_diode = get_yolo_boxes(infer_model_diode, [image], net_h, net_w, config_diode['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
"boxes_cellD = get_yolo_boxes(infer_model_cellD, [image], net_h, net_w, config_cellD['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
"boxes_panel = get_yolo_boxes(infer_model_panel, [image], net_h, net_w, config_panel['model']['anchors'], obj_thresh, nms_thresh_panel)[0]\n",
"boxes_panel = [box for box in boxes_panel if box.get_score() > obj_thresh]\n",
"boxes_disc = disconnect(image, boxes_panel, z_thresh = 1.8)\n",
"print('Elapsed time = {}'.format(time.time() - start))\n",
"times.append(time.time() - start)\n",
"# Draw boxes\n",
"draw_boxes(image, boxes_soiling, config_soiling['model']['labels'], obj_thresh, number_color = 0)\n",
"draw_boxes(image, boxes_diode, config_diode['model']['labels'], obj_thresh, number_color = 2)\n",
"draw_boxes(image, boxes_cellD, config_cellD['model']['labels'], obj_thresh, number_color = 4)\n",
"draw_boxes(image, boxes_disc, ['disc'], obj_thresh, number_color = 5)\n",
"\n",
"print('Elapsed time = {}'.format(time.time() - start))\n",
"times.append(time.time() - start)\n",
"plt.figure(figsize=(12, 10))\n",
"plt.imshow(image)"
]
},
2020-06-03 22:46:26 -04:00
{
2020-07-13 21:32:18 -04:00
"cell_type": "markdown",
2020-06-03 22:46:26 -04:00
"metadata": {},
"source": [
2020-07-13 21:32:18 -04:00
"# Type Fault\n",
"## 1: Soiling Fault\n",
"## 2: Affected Cell \n",
"## 4: Diode Fault\n",
"## disc: Panel Disconnected"
2020-06-03 22:46:26 -04:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}