[小專案] 自動辨識藥丸數量的網站

前言 前陣子我的藥師朋友經常需要手動計數藥丸,以便進行包藥作業.這個過程既耗時又容易出錯。為了解決這一問題,我幫他設計了一個簡單的應用程式,使用 YOLOv8 模型來自動識別並計算照片中藥丸的數量,從而快速提供準確的結果 專案說明 專案的詳細介紹我把他整理到 Notion 上,裏面有更詳細的說明 Ref: GitHub Repo 系統架構 這個專案需求非常簡單,其實單純一個 Monolithic 的架構就可以應付,但為了練習看看微服務(Micro service)的切分,就嘗試將不同的功能切分成不同的服務,彼此用 Restful API 溝通 Tech Stack 簡單列一下使用到的技術 Backend Python(FastAPI) Node.js(Express) written in TypeScript Auth JWT Google Auth Redis AI Model YOLOv8 Label-Studio (Labeling Tool) Frontend React written in TypeScript PWA Storage PostgreSQL (database) Minio (Image storage) 心得 這是第一次嘗試 React 的 PWA,用 service worker 滿直覺也滿簡單的,配置一下部署到 Netlify 上,就可以把網站下載到手機桌面上充當一個 APP 使用 這是第一次嘗試 Yolov8 的模型,並使用 Label-Studio 工具作為標註,使用起來相當直覺,當有多人需要同時標註時,簡單在電腦啟動 server,然後用 ngrok 臨時建個 tunnel,開放給別人一起標註...

<span title='2024-07-29 15:50:04 +0800 +0800'>July 29, 2024</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;214 words&nbsp;·&nbsp;Madi

FastAPI 該用 async def 還是 def?

前言 FastAPI 是近幾年繼 Flask 之後更火紅的 Python web server,不僅能自動生成 OpenAPI-Swagger 的 API 文件,也增加了類似 Node.js 的 Async 異步機制,大幅的提升效能.儼然已成為 Python 開 API 的不二人選.但使用上有踩到 def 與 async def 的陷阱,所以有了這篇文章來解釋遇到的問題 Concurrency vs Parallelism 開始以前先複習一下,這兩個名詞是不等價的,描述的是不同的併發狀況 Concurrency 單一時間點,單一 worker 一次只做一件事情,但會交錯切換來完成任務,旨在快速處理任務 ex: 一個廚師同時切換工作項目來料理,如: 切菜, 煮飯, 燒水 多以 Thread 或 Async IO 來達成,因為 IO bound 的 task 更適合,例如: network 的連線等待或 file 的讀取 Parallelism 單一時間點,有多個 worker 會同時做多件事情,所以並行的執行任務,旨在處理更多的任務 ex: 銀行櫃檯有多個窗口,並行的處理任務 多以 Multiple Process 來達成,因為 CPU bound 的 task 更適合,例如: 大量耗時的 Machine Learning 矩陣計算 圖片來源: Async IO in Python: A Complete Walkthrough – Real Python...

<span title='2023-03-28 19:49:13 +0800 +0800'>March 28, 2023</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;651 words&nbsp;·&nbsp;Madi