使用gstreamer和opencv實時識別LED數碼管數字的測試demo(QT)

效果演示:

效果1:靜態識別

效果2:動態實時識別

        可以看到,雖然不太穩定,但是好歹還是識別出來了的,就是需要調參,然鵝我不是專業的,目前還沒有調好。。。  T_T  先這樣吧。以后再說。

        覺得文章質量可以的,請點個贊哦,謝謝。

前言

        最近需要完成使用opencv識別攝像頭的LED數字,說實話,這個方向之前從來沒有搞過,大概就類似這種:

        

        這種是最理想的情況,但是實際上可能有非常多的噪點,比如:

        以上這種情況,還算好了,實際的情況,可能更加復雜,目前先用這種情況的來識別:

方案研究

        因為要求在不能聯網的情況之下進行識別,而且識別的又是LED數字,不是英文和普通數字,那么就需要自己訓練模型。

        自己訓練模型的話,要么是機器學習,要么是深度學習。 考慮到深度學習比較繁瑣,我這個功能相對比較簡單,使用機器學習的話,應該就可以實現。但是機器學習有很多的模型和算法,從網上搜集資料,發現使用KNN算法是可以實現的。最原始是借鑒的是手寫數字識別,后來發現有別人大概準備好的LED識別的demo,于是結合之前的知識,實現了大概的demo,效果如下:

        

項目測試demo源碼

效果1:靜態識別

  1. 準備訓練素材:

          我的路徑是:/home/enpht/test/下 ,會防止一個samples/ 文件夾:訓練素材是網上下載的,這里我分享出來: 123網盤鏈接:

 opencv和KNN識別LED數字官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤

        將其中的 “knn_test.zip” 解壓,將samples文件夾放在指定目錄下即可。如果大家用戶名跟我不一樣,可以在代碼中修改

   2.pro文件: 新增opencv環境

如果沒有安裝opencv,請參考我上一篇文章:OpenCV運行gstreamer管道獲取相機數據,處理以后,再交給gstreamer顯示(QT實現)-CSDN博客

CONFIG      += link_pkgconfig
PKGCONFIG   += opencv4
LIBS        += -L/usr/lib/x86_64-linux-gnu/ -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio
INCLUDEPATH += /usr/include/opencv4/opencv2
INCLUDEPATH += /usr/include/opencv4/

    3.main.cpp

注意:大家的路徑,需要在changename和get_name函數中的路徑


#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/ml/ml.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
using namespace cv::ml;
bool cmp(const Rect &a, const Rect &b);
vector<Mat> get_mats(Mat mt);
bool has_Point(Mat mt);
int main(){string changename(int i,int j);string get_name(int i);Mat traindata, train_label, tmp;for (int j = 0; j < 10; j++){for (int i = 0; i < 40; i++){string name = changename(j,i);//cout << name << endl;tmp = imread(name, 0);resize(tmp, tmp, Size(75, 125));traindata.push_back(tmp.reshape(0, 1));train_label.push_back(j);}}traindata.convertTo(traindata, CV_32F);Ptr<TrainData> tData = TrainData::create(traindata, ROW_SAMPLE, train_label);Ptr<KNearest> knn = KNearest::create();knn->setDef

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697528.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

yum方式快速安裝mysql

問題描述 使用yum的方式簡單安裝了一下mysql&#xff0c;對過程進行簡單記錄。 步驟 ①安裝wget和vim sudo yum -y install wget vim②下載mysql的rpm包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm③升級和更新rpm包 sudo rpm -Uv…

ElementUI組件的安裝和使用

Element UI 是一款基于 Vue 2.0 的桌面端組件庫&#xff0c;主要用于快速構建網站的前端部分。它提供了豐富的組件&#xff0c;如按鈕、輸入框、表格、標簽頁等&#xff0c;以及一些布局元素&#xff0c;如布局容器、分割線等。Element UI 的設計風格簡潔&#xff0c;易于上手&…

【前端素材】推薦優質后臺管理系統Airmin平臺模板(附源碼)

一、需求分析 系統定義 后臺管理系統是一種用于管理和監控網站、應用程序或系統的在線工具。它通常是通過網頁界面進行訪問和操作&#xff0c;用于管理網站內容、用戶權限、數據分析等。后臺管理系統是網站或應用程序的控制中心&#xff0c;管理員可以通過后臺系統進行各種管…

第四十二回 假李逵翦徑劫單身 黑旋風沂嶺殺四虎-python讀寫csv和json數據

李逵答應了宋江三件事&#xff1a;不可吃酒&#xff0c;獨自前行&#xff0c;不帶板斧。李逵痛快答應了&#xff0c;挎一口腰刀&#xff0c;提著樸刀&#xff0c;帶了一錠大銀子&#xff0c;三五個小銀子就下山去了。 宋江放心不下&#xff0c;于是請同鄉朱貴也回家一趟&#…

arcgisPro制圖輸出

1、設置地圖底圖 2、導入數據 3、 設置圖形顏色&#xff0c;如下&#xff1a;右鍵“浙江省”數據層&#xff0c;選擇符號系統 4、在右側可看到打開的符號系統欄&#xff0c;進行如下設置: 5、移除“其他所有值”項&#xff0c;如下&#xff1a; 6、設置圖形輪廓&#xff0c;如下…

【MATLAB】CEEMD_ MFE_SVM_LSTM 神經網絡時序預測算法

有意向獲取代碼&#xff0c;請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 CEEMD_MFE_SVM_LSTM神經網絡時序預測算法是一種結合了多種先進技術的復雜預測方法&#xff0c;旨在提高時序預測的準確性和穩定性。下面是對該算法的詳細介紹&#xff1a; CEEMD&#xff…

ES項目應用

配置: ES存儲了2-3億條&#xff0c;幾百GB ES集群有5 個節點 2主2副 ES返回數據量窗口大小設置 index.max_result_window 深度翻頁 1.from size 方式 2.scroll相當于維護了一份當前索引段的快照信息&#xff0c;這個快照信息是你執行這個scroll查詢時的快照。在這個查詢后的任…

kali虛擬機橋接模式快速設置

第一步&#xff1a;選擇 虛擬機 > 設置 > 虛擬機設置&#xff0c;設置橋接模式 不選擇復制物理網絡連接狀態選項&#xff1a; 如果采用DHCP的方式來分配IP地址&#xff0c;當電腦網絡從有線或無線網絡之間進行移動時&#xff0c;DHCP會重新分配ip地址&#xff0c;即虛擬機…

泰迪智能科技大模型數據智能實驗室

自2022年11月ChatGPT問世以來&#xff0c;大模型開始備受關注&#xff0c;科技巨頭們紛紛推出大模型實驗室解決方案。大模型的價值不知在于互聯網場景&#xff0c;而在于大模型能力垂直化&#xff0c;能夠與具體的業務需求深度融合。 大模型實驗室是在學校現有的實驗室建設基礎…

leetcode hot100 買賣股票的最佳時機1

本題之前采用貪心算法來解決&#xff0c;現在可以采用動態規劃來解決&#xff0c;通過dp數組記錄每次的狀態從而獲取到最大的利潤。 這里dp數組定義為二維數組 dp[price.length][2]&#xff0c;其中price.length表示第i天&#xff0c;[2]其中有0/1兩種狀態&#xff0c;[0]表示…

六、回歸與聚類算法 - 欠擬合和過擬合

目錄 1、定義 2、原因及解決方法 2.1 正則化 線性回歸欠擬合與過擬合線性回歸的改進 - 嶺回歸分類算法&#xff1a;邏輯回歸模型保存與加載無監督學習&#xff1a;K-means算法 1、定義 2、原因及解決方法 2.1 正則化

電路設計(26)——速度表的multisim仿真

1.設計要求 設計一款電路&#xff0c;能夠實時顯示當前速度。 用輸入信號模擬行駛的汽車&#xff0c;信號頻率的1hz代表汽車速度的1m/s。最后速度顯示&#xff0c;以km/h為單位。 2.電路設計 當輸入信號頻率為40HZ時&#xff0c;顯示的速度應該為144KM/h&#xff0c;仿真結果為…

HTTP基本概念-HTTP 常見的狀態碼有哪些?

資料來源 : 小林coding 小林官方網站 : 小林coding (xiaolincoding.com) HTTP 常見的狀態碼有哪些? 1xx 類狀態碼屬于提示信息&#xff0c;是協議處理中的一種中間狀態&#xff0c;實際用到的比較少。 2xx 類狀態碼表示服務器成功處理了客戶端的請求&#xff0c;也是我們最愿…

第一個 Angular 項目 - 添加服務

第一個 Angular 項目 - 添加服務 這里主要用到的內容就是 [Angular 基礎] - service 服務 提到的 前置項目在 第一個 Angular 項目 - 動態頁面 這里查看 想要實現的功能是簡化 shopping-list 和 recipe 之間的跨組件交流 回顧一下項目的結構&#xff1a; ? tree src/app/…

[概念區分] 正則表達式與正則化

正則表達式與正則化 機器學習在計算機科學和數據處理領域&#xff0c;關于“正則”的兩個術語&#xff1a;正則表達式和正則化&#xff0c;雖然它們在名稱上非常相似&#xff0c;但實際上它們是完全不同的概念。 正則表達式 也被稱為 regex&#xff0c;是一種強大的工具&…

Linux freezer機制

一、概述 系統進入suspended或進程被加入到cgroup凍結或解凍分組&#xff0c;用戶進程和部分內核線程被凍結后&#xff0c;會剝奪執行cpu資源&#xff0c;解凍或喚醒后恢復正常。 二、進程凍結與解凍原理 2.1 進程凍結 用戶進程和內核線程凍結的基本流程&#xff1a; 內核態…

設計模式-建造者模式(Builder Pattern)

一、建造者模式說明 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;它的主要目的是將一個復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 在建造者模式中&#xff0c;通常涉及以下幾個角色&#xf…

多業務場景下對于redis分布式鎖的一些思考

現在讓你寫一個Redis分布式鎖 大概率你會先寫一個框架 public Boolean setIfAbsent(String key, Object value,Long timeout) {try {return Boolean.TRUE.equals(objectRedisTemplate.opsForValue().setIfAbsent(key, value,timeout,TimeUnit.SECONDS));} catch (Exception e) …

2024開年,手機廠商革了自己的命

文&#xff5c;劉俊宏 編&#xff5c;王一粟 2024開年&#xff0c;AI終端的號角已經由手機行業吹響。 OPPO春節期間就沒閑著&#xff0c;首席產品官劉作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式進入AI手機時代。隨后在開年后就緊急召開了AI戰略發布會&#xff0c;…

【Antd】Form 表單獲取不到 Input 的值

文章目錄 今天遇到了一個奇怪的bug&#xff0c;Form表單中的Input組件的值&#xff0c;不能被Form獲取&#xff0c;導致輸入了內容&#xff0c;但是表單提交的時候值為undefined 報錯代碼 import { Button, Form, Input } from antd; import React from react;const App: Rea…