Files
Photovoltaic_Fault_Detector/GPS_Panel/ClassifierPanel_KML.ipynb

260 lines
29 KiB
Plaintext
Raw Normal View History

2020-11-18 03:05:29 -03:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from matplotlib import path\n",
"import matplotlib.patches as patches\n",
"from skimage import draw\n",
"import scipy.ndimage as ndimage\n",
"import Utils\n",
"import georasters as gr\n",
"import cv2\n",
"from Utils import doubleMADsfromMedian\n",
"from skimage.transform import resize\n",
"import pickle\n",
"import simplekml\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Parameters"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"path_T = \"Pampa/THERMAL_06.tif\"\n",
"path_String = \"Pampa/BP-B-5.tif\"\n",
"ZonaPV = 'BP-B-5'\n",
"path_kml_panel = 'Pampa/KML/Paneles_' + ZonaPV +'_classifier.kml'\n",
"path_dict = 'Pampa/KML/Mesa_' + ZonaPV + '.pickle'\n",
"\n",
"GR_String = gr.from_file(path_String)\n",
"GR_T = gr.from_file(path_T)\n",
"geot_T = GR_T.geot\n",
"img_height, img_width = 128,128\n",
"## Load List in coordinate latitud and longitude ###\n",
"with open(path_dict, \"rb\") as fp:\n",
" L_strings_coord = pickle.load(fp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Classifier each panel"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
},
{
"ename": "NameError",
"evalue": "name 'classifier' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-92-11368de2a81e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0mIm\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mIm\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mIm\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mIm\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0mpanel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'status'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpanel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'prob'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclassifier\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mIm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 17\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'problem with coords panel: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstring_key\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpanel_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'classifier' is not defined"
]
}
],
"source": [
"\n",
"epsilon = 0\n",
"matrix_expand_bounds = [[-epsilon, -epsilon],[+epsilon, -epsilon], [+epsilon, +epsilon], [-epsilon, +epsilon]]\n",
"\n",
"for string_key in ['1', '20']:# L_strings_coord.keys():\n",
" print(string_key)\n",
" string = L_strings_coord[string_key]\n",
" for panel_key in string['panels'].keys():\n",
" panel = string['panels'][panel_key]\n",
" Points = Utils.gps2pixel(panel['points'], geot_T) + matrix_expand_bounds\n",
" \n",
" if not GR_T.raster.data[0,Points[0][1] : Points[2][1], Points[0][0]: Points[2][0]].size == 0:\n",
" Im = np.zeros((img_height, img_width, 3))\n",
" Im[:,:,0] = cv2.resize(GR_T.raster.data[0,Points[0][1] : Points[2][1], Points[0][0]: Points[2][0]], (img_width, img_height))\n",
" Im[:,:,1] = Im[:,:,0].copy()\n",
" Im[:,:,2] = Im[:,:,0].copy()\n",
" panel['status'], panel['prob'] = classifier(Im)\n",
" else:\n",
" print('problem with coords panel: ', string_key, '_', panel_key)\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"plt.imshow(Im.astype(int))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"panel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Save KML Panels"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"kml=simplekml.Kml()\n",
"\n",
"\n",
"for string_key in L_strings_coord.keys():\n",
" \n",
" string = L_strings_coord[string_key]\n",
" points = string['points']\n",
" \n",
" for panel_key in string['panels'].keys():\n",
" panel = string['panels'][panel_key]\n",
" points = panel['points']\n",
" \n",
" pmt = kml.newpolygon(outerboundaryis = points)\n",
" pmt.extendeddata.newdata(name= 'Id integer', value= str(string_key).zfill(3) + '_' + str(panel['id']).zfill(3))\n",
" pmt.extendeddata.newdata(name= 'Id panel', value= str(panel['id']).zfill(3))\n",
" pmt.extendeddata.newdata(name='Zona PV', value= ZonaPV)\n",
" pmt.extendeddata.newdata(name='Cód. Fall', value= 0)\n",
" pmt.extendeddata.newdata(name= 'Tipo falla', value= panel['status'])\n",
" pmt.extendeddata.newdata(name= 'Mesa', value= string['id'])\n",
" \n",
"kml.save(path_kml_panel)\n",
"print('Listo')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd0127a2d10>"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(Im.astype(int))"
]
},
{
"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": 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
}