Skip to content

Instantly share code, notes, and snippets.

@hernamesbarbara
Last active July 30, 2020 11:18
Show Gist options
  • Save hernamesbarbara/5768969 to your computer and use it in GitHub Desktop.
Save hernamesbarbara/5768969 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:baacf3d4e265dcd1737f63056f93dfff89779c239e1ae9548d777d2abaf658e9"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"import numpy as np\n",
"import pylab as pl\n",
"import PIL\n",
"from PIL import Image\n",
"import os\n",
"import base64\n",
"from StringIO import StringIO"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 86
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.decomposition import RandomizedPCA\n",
"from sklearn.neighbors import KNeighborsClassifier"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 87
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 88
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Importing Image Data</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h5>Create Processing Functions</h5>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#setup a standard image size; this will distort some images but will get everything into the same shape\n",
"STANDARD_SIZE = (300, 167)\n",
"def img_to_matrix(filename, verbose=False):\n",
" \"\"\"\n",
" takes a filename and turns it into a numpy array of RGB pixels\n",
" \"\"\"\n",
" img = PIL.Image.open(filename)\n",
" if verbose==True:\n",
" print \"changing size from %s to %s\" % (str(img.size), str(STANDARD_SIZE))\n",
" img = img.resize(STANDARD_SIZE)\n",
" img = list(img.getdata())\n",
" img = map(list, img)\n",
" img = np.array(img)\n",
" return img\n",
"\n",
"def flatten_image(img):\n",
" \"\"\"\n",
" takes in an (m, n) numpy array and flattens it \n",
" into an array of shape (1, m * n)\n",
" \"\"\"\n",
" s = img.shape[0] * img.shape[1]\n",
" img_wide = img.reshape(1, s)\n",
" return img_wide[0]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 89
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h5>Define the location of your data and import it</h5>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# TODO PATH TO YOUR DATA\n",
"img_dir = \"/Users/hernamesbarbara/Desktop/img/\"\n",
"images = [img_dir+ f for f in os.listdir(img_dir)]\n",
"labels = [\"check\" if \"check\" in f.split('/')[-1] else \"drivers_license\" for f in images]\n",
"\n",
"data = []\n",
"for image in images:\n",
" img = img_to_matrix(image)\n",
" img = flatten_image(img)\n",
" data.append(img)\n",
"\n",
"data = np.array(data)\n",
"data"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 90,
"text": [
"array([[255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255],\n",
" [255, 255, 255, ..., 255, 255, 255]])"
]
}
],
"prompt_number": 90
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Creating Features</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h5>Define a training and test set</h5>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"is_train = np.random.uniform(0, 1, len(data)) <= 0.7\n",
"y = np.where(np.array(labels)==\"check\", 1, 0)\n",
"\n",
"train_x, train_y = data[is_train], y[is_train]\n",
"test_x, test_y = data[is_train==False], y[is_train==False]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 91
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h5>RandomizedPCA to create features</h5>\n",
"<p>Before we actually create our feature vectors, we're going to show a demo of <code>RandomizedPCA</code> in 2 dimensions. This makes it easy to plot high dimensional data</p>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pca = RandomizedPCA(n_components=2)\n",
"X = pca.fit_transform(data)\n",
"df = pd.DataFrame({\"x\": X[:, 0], \"y\": X[:, 1], \"label\":np.where(y==1, \"Check\", \"Drivers License\")})\n",
"colors = [\"red\", \"yellow\"]\n",
"for label, color in zip(df['label'].unique(), colors):\n",
" mask = df['label']==label\n",
" pl.scatter(df[mask]['x'], df[mask]['y'], c=color, label=label)\n",
"pl.legend()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 92,
"text": [
"<matplotlib.legend.Legend at 0x112e256d0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x114993ad0>"
]
}
],
"prompt_number": 92
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>RandomizedPCA in 5 dimensions</h2>\n",
"<p>Instead of 2 dimenisons, we're going to do RandomizedPCA in 5 dimensions. This will make it a bit harder to visualize, but it will make it easier for some of the classifiers to work with the dataset.</p>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pca = RandomizedPCA(n_components=5)\n",
"train_x = pca.fit_transform(train_x)\n",
"test_x = pca.transform(test_x)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 93
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>This gives our classifier a nice set of tabular data that we can then use to train the model</p>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"train_x[:5]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 94,
"text": [
"array([[ -2.12918920e+04, 1.04438570e+02, 3.34687547e+02,\n",
" -3.34329786e-13],\n",
" [ 6.52578587e+03, 3.92348064e+03, -7.99249275e+03,\n",
" 3.96863098e-13],\n",
" [ 6.95094940e+03, -9.37127015e+03, 6.52066013e+02,\n",
" -1.22346577e-13],\n",
" [ 7.81515669e+03, 5.34335094e+03, 7.00573919e+03,\n",
" 3.27363137e-13]])"
]
}
],
"prompt_number": 94
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We're going to be using a <code>K-Nearest Neighbors</code> classifier. Based on our set of training data, we're going to caclulate which training obersvations are closest to a given test point. Whichever class has the most votes wins.</p>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"knn = KNeighborsClassifier()\n",
"knn.fit(train_x, train_y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 95,
"text": [
"KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
" n_neighbors=5, p=2, weights='uniform')"
]
}
],
"prompt_number": 95
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pd.crosstab(test_y, knn.predict(test_x), rownames=[\"Actual\"], colnames=[\"Predicted\"])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Predicted</th>\n",
" <th>0</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Actual</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 96,
"text": [
"Predicted 0\n",
"Actual \n",
"0 2"
]
}
],
"prompt_number": 96
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"STANDARD_SIZE"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 97,
"text": [
"(300, 167)"
]
}
],
"prompt_number": 97
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# string_to_img(new_image)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 104
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def string_to_img(image_string):\n",
" print \"called string_to_image\"\n",
" #we need to decode the image from base64\n",
" image_string = base64.decodestring(image_string)\n",
" #since we're seing this as a JSON string, we use StringIO so it acts like a file\n",
" img = StringIO(image_string)\n",
" img = PIL.Image.open(img)\n",
" img = img.resize(STANDARD_SIZE)\n",
" img = list(img.getdata())\n",
" img = map(list, img)\n",
" img = np.array(img)\n",
" s = img.shape[0] * img.shape[1]\n",
" img_wide = img.reshape(1, s)\n",
" return pca.transform(img_wide[0])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 99
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def classify_image(data):\n",
" print \"called classify_image\"\n",
" preds = knn.predict(data)\n",
" preds = np.where(preds==1, \"check\", \"drivers_license\")\n",
" pred = preds[0]\n",
" return {\"image_label\": pred}"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 100
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from yhat import Yhat, YhatModel, preprocess"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 101
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class ImageClassifier(YhatModel):\n",
" REQUIREMENTS = [\n",
" \"PIL==1.1.7\"\n",
" ]\n",
" \n",
" def execute(self, data):\n",
" print \"called execute\"\n",
" img_string = data.get(\"image_as_base64_string\", None)\n",
" if img_string is None:\n",
" return {\"status\": \"error\", \"message\": \"data was None\", \"input_data\": data}\n",
" else:\n",
" img = string_to_img(img_string)\n",
" pred = classify_image(img)\n",
" return pred"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 102
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# authenticate\n",
"yh = Yhat(\"USERNAME\", \"YOUR API KEY\", \"http://cloud.yhathq.com/\")\n",
" \n",
"# upload model to yhat\n",
"yh.deploy(\"ImageClassifier\", ImageClassifier, globals())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"stream": "stdout",
"text": [
"Are you sure you want to deploy? (y/N): y\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Uploading model data\n",
"\r",
"[> ]"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-> ] 168/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--> ] 336/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---> ] 496/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----> ] 664/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----> ] 832/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------> ] 992/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------> ] 1160/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------> ] 1320/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------> ] 1488/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------> ] 1656/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------> ] 1816/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------> ] 1984/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------> ] 2144/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------> ] 2312/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------> ] 2480/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------> ] 2640/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------> ] 2808/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------> ] 2976/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------> ] 3136/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------> ] 3304/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------> ] 3464/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------> ] 3632/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------> ] 3800/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------> ] 3960/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------> ] 4128/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------> ] 4288/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------> ] 4456/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------> ] 4624/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------> ] 4784/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------> ] 4952/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------> ] 5120/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------> ] 5280/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------> ] 5448/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------> ] 5608/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------------> ] 5776/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------------> ] 5944/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------------> ] 6104/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------------> ] 6272/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------> ] 6432/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------------> ] 6600/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------------------> ] 6768/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------------------> ] 6928/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------------------> ] 7096/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------------------> ] 7256/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------------> ] 7424/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------------------> ] 7592/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------------------------> ] 7752/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------------------------> ] 7920/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------------------------> ] 8088/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------------------------> ] 8248/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------------------> ] 8416/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------------------------> ] 8576/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------------------------------> ] 8744/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------------------------------> ] 8912/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------------------------------> ] 9072/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------------------------------> ] 9240/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------------------------> ] 9400/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------------------------------> ] 9568/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-----------------------------------------------------------> ] 9736/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[------------------------------------------------------------> ] 9896/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[-------------------------------------------------------------> ] 10064/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[--------------------------------------------------------------> ] 10232/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------------------------------> ] 10392/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[---------------------------------------------------------------->] 10560/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\r",
"[----------------------------------------------------------------->] 10718/10718 KiB"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Model uploaded"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 103,
"text": [
"{u'lang': u'python',\n",
" u'message': u'Your model has been uploaded and is currently being built. You can check the status by logging into your Yhat account and viewing: /model/ImageClassifier/',\n",
" u'model_endpoint': u'/austin/models/ImageClassifier/',\n",
" u'modelname': u'ImageClassifier',\n",
" u'status': u'success',\n",
" u'timestamp': u'20150415074208',\n",
" u'version': 12}"
]
}
],
"prompt_number": 103
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# i don't have the image data set any more \n",
"# so just some dummy data to get it to work :(\n",
"new_image = open(\"/Users/hernamesbarbara/Desktop/img/1-plot-iris.png\", 'rb').read()\n",
"\n",
"#we need to make the image JSON serializeable\n",
"new_image = base64.encodestring(new_image)\n",
"\n",
"yh.predict(\"ImageClassifier\", {\"image_as_base64_string\": new_image})"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 105,
"text": [
"{u'result': {u'image_label': u'drivers_license'},\n",
" u'version': u'eb6cbff',\n",
" u'yhat_id': u'b90186db-450e-40e0-9b53-454a16f6fe2a',\n",
" u'yhat_model': u'ImageClassifier'}"
]
}
],
"prompt_number": 105
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment