549 lines
4.5 MiB
Plaintext
549 lines
4.5 MiB
Plaintext
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"# Example of load model for detections\n",
|
||
|
|
"\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 1,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import time\n",
|
||
|
|
"import os\n",
|
||
|
|
"import argparse\n",
|
||
|
|
"import json\n",
|
||
|
|
"import cv2\n",
|
||
|
|
"import sys\n",
|
||
|
|
"sys.path += [os.path.abspath('keras-yolo3-master')]\n",
|
||
|
|
"\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",
|
||
|
|
"\n",
|
||
|
|
"#detection_orto(infer_model, orto_image, div = [5,5], net_h = net_h, net_w = net_w, anchors\n",
|
||
|
|
" # obj_thresh = obj_thresh, nms_thresh = nms_thresh)\n",
|
||
|
|
" \n",
|
||
|
|
"\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
"def detection_orto (infer_model, orto_image, div, net_h, net_w, anchors, obj_thresh, nms_thresh):\n",
|
||
|
|
" \n",
|
||
|
|
" div_h, div_w = div\n",
|
||
|
|
" \n",
|
||
|
|
" new_shape = [int(orto_image.shape[0] / div_h), int(orto_image.shape[1] / div_w)]\n",
|
||
|
|
" \n",
|
||
|
|
" final_boxes = []\n",
|
||
|
|
" \n",
|
||
|
|
" for h in range(div_h):\n",
|
||
|
|
" for w in range(div_w):\n",
|
||
|
|
" \n",
|
||
|
|
" image = orto_image[new_shape[0]*h: new_shape[0]*(h + 1), new_shape[1]*w : new_shape[1]*(w + 1)]\n",
|
||
|
|
" boxes = get_yolo_boxes(infer_model, [image], net_h, net_w, anchors, obj_thresh, nms_thresh)[0]\n",
|
||
|
|
" \n",
|
||
|
|
" for box in boxes:\n",
|
||
|
|
" box.xmin += new_shape[1]*w\n",
|
||
|
|
" box.xmax += new_shape[1]*w\n",
|
||
|
|
" box.ymin += new_shape[0]*h\n",
|
||
|
|
" box.ymax += new_shape[0]*h\n",
|
||
|
|
" final_boxes.append(box)\n",
|
||
|
|
" return final_boxes\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## ORTO PHOTO"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 2,
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": false
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"(-0.5, 799.5, 399.5, -0.5)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 2,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"image_path = 'odm_orthophoto.tif' \n",
|
||
|
|
"\n",
|
||
|
|
"image = cv2.imread(image_path)\n",
|
||
|
|
"\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Original Image')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') \n",
|
||
|
|
"\n",
|
||
|
|
"sub_image = image[1200:1600, 800:1600]\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Path Image')\n",
|
||
|
|
"plt.imshow(sub_image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') "
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Load Trained Model Soiling Fault"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 10,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"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 = 'config_full_yolo_fault_1_infer.json' \n",
|
||
|
|
"\n",
|
||
|
|
"with open(config_path) as config_buffer:\n",
|
||
|
|
" config = json.load(config_buffer)\n",
|
||
|
|
" \n",
|
||
|
|
"\n",
|
||
|
|
"###############################\n",
|
||
|
|
"##### Load the model ######\n",
|
||
|
|
"###############################\n",
|
||
|
|
"os.environ['CUDA_VISIBLE_DEVICES'] = config['train']['gpus']\n",
|
||
|
|
"infer_model = load_model(config['train']['saved_weights_name'])\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 = 0.5, 0.45\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"#infer_model.summary()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Detection Soling Fault"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 11,
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": false
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Elapsed time = 75.83608198165894\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"(-0.5, 3938.5, 2425.5, -0.5)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 11,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"image_path = 'odm_orthophoto.tif' \n",
|
||
|
|
"image = cv2.imread(image_path)\n",
|
||
|
|
"\n",
|
||
|
|
"## Show original image\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Original Image')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') \n",
|
||
|
|
"\n",
|
||
|
|
"start = time.time()\n",
|
||
|
|
"## predict the bounding boxes\n",
|
||
|
|
"#boxes = get_yolo_boxes(infer_model, [image], net_h, net_w, config['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
|
||
|
|
"boxes = detection_orto(infer_model, orto_image = image, div = [6,6], net_h = net_h, net_w = net_w, \n",
|
||
|
|
" anchors = config['model']['anchors'], obj_thresh = obj_thresh, nms_thresh = nms_thresh)\n",
|
||
|
|
"print('Elapsed time = {}'.format(time.time() - start))\n",
|
||
|
|
"## draw bounding boxes on the image using labels\n",
|
||
|
|
"draw_boxes(image, boxes, config['model']['labels'], obj_thresh)\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"## Show Detection Fault\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Detection Fault')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') \n",
|
||
|
|
"#plt.imsave('Diode Fault_6.png', image)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Load Trained Model Diode Fault"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 5,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"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 = 'config_full_yolo_fault_4_infer.json' \n",
|
||
|
|
"\n",
|
||
|
|
"with open(config_path) as config_buffer:\n",
|
||
|
|
" config = json.load(config_buffer)\n",
|
||
|
|
" \n",
|
||
|
|
"\n",
|
||
|
|
"###############################\n",
|
||
|
|
"##### Load the model ######\n",
|
||
|
|
"###############################\n",
|
||
|
|
"os.environ['CUDA_VISIBLE_DEVICES'] = config['train']['gpus']\n",
|
||
|
|
"infer_model = load_model(config['train']['saved_weights_name'])\n",
|
||
|
|
"\n",
|
||
|
|
"#infer_model.summary()\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 = 0.5, 0.45"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Detection Diode Fault"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 6,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Elapsed time = 97.27587413787842\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"(-0.5, 3938.5, 2425.5, -0.5)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 6,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"image_path = 'odm_orthophoto.tif' \n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"image = cv2.imread(image_path)\n",
|
||
|
|
"\n",
|
||
|
|
"## Show original image\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Original Image')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') \n",
|
||
|
|
"\n",
|
||
|
|
"start = time.time()\n",
|
||
|
|
"## predict the bounding boxes\n",
|
||
|
|
"#boxes = get_yolo_boxes(infer_model, [image], net_h, net_w, config['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
|
||
|
|
"boxes = detection_orto(infer_model, orto_image = image, div = [6,6], net_h = net_h, net_w = net_w, \n",
|
||
|
|
" anchors = config['model']['anchors'], obj_thresh = obj_thresh, nms_thresh = nms_thresh)\n",
|
||
|
|
"print('Elapsed time = {}'.format(time.time() - start))\n",
|
||
|
|
"## draw bounding boxes on the image using labels\n",
|
||
|
|
"draw_boxes(image, boxes, config['model']['labels'], obj_thresh)\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"## Show Detection Fault\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Detection Fault')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') "
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Load Trained Model Panel Disconnect"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 2,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"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 = 'config_full_yolo_panel_infer.json' \n",
|
||
|
|
"\n",
|
||
|
|
"with open(config_path) as config_buffer:\n",
|
||
|
|
" config = json.load(config_buffer)\n",
|
||
|
|
" \n",
|
||
|
|
"\n",
|
||
|
|
"###############################\n",
|
||
|
|
"##### Load the model ######\n",
|
||
|
|
"###############################\n",
|
||
|
|
"os.environ['CUDA_VISIBLE_DEVICES'] = config['train']['gpus']\n",
|
||
|
|
"infer_model = load_model(config['train']['saved_weights_name'])\n",
|
||
|
|
"\n",
|
||
|
|
"#infer_model.summary()\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 = 0.5, 0.3\n",
|
||
|
|
"\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## Detection Panel Disconnect"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 3,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Elapsed time = 117.7064254283905\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"(-0.5, 3938.5, 2425.5, -0.5)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 3,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1152x1152 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"image_path = 'odm_orthophoto.tif' \n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"image = cv2.imread(image_path)\n",
|
||
|
|
"\n",
|
||
|
|
"## Show original image\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Original Image')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') \n",
|
||
|
|
"\n",
|
||
|
|
"start = time.time()\n",
|
||
|
|
"## predict the bounding boxes\n",
|
||
|
|
"#boxes = get_yolo_boxes(infer_model, [image], net_h, net_w, config['model']['anchors'], obj_thresh, nms_thresh)[0]\n",
|
||
|
|
"boxes = detection_orto(infer_model, orto_image = image, div = [6,6], net_h = net_h, net_w = net_w, \n",
|
||
|
|
" anchors = config['model']['anchors'], obj_thresh = obj_thresh, nms_thresh = nms_thresh)\n",
|
||
|
|
"print('Elapsed time = {}'.format(time.time() - start))\n",
|
||
|
|
"## draw bounding boxes on the image using labels\n",
|
||
|
|
"draw_boxes(image, boxes, config['model']['labels'], obj_thresh)\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"## Show Detection Fault\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(16, 16))\n",
|
||
|
|
"ax.set_title('Detection Fault')\n",
|
||
|
|
"plt.imshow(image, cmap='gray')\n",
|
||
|
|
"ax.axis('off') "
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"boxes = [[box for box in boxes_image if box.get_score() > obj_thresh] for boxes_image in boxes]\n",
|
||
|
|
"\n",
|
||
|
|
" print('Elapsed time = {}'.format(time.time() - start))\n",
|
||
|
|
" times.append(time.time() - start)\n",
|
||
|
|
"\n",
|
||
|
|
" boxes_disc = [disconnect(image, boxes_image, z_thresh = 1.8) for image, boxes_image in zip(images, boxes)]"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"plt.imsave('Detect Panel_6.png', image)"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"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": 2
|
||
|
|
}
|