{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import fastbook\n",
"fastbook.setup_book()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from fastbook import *\n",
"from fastai.vision.widgets import *\n",
"import skimage\n",
"from skimage import io as skio\n",
"import numpy\n",
"from PIL import Image, ImageEnhance"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"path =Path(\"D:/pytorch/data/2D_FishProcessor\")\n",
"Path.BASE_PATH =path\n",
"def name_to_hrs (r): return float(round(float(os.path.basename(r)[0:-4].split(\"_\")[1][1:])*(minutes/60)+5,2))\n",
"def validation_split (r): return os.path.basename(r)[0:-4].split(\"_\")[3] == \"R0003\" or os.path.basename(r)[0:-4].split(\"_\")[3] == \"R0006\"\n",
"def get_label_filename(name): return path/'labels'/f'{name.stem}_annotationLabels.tif'\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"\n",
"out_pl = widgets.Output()\n",
"out_pl_mask = widgets.Output()\n",
"lbl_pred = widgets.Label()\n",
"zebrafish_age_predictor = load_learner(path/'FishAge.pkl')\n",
"zebrafish_classifier = load_learner(path/'FishSegmentation.pkl')\n",
"btn_run = widgets.Button(description='Process')\n",
"def on_click_classify(change):\n",
" img = PILImage.create(btn_upload.data[-1])\n",
" out_pl.clear_output()\n",
" enhancer = ImageEnhance.Brightness(img)\n",
" factor = 10 \n",
" im_output = enhancer.enhance(factor)\n",
" with out_pl: display(im_output.to_thumb(256,256))\n",
" age,tensor, tensor=zebrafish_age_predictor.predict(img)\n",
" \n",
" pred,pred_idx,probs=zebrafish_classifier.predict(img)\n",
" with out_pl_mask: pred.show(alpha=1, vmin=0, vmax=3, title='mask')\n",
" lbl_pred.value = f'Predicted age: {age[0]};'\n",
"btn_run.on_click(on_click_classify)\n"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"btn_upload= widgets.FileUpload()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f6257adb42bc459facb3447be0ebc83d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(Label(value='Upload a grayscale zebrafish embryo image'), FileUpload(value={}, description='Upl…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"