import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20cv2%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20requests%0A%0A%20%20%20%20notebook_dir%20%3D%20Path(__file__).resolve().parent%20if%20%22__file__%22%20in%20globals()%20else%20Path.cwd()%0A%20%20%20%20repo_root%20%3D%20notebook_dir.parents%5B1%5D%0A%20%20%20%20data_dir%20%3D%20repo_root%20%2F%20%22data%22%20%2F%20%22cv%22%20%2F%20%22opencv_tutorial%22%0A%20%20%20%20data_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%0A%20%20%20%20opencv_ref%20%3D%20%224.11.0%22%0A%20%20%20%20asset_urls%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22lena.jpg%22%3A%20f%22https%3A%2F%2Fraw.githubusercontent.com%2Fopencv%2Fopencv%2F%7Bopencv_ref%7D%2Fsamples%2Fdata%2Flena.jpg%22%2C%0A%20%20%20%20%20%20%20%20%22haarcascade_frontalface_default.xml%22%3A%20f%22https%3A%2F%2Fraw.githubusercontent.com%2Fopencv%2Fopencv%2F%7Bopencv_ref%7D%2Fdata%2Fhaarcascades%2Fhaarcascade_frontalface_default.xml%22%2C%0A%20%20%20%20%20%20%20%20%22haarcascade_eye.xml%22%3A%20f%22https%3A%2F%2Fraw.githubusercontent.com%2Fopencv%2Fopencv%2F%7Bopencv_ref%7D%2Fdata%2Fhaarcascades%2Fhaarcascade_eye.xml%22%2C%0A%20%20%20%20%7D%0A%20%20%20%20return%20asset_urls%2C%20cv2%2C%20data_dir%2C%20mo%2C%20plt%2C%20requests%0A%0A%0A%40app.cell%0Adef%20_(data_dir%2C%20requests)%3A%0A%20%20%20%20def%20ensure_download(file_name%3A%20str%2C%20url%3A%20str)%3A%0A%20%20%20%20%20%20%20%20destination%20%3D%20data_dir%20%2F%20file_name%0A%20%20%20%20%20%20%20%20if%20destination.exists()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20destination%0A%20%20%20%20%20%20%20%20response%20%3D%20requests.get(url%2C%20timeout%3D30)%0A%20%20%20%20%20%20%20%20response.raise_for_status()%0A%20%20%20%20%20%20%20%20destination.write_bytes(response.content)%0A%20%20%20%20%20%20%20%20return%20destination%0A%0A%20%20%20%20return%20(ensure_download%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20OpenCV%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%0A%0A%20%20%20%20Colab%20%E5%9B%BA%E6%9C%89%E3%81%AE%20%60cv2_imshow()%60%20%E3%82%84%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E6%93%8D%E4%BD%9C%E3%81%AF%E4%BD%BF%E3%82%8F%E3%81%9A%E3%80%81%E5%9B%BA%E5%AE%9A%20URL%20%E3%81%8B%E3%82%89%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E7%94%BB%E5%83%8F%E3%82%92%0A%20%20%20%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%A6%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(asset_urls%2C%20ensure_download)%3A%0A%20%20%20%20downloaded_assets%20%3D%20%7B%0A%20%20%20%20%20%20%20%20file_name%3A%20ensure_download(file_name%2C%20url)%0A%20%20%20%20%20%20%20%20for%20file_name%2C%20url%20in%20asset_urls.items()%0A%20%20%20%20%7D%0A%20%20%20%20return%20(downloaded_assets%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E7%94%BB%E5%83%8F%E3%81%AE%E8%A1%A8%E7%A4%BA%0A%0A%20%20%20%20OpenCV%20%E3%81%AF%20BGR%E3%80%81matplotlib%20%E3%81%AF%20RGB%20%E3%81%8C%E6%97%A2%E5%AE%9A%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cv2%2C%20downloaded_assets%2C%20plt)%3A%0A%20%20%20%20image_bgr%20%3D%20cv2.imread(str(downloaded_assets%5B%22lena.jpg%22%5D))%0A%20%20%20%20if%20image_bgr%20is%20None%3A%0A%20%20%20%20%20%20%20%20raise%20RuntimeError(%22Failed%20to%20load%20lena.jpg%22)%0A%20%20%20%20figure_bgr%2C%20axis_bgr%20%3D%20plt.subplots(figsize%3D(4%2C%204))%0A%20%20%20%20axis_bgr.imshow(image_bgr)%0A%20%20%20%20axis_bgr.set_title(%22BGR%20%E3%81%AE%E3%81%BE%E3%81%BE%20matplotlib%20%E3%81%B8%E6%B8%A1%E3%81%97%E3%81%9F%E4%BE%8B%22)%0A%20%20%20%20axis_bgr.axis(%22off%22)%0A%20%20%20%20figure_bgr%0A%20%20%20%20return%20(image_bgr%2C)%0A%0A%0A%40app.cell%0Adef%20_(cv2%2C%20image_bgr%2C%20plt)%3A%0A%20%20%20%20image_rgb%20%3D%20cv2.cvtColor(image_bgr%2C%20cv2.COLOR_BGR2RGB)%0A%20%20%20%20figure_rgb%2C%20axis_rgb%20%3D%20plt.subplots(figsize%3D(4%2C%204))%0A%20%20%20%20axis_rgb.imshow(image_rgb)%0A%20%20%20%20axis_rgb.set_title(%22RGB%20%E3%81%B8%E5%A4%89%E6%8F%9B%E5%BE%8C%22)%0A%20%20%20%20axis_rgb.axis(%22off%22)%0A%20%20%20%20figure_rgb%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Haar-cascade%20%E3%81%AB%E3%82%88%E3%82%8B%E9%A1%94%E3%83%BB%E7%9C%BC%E6%A4%9C%E5%87%BA%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cv2%2C%20downloaded_assets)%3A%0A%20%20%20%20face_cascade%20%3D%20cv2.CascadeClassifier(str(downloaded_assets%5B%22haarcascade_frontalface_default.xml%22%5D))%0A%20%20%20%20eye_cascade%20%3D%20cv2.CascadeClassifier(str(downloaded_assets%5B%22haarcascade_eye.xml%22%5D))%0A%20%20%20%20if%20face_cascade.empty()%20or%20eye_cascade.empty()%3A%0A%20%20%20%20%20%20%20%20raise%20RuntimeError(%22Failed%20to%20load%20Haar%20cascade%20assets.%22)%0A%20%20%20%20return%20eye_cascade%2C%20face_cascade%0A%0A%0A%40app.cell%0Adef%20_(cv2%2C%20eye_cascade%2C%20face_cascade%2C%20image_bgr%2C%20plt)%3A%0A%20%20%20%20image_gray%20%3D%20cv2.cvtColor(image_bgr%2C%20cv2.COLOR_BGR2GRAY)%0A%20%20%20%20annotated_bgr%20%3D%20image_bgr.copy()%0A%20%20%20%20faces%20%3D%20face_cascade.detectMultiScale(image_gray%2C%20scaleFactor%3D1.3%2C%20minNeighbors%3D5)%0A%20%20%20%20for%20x_coord%2C%20y_coord%2C%20width%2C%20height%20in%20faces%3A%0A%20%20%20%20%20%20%20%20cv2.rectangle(annotated_bgr%2C%20(x_coord%2C%20y_coord)%2C%20(x_coord%20%2B%20width%2C%20y_coord%20%2B%20height)%2C%20(255%2C%200%2C%200)%2C%202)%0A%20%20%20%20%20%20%20%20roi_gray%20%3D%20image_gray%5By_coord%3Ay_coord%20%2B%20height%2C%20x_coord%3Ax_coord%20%2B%20width%5D%0A%20%20%20%20%20%20%20%20roi_bgr%20%3D%20annotated_bgr%5By_coord%3Ay_coord%20%2B%20height%2C%20x_coord%3Ax_coord%20%2B%20width%5D%0A%20%20%20%20%20%20%20%20eyes%20%3D%20eye_cascade.detectMultiScale(roi_gray)%0A%20%20%20%20%20%20%20%20for%20eye_x%2C%20eye_y%2C%20eye_w%2C%20eye_h%20in%20eyes%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20cv2.rectangle(roi_bgr%2C%20(eye_x%2C%20eye_y)%2C%20(eye_x%20%2B%20eye_w%2C%20eye_y%20%2B%20eye_h)%2C%20(0%2C%20255%2C%200)%2C%202)%0A%0A%20%20%20%20figure_detect%2C%20axis_detect%20%3D%20plt.subplots(figsize%3D(4%2C%204))%0A%20%20%20%20axis_detect.imshow(cv2.cvtColor(annotated_bgr%2C%20cv2.COLOR_BGR2RGB))%0A%20%20%20%20axis_detect.set_title(f%22faces%3D%7Blen(faces)%7D%22)%0A%20%20%20%20axis_detect.axis(%22off%22)%0A%20%20%20%20figure_detect%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
1b5f8d8ece1c43e20cdfce0de125ab02