国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Yolov5實現(xiàn)視頻中的指針式儀表讀數(shù) [python]

這篇具有很好參考價值的文章主要介紹了Yolov5實現(xiàn)視頻中的指針式儀表讀數(shù) [python]。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Yolov5實現(xiàn)視頻中的指針式儀表讀數(shù) [python]

背景:根據(jù)巡航機器人拍攝的視頻,讀出其中兩個電流表和兩個電壓表的度數(shù)。

Yolov5

Yolov5的star數(shù)高達37.5k,是Yolo系列最為經(jīng)典的版本。本項目在Yolov5 v5.0的基礎(chǔ)上進行修改,來實現(xiàn)指針式儀表的讀數(shù)功能。

prepare

數(shù)據(jù)集:對機器人拍攝的視頻進行抽幀標注。
標注工具:labelImg
預(yù)訓(xùn)練權(quán)重:yolov5s.pt
環(huán)境:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

指針式儀表

整體思路

注:(train過程省略)

  1. 通過sftp協(xié)議從服務(wù)器下載機器人拍攝的視頻;
  2. 當同時檢測到四個表時才進行保存;
  3. 表的位置確定:通過重新排列label標簽標注表的位置(0、1、2、3);
  4. 找到檢測過程中最清晰的四張表:通過分別計算各個表的Laplacian,得到最清晰的表圖像;
  5. 在檢測完畢時,將最清晰的四張表存放在clock文件夾中;
  6. 利用OpenCV中的Canny算子進行圖像的邊緣檢測,識別指針和零刻度線,計算角度得出度數(shù)。
  7. 通過接口發(fā)送到服務(wù)器。
1. 從遠程服務(wù)器下載視頻

getVideo:

import paramiko
import os
# 從服務(wù)器獲取視頻
HOST_IP = '10.16.42.172'  # 服務(wù)器地址
PORT = 8989  // 端口
REMOTE_PATH = '/home/eini/SG/water'  # 視頻在服務(wù)器的位置
REMOTE_FILENAME = 'cut4.mp4'  # 文件名
LOCAL_PATH = './video'  # 存放本地位置
USERNAME = 'root'  # 登錄服務(wù)器用戶名
PASSWORD = '123456'  # 登錄服務(wù)器密碼

def remote_scp(host_ip, remote_path, local_path, file_name, username, password):
    t = paramiko.Transport((host_ip, PORT))
    t.connect(username=username, password=password)  # 登錄遠程服務(wù)器
    sftp = paramiko.SFTPClient.from_transport(t)  # sftp傳輸協(xié)議
    src = remote_path + '/' + file_name
    des = local_path + '/' + file_name
    sftp.get(src, des)
    t.close()

detect.py:

parser.add_argument('--host_ip', default='10.16.42.172', help='')
parser.add_argument('--port', default=8989, help='')
parser.add_argument('--remote_path', default='/home/eini/SG/water', help='')
parser.add_argument('--remote_filename', default='cut1.mp4', help='')
parser.add_argument('--local_path', default='./video', help='')
parser.add_argument('--username', default='root', help='')
parser.add_argument('--password', default='123456', help='')
remote_scp(opt.host_ip, opt.remote_path, opt.local_path, opt.remote_filename, opt.username, opt.password)
2. 檢測儀表

設(shè)置變量num_clock記錄當前檢測目標的數(shù)目,當if num_clock == 4:時進行后續(xù)操作。

3. 重新排列l(wèi)abel標簽

此操作是為了對四個表進行標號,根據(jù)label標簽中的x坐標,從左到右將儀表標為(0、1、2、3)。
detcet.py:

# txt_path用來存放標簽信息的文件夾
sorted_label_path = txt_path + '_sorted' + '.txt'
with open(label_path, 'r') as first_file:
    rows = first_file.readlines()
    sorted_rows = sorted(rows, key=lambda x: float(x.split()[1]), reverse=False)
    with open(sorted_label_path, 'w') as second_file:
        for row in sorted_rows:
            second_file.write(row)

labels文件夾
指針儀表數(shù)據(jù)集,python,YOLO,人工智能
cut1_64.txt注:一共有5列信息,分別為 class、x、y、w、h
指針儀表數(shù)據(jù)集,python,YOLO,人工智能
cut1_64_sorted.txt
指針儀表數(shù)據(jù)集,python,YOLO,人工智能

4. 計算拉普拉斯算子,得到最清晰的四張表

注:這個步驟也可以通過直接計算長和寬像素值進行代替

# 事先聲明清晰度數(shù)組,用來存放比較清晰度值
sharpness_original = [0, 0, 0, 0]  # 清晰度數(shù)組


# 讀取圖像
cv2.imwrite(filename_last, roi)
# 計算清晰度
img = cv2.imread(filename_last)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sharpness = cv2.Laplacian(gray, cv2.CV_64F).var()
print("清晰度值:", sharpness, sharpness_original[n])
if sharpness > sharpness_original[n]:
    sharpness_original[n] = sharpness
    cv2.imwrite(clock_name, roi)
5. 檢測完畢后的四張表

將清晰度最高的四張表存放在clock文件夾中,以便于后續(xù)讀數(shù)。
指針儀表數(shù)據(jù)集,python,YOLO,人工智能

6. 讀數(shù)

注:本項目中的儀表刻度盤為不均勻分布,后續(xù)需要對角度劃分進行優(yōu)化。
將儀表內(nèi)邊框的上邊線作為零刻度線的輔助線,通過計算輔助線與指針之間的夾角計算度數(shù)

電壓表讀數(shù):

def reading_V(img):
    k1 = 0
    k2 = 0
    W = Image.open(img).width
    H = Image.open(img).height
    img = cv2.imread(img)
    kernel = np.ones((6, 6), np.float32) / 25
    gray_cut_filter2D = cv2.filter2D(img, -1, kernel)
    gray_img = cv2.cvtColor(gray_cut_filter2D, cv2.COLOR_BGR2GRAY)
    ret, thresh1 = cv2.threshold(gray_img, 180, 255, cv2.THRESH_BINARY)
    tm = thresh1.copy()
    test_main = tm[int(W / 25):int(W * 23 / 25), int(H / 25):int(H * 23 / 25)]
    edges = cv2.Canny(test_main, 50, 150, apertureSize=3)
    lines = cv2.HoughLines(edges, 1, np.pi / 180, 55)
    lines = lines[:, 0, :]
    result = edges.copy()
    for rho, theta in lines:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + result.shape[1] * (-b))
        y1 = int(y0 + result.shape[1] * a)
        x2 = int(x0 - result.shape[0] * (-b))
        y2 = int(y0 - result.shape[0] * a)
        # 零刻度線
        if y1 >= H / 20 and y1 < H * 1 / 3:
            k1 = line_k(x1, y1, x2, y2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
        # 指針
        if y2 >= H / 2 and y2 <= H * 4 / 5 and x2 >= H / 8:
            k2 = line_k(x1, y1, x2, y2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    Cobb = int(math.fabs(np.arctan((k1 - k2) / (float(1 + k1 * k2))) * 180 / np.pi) + 0.5)
    print("度數(shù)為:", int(Cobb * 250 / 90))
    return int(Cobb * 250 / 90)

電流表讀數(shù):

def reading_A(img):
    k1 = 0
    k2 = 0
    W = Image.open(img).width
    H = Image.open(img).height
    img = cv2.imread(img)
    kernel = np.ones((6, 6), np.float32) / 25
    gray_cut_filter2D = cv2.filter2D(img, -1, kernel)
    gray_img = cv2.cvtColor(gray_cut_filter2D, cv2.COLOR_BGR2GRAY)
    ret, thresh1 = cv2.threshold(gray_img, 180, 255, cv2.THRESH_BINARY)
    tm = thresh1.copy()
    test_main = tm[int(W / 25):int(W * 23 / 25), int(H / 25):int(H * 23 / 25)]
    edges = cv2.Canny(test_main, 50, 150, apertureSize=3)
    lines = cv2.HoughLines(edges, 1, np.pi / 180, 50)
    lines = lines[:, 0, :]
    result = edges.copy()
    for rho, theta in lines:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + result.shape[1] * (-b))
        y1 = int(y0 + result.shape[1] * a)
        x2 = int(x0 - result.shape[0] * (-b))
        y2 = int(y0 - result.shape[0] * a)
        # 零刻度線
        if y1 >= H / 20 and y1 < H * 1 / 3:
            k1 = line_k(x1, y1, x2, y2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
        # 指針
        if y2 >= H / 2 and y2 <= H * 4 / 5 and x2 >= H / 8:
            k2 = line_k(x1, y1, x2, y2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    Cobb = int(math.fabs(np.arctan((k1 - k2) / (float(1 + k1 * k2))) * 180 / np.pi) + 0.5)
    print("度數(shù)為:", int(Cobb * 40 / 90))
    return int(Cobb * 40 / 90)
7. 保存結(jié)果

將結(jié)果保存在圖片上:

def save_clock(img, read, path):
    # 設(shè)置字體,如果沒有,也可以不設(shè)置
    font = ImageFont.truetype("C:\WINDOWS\FONTS\MSYHL.TTC", 50)
    # 打開底版圖片
    tp = Image.open(img)
    # 在圖片上添加文字 1
    draw = ImageDraw.Draw(tp)
    draw.text((50, 50), str(read), (255, 255, 0), font=font)
    # 保存
    tp.save(path)

由于裁剪框的位置不同,最終結(jié)果存在一定誤差
指針儀表數(shù)據(jù)集,python,YOLO,人工智能

向http接口發(fā)送結(jié)果(也可以使用postman工具測試):
sendAns.py文章來源地址http://www.zghlxwxcb.cn/news/detail-728839.html

def send(rack1_res):
    conn = http.client.HTTPConnection("192.168.0.103:5000")
    rack1_1 = rack1_res[0]
    rack1_2 = rack1_res[1]
    rack1_3 = rack1_res[2]
    rack1_4 = rack1_res[3]
    payload = "{\n    \"username\" : \"asd123\"," \
              "\n    \"password\" : \"123\"," \
              "\n    \"rack1_1\" : \"%s\" ," \
              "\n    \"rack1_2\" : \"%s\"," \
              "\n    \"rack1_3\" : \"%s\"," \
              "\n    \"rack1_4\" : \"%s\"" \
              "\n}" % (rack1_1, rack1_2, rack1_3, rack1_4)
    headers = {
        'content-type': "application/json",
        'cache-control': "no-cache",
        'postman-token': "a1fa6df2-a806-fdbd-6963-4342f9eb4227"
    }
    conn.request("POST", "/get", payload, headers)
    res = conn.getresponse()
    data = res.read()

到了這里,關(guān)于Yolov5實現(xiàn)視頻中的指針式儀表讀數(shù) [python]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于深度學(xué)習的指針式儀表傾斜校正方法——論文解讀

    基于深度學(xué)習的指針式儀表傾斜校正方法——論文解讀

    中文論文題目:基于深度學(xué)習的指針式儀表傾斜校正方法 英文論文題目:Tilt Correction Method of Pointer Meter Based on Deep Learning 周登科、楊穎、朱杰、王庫.基于深度學(xué)習的指針式儀表傾斜校正方法[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報, 2020, 32(12):9.DOI:10.3724/SP.J.1089.2020.18288. ? ? ? ?針對儀

    2024年02月12日
    瀏覽(25)
  • 一個指針式的時鐘,12小時內(nèi)時針和分針重復(fù)多少次,分別是什么時間

    之前看過一個雞湯,說中國學(xué)生和國外學(xué)生,老師提出這個問題,僅是問重合多少次。中國學(xué)生拿出筆悶頭算,國外學(xué)生直接拿出表直接調(diào)時間………… 但是這個問題如果是重合的具體時間如何用C語言算 結(jié)果 重復(fù)時間 小時: 1 ?分鐘 5? 重復(fù)時間 小時: 1 ?分鐘 6? 重復(fù)時間

    2024年02月10日
    瀏覽(19)
  • 使用YOLOV5實現(xiàn)視頻中的車輛計數(shù)

    目標檢測(Object Detection)的任務(wù)是找出圖像中所有感興趣的目標(物體),確定它們的類別和位置,是計算機視覺領(lǐng)域的核心問題之一。由于各類物體有不同的外觀、形狀和姿態(tài),加上成像時光照、遮擋等因素的干擾,目標檢測一直是計算機視覺領(lǐng)域最具有挑戰(zhàn)性的問題。

    2024年01月25日
    瀏覽(18)
  • PYTHON+YOLOV5+OPENCV,實現(xiàn)數(shù)字儀表自動讀數(shù),并將讀數(shù)結(jié)果進行輸出顯示和保存

    PYTHON+YOLOV5+OPENCV,實現(xiàn)數(shù)字儀表自動讀數(shù),并將讀數(shù)結(jié)果進行輸出顯示和保存

    最近完成了一個項目,利用python+yolov5實現(xiàn)數(shù)字儀表的自動讀數(shù),并將讀數(shù)結(jié)果進行輸出和保存,現(xiàn)在完成的7788了,寫個文檔記錄一下, 若需要數(shù)據(jù)集和源代碼可以私信。 最后實現(xiàn)的結(jié)果如下: 首先查閱文獻和文檔,好家伙,不看不知道,做相似項目的很多資料都是碩士研

    2024年02月03日
    瀏覽(27)
  • 基于YOLOv5的視頻計數(shù) — 汽車計數(shù)實現(xiàn)

    基于YOLOv5的視頻計數(shù) — 汽車計數(shù)實現(xiàn)

    在視頻中計數(shù)對象可能看起來有挑戰(zhàn)性,但借助Python和OpenCV的強大功能,變得令人意外地易于實現(xiàn)。在本文中,我們將探討如何使用YOLO(You Only Look Once)目標檢測模型在視頻流或文件中計數(shù)對象。我們將該過程分解為簡單的步驟,使初學(xué)者能夠輕松跟隨。 本文將分為以下幾

    2024年02月04日
    瀏覽(23)
  • 使用YOLOv5實現(xiàn)圖片、視頻的目標檢測

    使用YOLOv5實現(xiàn)圖片、視頻的目標檢測

    接下來我將從官方代碼開始,一步一步展示如何進行圖片、視頻識別 首先從GitHub下載官方代碼(也可以從下面鏈接獲?。?鏈接:https://pan.baidu.com/s/16wzV899D90TY2Xwhx4TwhA 提取碼:vzvj (你的環(huán)境名可能和我不一樣) 可以看到 \\\'--weights\\\' 參數(shù)(參數(shù)解讀詳見4.a)的默認值為\\\'yolov

    2023年04月15日
    瀏覽(16)
  • YOLOv5訓(xùn)練自己的數(shù)據(jù)集實現(xiàn)視頻的識別

    YOLOv5訓(xùn)練自己的數(shù)據(jù)集實現(xiàn)視頻的識別

    寫在前面 我本來是使用這個模型進行手寫簽名的定位,但是因為比賽的主辦方原因,數(shù)據(jù)不允許公開,所以我使用動物世界的一段開頭視屏來制作我的數(shù)據(jù)集。這整個模型跑通的過程中,我參考了很多不錯的博客,寫這篇博客的原因是記錄一下我的所見所感。我的模型是在

    2024年02月02日
    瀏覽(94)
  • 使用flask將Yolov5部署到前端頁面實現(xiàn)視頻檢測(保姆級)

    使用flask將Yolov5部署到前端頁面實現(xiàn)視頻檢測(保姆級)

    首先,開發(fā)工具我們選擇jetbrains公司的Pycharm,打開Pycharm,選擇new Project,flask,路徑根據(jù)自己的自身情況改,最好點擊create創(chuàng)建成功! 此時,新建好的flask工程目錄長這樣 static文件夾下存放一些文件,比如css,js,images等,templates文件夾存放一些html的文件,便于日后flask部署。

    2024年01月24日
    瀏覽(26)
  • Yolov5對本地視頻進行推理時,實現(xiàn)跳幀檢測,提高推理效率

    Yolov5對本地視頻進行推理時,實現(xiàn)跳幀檢測,提高推理效率

    今天在使用Yolov5的detect.py對本地視頻進行推理時,發(fā)現(xiàn)推理速度受硬件性能影響比較大,為提高檢測效率,在部分沒必要逐幀檢測的情況下,可以考慮設(shè)置跳幀檢測。 對detect.py觀察了一番之后,發(fā)現(xiàn)視頻讀取靠的是dataloaders.py庫,于是繼續(xù)觀察。 最終得出了以下解決方案:

    2024年02月12日
    瀏覽(42)
  • 基于Yolov5+Deepsort+SlowFast算法實現(xiàn)視頻目標識別、追蹤與行為實時檢測

    基于Yolov5+Deepsort+SlowFast算法實現(xiàn)視頻目標識別、追蹤與行為實時檢測

    前段時間打算做一個目標行為檢測的項目,翻閱了大量資料,也借鑒了不少項目,最終感覺Yolov5+Deepsort+Slowfast實現(xiàn)實時動作檢測這個項目不錯,因此進行了實現(xiàn)。 總的來說,我們需要能夠?qū)崿F(xiàn)實時檢測視頻中的人物,并且能夠識別目標的動作,所以我們拆解需求后,整理核心

    2024年01月20日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包