From f87a677b19b4b029d8864a5ce71f963f1abe1c73 Mon Sep 17 00:00:00 2001 From: ml server Date: Thu, 23 Jan 2020 19:03:17 -0700 Subject: [PATCH] wut-web-dev revert to main --- notebooks/wut-web-dev.ipynb | 365 +++--------------------------------- 1 file changed, 21 insertions(+), 344 deletions(-) diff --git a/notebooks/wut-web-dev.ipynb b/notebooks/wut-web-dev.ipynb index 34a526a..4e2c43a 100644 --- a/notebooks/wut-web-dev.ipynb +++ b/notebooks/wut-web-dev.ipynb @@ -2,90 +2,34 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# wut-web-dev --- What U Think? Web App: SatNOGS Observation AI, makes predictions, development version.\n", + "# wut-web --- What U Think? Web App: SatNOGS Observation AI, makes predictions.\n", "#\n", "# https://spacecruft.org/spacecruft/satnogs-wut\n", "#\n", "# GPLv3+\n", "\n", - "from __future__ import print_function\n", "import os\n", "import random\n", "import tempfile\n", "import shutil\n", "import tensorflow as tf\n", - "import numpy as np\n", "from IPython.display import display, Image\n", "from IPython.utils import text\n", "from tensorflow.python.keras.models import load_model\n", "from tensorflow.python.keras.preprocessing.image import ImageDataGenerator\n", - "from ipywidgets import interact, interactive, fixed, interact_manual\n", - "import ipywidgets as widgets" + "\n", + "display(Image(filename='/srv/satnogs/satnogs-wut/pics/spacecruft-bk.png'))" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "import ipywidgets as w\n", - "from IPython.display import display\n", - "import time\n", - "from jupyter_ui_poll import (\n", - " ui_events, \n", - " with_ui_events,\n", - " run_ui_poll_loop\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1868d94f31f14ea481c93436c8e78de8", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output(layout=Layout(border='5px solid lightblue'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "blueline = widgets.Output(layout={'border': '5px solid lightblue'})\n", - "blueline" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

wut?

\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "%%HTML\n", "

wut?

" @@ -93,29 +37,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "wut? --- What U Think? SatNOGS Observation AI.\n", - "\n", - "wut is an AI that rates SatNOGS Observations good or bad.\n", - "The training model was built from DUV transmissions recorded by the\n", - "SatNOGS network in December, 2019.\n", - "When the page loads, the AI processes a random image and rates it good or bad.\n", - "The test pool has 500+ DUV waterfalls the AI hasn't seen before.\n", - "The plan is to have models of all SatNOGS modes (65 at present),\n", - "and you can enter an arbitrary Observation ID and the AI will return a rating.\n", - "\n", - "Source Code:\n", - "https://spacecruft.org/spacecruft/satnogs-wut\n", - "Alpha stage.\n" - ] - } - ], + "outputs": [], "source": [ "print(\"wut? --- What U Think? SatNOGS Observation AI.\")\n", "print(\"\")\n", @@ -144,89 +68,30 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2e6e4c84c4d9409fa9ac6b339902cf7a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output(layout=Layout(border='5px solid lightblue'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "blueline = widgets.Output(layout={'border': '5px solid lightblue'})\n", - "blueline" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'rfile' 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\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnumwater\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mrfile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mroot\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mshutil\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrfile\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_dir\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'/unvetted/'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'rfile' is not defined" - ] - } - ], + "outputs": [], "source": [ "%%capture\n", - "numwater=0\n", + "n=0\n", "random.seed();\n", "for root, dirs, files in os.walk(sample_dir):\n", " for name in files:\n", - " numwater=numwater+1\n", - " if random.uniform(0, numwater) < 1: rfile=os.path.join(root, name)\n", + " n=n+1\n", + " if random.uniform(0, n) < 1: rfile=os.path.join(root, name)\n", "\n", "shutil.copy(rfile, test_dir + '/unvetted/')" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "ename": "OSError", - "evalue": "SavedModel file does not exist at: /srv/wut/data/models/wut-DUV-201912.tf/{saved_model.pbtxt|saved_model.pb}", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_file\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/save.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(filepath, custom_objects, compile)\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 148\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstring_types\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--> 149\u001b[0;31m \u001b[0mloader_impl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparse_saved_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\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 150\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msaved_model_load\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 151\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/loader_impl.py\u001b[0m in \u001b[0;36mparse_saved_model\u001b[0;34m(export_dir)\u001b[0m\n\u001b[1;32m 81\u001b[0m (export_dir,\n\u001b[1;32m 82\u001b[0m \u001b[0mconstants\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSAVED_MODEL_FILENAME_PBTXT\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 83\u001b[0;31m constants.SAVED_MODEL_FILENAME_PB))\n\u001b[0m\u001b[1;32m 84\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mOSError\u001b[0m: SavedModel file does not exist at: /srv/wut/data/models/wut-DUV-201912.tf/{saved_model.pbtxt|saved_model.pb}" - ] - } - ], - "source": [ - "%%capture\n", - "model = load_model(model_file)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%capture\n", + "model = load_model(model_file)\n", + "\n", "test_image_generator = ImageDataGenerator(\n", " rescale=1./255\n", ")\n", @@ -239,21 +104,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'model' 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\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m prediction = model.predict(\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtest_data_gen\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m )\n\u001b[1;32m 5\u001b[0m \u001b[0mpredictions\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[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" - ] - } - ], + "outputs": [], "source": [ "%%capture\n", "prediction = model.predict(\n", @@ -267,30 +120,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "shutil.rmtree(test_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'rfile' 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\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mwaterfallpng\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbasename\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrfile\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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Random waterfall:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwaterfallpng\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mEvalFormatter\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 4\u001b[0m \u001b[0mobsid\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"{waterfall[slice(10,17)]}\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwaterfall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwaterfallpng\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 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Observation URL: https://network.satnogs.org/observations/{}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobsid\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;31mNameError\u001b[0m: name 'rfile' is not defined" - ] - } - ], "source": [ "waterfallpng=os.path.basename(rfile)\n", "print('Random waterfall:', waterfallpng)\n", @@ -310,7 +142,8 @@ "metadata": {}, "outputs": [], "source": [ - "#display(Image(filename=rfile, width=300))" + "%%capture\n", + "shutil.rmtree(test_dir)" ] }, { @@ -319,163 +152,7 @@ "metadata": {}, "outputs": [], "source": [ - "blueline = widgets.Output(layout={'border': '5px solid lightblue'})\n", - "blueline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import IPython.display\n", - "from IPython.display import Audio\n", - "framerate = 44100\n", - "t = np.linspace(0,5,framerate*5)\n", - "data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t)\n", - "IPython.display.Audio(data,rate=framerate)\n", - "\n", - "audiofile=('/srv/satnogs/download/1456893/satnogs_1456893_2019-12-30T10-35-46.ogg')\n", - "#Audio(filename=audiofile)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#obs_file='/srv/satnogs/download/1456893/1456893.json'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import JSON\n", - "obs_file='/srv/satnogs/download/1456893/1456893.json'\n", - "obs_json=JSON(filename=obs_file, expanded=False)\n", - "foo=JSON(filename=obs_file)\n", - "#display_pretty(foo, raw=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import HTML\n", - "obs_html = HTML(obs_file)\n", - "display(obs_html)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.utils import text\n", - "waterfallpng=os.path.basename(rfile)\n", - "print('Waterfall:', waterfallpng)\n", - "text.LSString(waterfallpng)\n", - "#text.SList(waterfallpng)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('Waterfall:', waterfallpng)\n", - "f=text.EvalFormatter()\n", - "obsid=(f.format(\"{waterfall[slice(10,17)]}\", waterfall=waterfallpng))\n", - "print('Observation ID:', obsid)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(text.marquee('wut?',40,'*'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "blueline = widgets.Output(layout={'border': '5px solid lightblue'})\n", - "blueline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Cute SSTV: 1456893\n", - "# December, 2019 range: 1292461 \n", - "obsmin=1292461\n", - "obsmax=1470525\n", - "print(\"Minimum Observation ID: \", obsmin)\n", - "print(\"Maximum Observation ID: \", obsmax)\n", - "\n", - "print(\"Enter a value between the minimum and maximum Observation ID:\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "obsoutputText = widgets.Text()\n", - "obsoutputText" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "obsinputText = widgets.Text()\n", - "\n", - "def makeUpperCase(sender):\n", - " obsoutputText.value = obsinputText.value.upper()\n", - " print('dat:', obsinputText.value.upper)\n", - "\n", - "obsinputText.on_submit(makeUpperCase)\n", - "obsinputText" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "blueline = widgets.Output(layout={'border': '5px solid lightblue'})\n", - "blueline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "blueline.clear_output()" + "display(Image(filename=rfile, width=300))" ] } ],