JupyterNotebook应该很多同学都或多或少的熟悉,但是很多同学还停留在Python,数据分析,交互开发上。其实除了这些,JupyterNotebook还可以完成很多意想不到的事情。例如Python工具包开发,制作幻灯片,制作电子书,写博客,写报告,数据仪表盘,RESTAPIs,web应用等。以web应用为例,说到开发web应用,很多同学都会想到第一印象了解前端、后端、服务部署的繁琐步骤,需要html、JavaScript、Java、Python、Django知识。事实上,可以通过JupyterNotebook开发可部署的Web应用程序。下面以一个图像处理Web应用程序为例来给大家展示一下。准备工作在正式开发之前,首先要做好开发环境配置、Python工具包等基础准备工作。环境配置创建一个虚拟环境,该环境单独用于此Web应用程序。虚拟环境的好处是可以实现不同应用之间的环境隔离,避免不同项目/应用依赖不同版本的工具包造成的冲突。virtualenvsketchenvsourcesketchenv/bin/activate其中sketchenv是虚拟环境的名称,你也可以给它起另一个名字。在安装工具包下面,根据开发web应用的需要,有一些工具包:mljar-mercuryopencv-python-headlesspillowmatplotlib其中mercury是一个可以将jupyternotebooks转换成web应用的框架,其余的是图像处理工具包.正式启动后,将正式启动开发工具。首先,打开一个JupyterNotebook窗口:jupyternotebook然后导入一些需要用到的Python工具包,并对图像进行初始设置:figsize']=(12,12)mpl.rcParams['axes.grid']=False在JupyterNotebook中打开一个新的单元格,输出以下代码,记住你需要打开一个新的,而不是代码othercells全部放在一起:image_path="/home/jackpop/Downloads/house.jpg"output_dir="output_images"image_path是要处理的图片的路径,output_dir是保存处理后的新图片的目录名。在下一个单元中,将定义一个显示图像的函数:defimshow(image,title=None,fname=None):iflen(image.shape)>3:image=tf.squeeze(image,axis=0)plt.imshow(image)plt.axis('off')iftitle:plt.title(title)iffname:plt.savefig(fname)然后,加载图像并显示:img=cv2.imread(image_path)RGB_img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)imshow(RGB_img)你会看到下图:现在开始处理图像,生成艺术素描图像:#Imageconversiongrayed=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)inverted=cv2.bitwise_not(grayed)blurred=cv2.GaussianBlur(inverted,(19,19),sigmaX=0,sigmaY=0)defblend(x,y):返回cv2.divide(x,255-y,scale=256)final_result=blend(grayed,blurred)#saveimage_=cv2.imwrite(os.path.join(output_dir,"sketch_photo.jpg"),final_result)#显示图像RGB_img=cv2.cvtColor(final_result,cv2.COLOR_BGR2RGB)imshow(RGB_img)处理后,会看到如下图:此时,核心代码已经完成,并且已经有了JupyterNotebook代码,那么如何编写web应用程序呢?这使用了之前安装的工具包mercury,它可以将JupyterNotebook转换为Web应用程序,如前所述。首先执行以下命令:mercurywatchsketch_app.ipynb在浏览器中打开http://127.0.0.1:8000/链接,会看到一个卡片,如下图:警告消息,告诉您缺少YAML标头。这里涉及到一个在Mercury中比较重要的东西,配置信息,这是一个yaml格式的配置信息,主要包括标题,配置参数等。接下来在JupyterNotebook的开头创建一个RAW格式的unit,并输入相关的yaml配置信息:---title:ConvertPhototoSketch
