Project Submission Instructions ========================= ===== Project Setup ===== ========================= This section describes how to set up your development environment for this class, and how to setup your project for later submission. === Development Environment Setup === There are two different ways to setup environment. Option 1. Conda (recommended) For those who have installed, or plan to install anaconda or miniconda, install anaconda/miniconda and run commands below: conda create -n cs445 python=3.7 conda activate cs445 conda install -y numpy scipy opencv matplotlib jupyter Note that you don't have to use cs445 as your environment name. Option 2. pip For those who don't want to use anaconda or miniconda based python, we also provide requirements.txt for pip based packages. Those choosing this option need to install OpenCV 3+/4. To install dependent python packages, run: pip install -r requirements.txt === Running Jupyter Notebook Local Server === Working on Project with Jupyter Notebook We extensively use Jupyter Notebook (https://jupyter.org/) for our projects. For more information about Jupyter, please refer to the documentation and tutorial page of the Jupyter Webpage. To use Jupyter notebook use your favorite terminal to run: cd YOUR_PROJECT_DIRECTORY jupyter notebook Then, your default browser will open up a page that contains files in that directory. Typically, the page will be opened on localhost:8888/tree. === Understanding Notebook Kernel === Each notebook in Jupyter Notebook Local Server is associated with a Kernel. Whenever a new Notebook is created or opened, the Kernel, a python subprocess is created that contains variables and functions that the Notebook will evaluate. For instance, running foo = 3 makes variable foo to be stored in the subprocess memory. Each Kernel can be shutdown, freeing the subprocess and making the Notebook inactive. You can always reactivate Kernels by using Kernels => Restart button on the notebook menu. If there are multiple connections to same notebook, there can be collision of kernel processes. It is generally not recommended to run multiple instances of same notebook. === Creating new Notebook === You can click New button on right top corner of the opened page, and click Python 3 to create new notebook. If you go back to localhost:8888/tree, you will notice that there is a new file created, with Green Book icon. Green indicates that the notebook kernel is active. Each Notebook file has the "ipynb" extension. ** Opening Existing Notebook ** To open existing notebook, click on ipynb files under localhost:8888/tree. If the notebook kernel was not active, it will be active as you open it. If the notebook kernel was already active, it will connect to the existing kernel. ** Clearing / Resetting notebook ** You can clear notebook kernel by pressing restart button or Kernel => Restart button. This will wipe out varibles stored in memory in Kernel, and start new subprocess. ** Running code on Notebook ** To run active code block on Jupyter Notebook, you can simply do Ctrl + Enter (CMD + Enter for mac). To run and select next code block, you can click on Run button or do shift + Enter. Code under Code block will be evaluated, and variables at the top level scope will be kept in memory. ** Closing Notebook Local Server ** You can prompt shutdown notebook server by pressing ctrl + c in terminal that is running Jupyter Notebook Local Server. ** Visualizing Images on Notebook ** We recommend using matplotlib (https://matplotlib.org/) for visualizing your results on notebook. Matplotlib can show OpenCV (https://docs.opencv.org/master/) and PIL (https://www.pythonware.com/products/pil/) images on the browser. This is very useful for debugging purposes. import matplotlib.pyplot as plt %matplotlib inline # or `%matplotlib notebook` for interactive plotting from PIL import Image import cv2 # read image using PIL and OpenCV library image_1 = Image.open(PATH_TO_IMAGE) image_2 = cv2.imread(PATH_TO_OTHER_IMAGE) ... # Display image on notebook fig, axes = plt.subplots(2, 2) axes[0, 0].imshow(image_1) axes[0, 1].imshow(image_2) axes[1, 0].imshow(image_3) axes[1, 1].imshow(image_4) ============================== ===== Project Submission ===== ============================== Submit your report, notebook, and code via Coursera. Don't forget to put expected points at the end of the report. Report PDF: This does not need to be a comprehensive report. Include your results and any parameters or special things that you tried. It should be sufficiently clear so that the professor, TAs, and other students can easily understand what your results mean and how you got them. You don't need to include a lengthy introduction or detailed description. At the end of your report, say how many points you expect to receive for the regular assignment (up to 100) and any extra points from bells and whistles. This will help to avoid misunderstandings. Comments in the grade will explain the difference in the actual grade from your expectation. The report can be created with any editor such as Word, LaTeX, or a web page editor and then saved as PDF. Notebook PDF: Projects will be mainly done in Jupyter Notebook (https://jupyter.org/) using Python3 kernels. Once finished, re-run all the cells to make sure they work and print your notebook to .pdf. We recommend you run Kernel => Restart Kernel and Run All Cells function before submission. Code: Zip the code and images in a file called NETID_proj#.zip, where NETID is your net id. You need to submit both the .zip file and the associated notebook NETID_proj#.pdf file. Do not include large result files in this zip. === Additional Notes === Reminder: - The core 100 points for each project are required and worth a 10% of class grade per project - Cumulatively across the five projects, you must do 75 points of Bells and Whistles, worth 5% of class grade - You cannot get extra credit for doing extra bells and whistles, but we will still note and grade them Tips and tricks from TA - For Windows users, we recommend using 'cmder', which contains prebuilt bash compliant command prompt.