發表文章

目前顯示的是有「opencv」標籤的文章

【YOLOv8】姿態(動作)識別_俯臥撐計數

圖片
  用 Ultralytics YOLOv8 Pose 模型(yolov8x-pose.pt)搭配 AIGym 解決方案模組,對影片中的人物進行姿態辨識與伏地挺身(push-up)動作計數。 up_angle:如果角度超過這個值,代表身體在「上推」階段 down_angle:如果角度低於這個值,代表身體在「下壓」階段 kpts=[5, 7, 9],分別是左肩(left shoulder)、左肘(left elbow)、左手腕(left wrist) 用這三個點計算手臂夾角,以判斷 push-up 是否完成一個動作。 偵測深蹲的話kpts 就可以類似改成 [11,13,15] https://github.com/Alimustoofaa/YoloV8-Pose-Keypoint-Classification?tab=readme-ov-file 測試程式 import cv2 from ultralytics import solutions MODEL_PATH = "yolov8x-pose.pt" #yolov8x-pose.pt , yolo11n-pose.pt VIDEO_PATH = "fuwocheng.mp4" gym = solutions . AIGym( model = MODEL_PATH, kpts = [ 5 , 7 , 9 ], # 指定關鍵點:左肩-左肘-左手 up_angle = 100 , down_angle = 80 , line_width = 2 , show = False ) cap = cv2 . VideoCapture(VIDEO_PATH) if not cap . isOpened(): print ( "Error: Could not open video." ) exit () # ===== 新增:控制視窗大小與位置 ===== window_name = "Processed Frame" cv2 . namedWindow(window_name, cv2 . WINDOW_NORMAL) cv...

【YOLOv8】物件偵測與識別測試

圖片
  Yolo V8使用 pytorch 開發的,因此這邊採用Pycharm Community開發工具。 並進行Pytorch下載引入 開發測試環境Windows 11 電腦 Acer Predator PH315-54-72VQ 電競筆記型電腦 https://store.acer.com/zh-tw/ph315-54-72vq 處理器:Intel® Core™ i7-11800H 記憶體:32GB DDR4 3200MHz Memory 硬碟:512GB PCIe NVMe SSD 顯卡:NVIDIA® GeForce RTX™ 3070 記得先在Pycharm創建好Project-based的venv,這邊採用Python3.8。 之後依序執行已下指令把Pytorch需要的給裝一裝,安裝對應 CUDA 11.8 的 PyTorch 套件。 不要採用Anaconda內建虛擬環境提供的不支援GPU的Pytorch。 電腦有GPU顯卡用這下載方式的指令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 --no-cache-dir 電腦無GPU顯卡只能用CPU跑用這下載方式的指令 pip install torch torchvision torchaudio --no-cache-dir YOLO在演進到6之後版本就交由ultralytics這間公司團隊繼續精進研發。 到了第八版算是成熟也十分多產品在使用的版本。(目前最新還有出到11的樣子) pip install ultralytics CUDA 與 cuDNN 的關係與角色 CUDA(Compute Unified Device Architecture) 是 NVIDIA 開發的一套平行運算平台與程式設計模型,底層是用 C/C++ 所實作,允許開發者撰寫程式碼,並將運算密集的任務交由 GPU(圖形處理器) 處理。 CUDA 提供一組 API,可以讓像 Python、C++ 等高階語言編寫的程式,透過 CUDA 將資料與任務分派到 GPU 執行。 當 Python 呼叫如 TensorFlow、PyTorch 等深度學習框架中的 GPU 運算時,其實是透過這些框架內部...

光照補償演算法

圖片
  由於光罩反光導致在OTSU二值化要去分割指針線 會有較長那端點誤判問題 使演算法較為不穩定 就用簡易版的原始影像通道分割後各自做值方圖均衡 再合併回來即可 原始灰度圖值方圖分布 補償後的效果

標籤消除演算處裡_使用通道分割與二值處裡

圖片
  由於標籤遮蔽導致指針線段偵測失真 只能先補預處裡 進行BGR顏色通道分割 紅色通道 藍色通道 綠色通道 Mat only_blue_label, only_red_label; only_red_label = gray_ori + blue; only_blue_label = gray_ori + red; Mat only_blue_label, only_red_label; //only_red_label = gray_ori + blue; //only_blue_label = gray_ori + red; only_red_label = gray_ori - blue; only_blue_label = gray_ori - red;

Yolo刻度訓練_搭配霍夫圓霍夫直線獲取_遮罩ROI二次擷取

圖片
 

Harris角點檢測

圖片
  程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include "opencv2/opencv.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/core.hpp" #include "opencv2/dnn.hpp" #include "opencv2/xfeatures2d/nonfree.hpp" #include "opencv2/features2d/features2d.hpp" #include <iostream> #include <fstream> #include<cmath> #include<string> #include <algorithm> using namespace std; using namespace cv; using namespace cv :: dnn; using namespace cv :: xfeatures2d; Mat src, gray_src, dst; int thrCornor = 140 ; int thrMax = 255 ; const char * output_title = "HarrisCorner Detect Result" ; void Harris_Process ( int , void * ); int main () { src = imread( "C:/img/2393662_orig.jpg" ); namedWindow( "src" , WINDOW_NOR...

Homography投影轉換

圖片
  程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 #include "opencv2/opencv.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/core.hpp" #include "opencv2/dnn.hpp" #include "opencv2/xfeatures2d/nonfree.hpp" #include "opencv2/features2d/features2d.hpp" #include <iostream> #include <fstream> #include<cmath> #include<string> #include <algorithm> using namespace std; using namespace cv; using namespace cv :: dnn; using namespace cv :: xfeatures2d; int main () { Mat img1 = imread( "C:/img/box.png" ,...