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

動態(tài)識別二維碼(樹莓派4b + python3 + pyzbar + opencv + 攝像頭)

這篇具有很好參考價值的文章主要介紹了動態(tài)識別二維碼(樹莓派4b + python3 + pyzbar + opencv + 攝像頭)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

????????最近需要做一個工訓物料小車掃碼領(lǐng)取任務的功能,于是使用樹莓派的攝像頭掃碼二維碼。經(jīng)過我的多番尋找,發(fā)現(xiàn)有個叫pyzbar的庫,可以結(jié)合opencv,可以做一個視頻動態(tài)二維碼掃描。

? ? ? ? 本文實現(xiàn)的功能:實現(xiàn)樹莓派的二維碼掃描

1. 首先安裝opencv和pyzbar

????????opencv的安裝,這里就不再贅述,沒有在樹莓派上安裝opencv的,可以參考一下這篇博客:樹莓派4 安裝OPENCV3全過程

????????pyzbar的安裝,直接樹莓派終端上使用如下命令即可

pip3 install pyzbar

2. 代碼及注釋

????????我使用的是樹莓派的csi攝像頭,而不是usb攝像頭,具體樹莓派攝像頭一開始如何調(diào)試,如何獲取視頻源,可以參考這篇文章:樹莓派OpenCV系列教程2:攝像頭的基本使用

import time
import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar


# main函數(shù)
if __name__ == '__main__':
    # openCV 字體
    font = cv2.FONT_HERSHEY_SIMPLEX
    # 定義圖像源
    cap = cv2.VideoCapture("http://admin:admin@192.168.1.15:8081/")  # 0: use CSI camera,1:use USB camera
    cap.set(3, 480)  # set Width把視頻流的幀(圖片)的寬度調(diào)成480
    cap.set(4, 360)  # set Height把視頻流的幀(圖片)的高度調(diào)成480
    if (not cap.isOpened()):
        print("[camera.py:cam]:can't open this camera")

    while (cap.isOpened()):
        # 讀入圖片
        ret, img = cap.read()
        # 轉(zhuǎn)灰度
        img_ROI_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        # 解碼 返回了識別到的多個二維碼對象
        barcodes = pyzbar.decode(img_ROI_gray)

        # 對于每個識別到的二維碼區(qū)域
        for barcode in barcodes:
            # 條形碼數(shù)據(jù)為字節(jié)對象,所以如果我們想在輸出圖像上
            # 畫出來,就需要先將它轉(zhuǎn)換成字符串
            barcodeData = barcode.data.decode("utf-8")
            barcodeType = barcode.type
            text = "{} ({})".format(barcodeData, barcodeType)

            # 打印字符在圖片上
            cv2.putText(img, text, (20, 100), font, 1, (0, 255, 0), 4)
            # 向終端打印條形碼數(shù)據(jù)和條形碼類型
            print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))

        # 顯示
        # cv2.imshow('img_ROI', img_ROI_gray)
        cv2.namedWindow('image', 0)
        cv2.resizeWindow('image', 700, 900)
        cv2.imshow('image', img)
        if (cv2.waitKey(1)) == 27:
            break
        # 進程停止0.5秒,為了降低圖像識別的幀率,提升性能
        time.sleep(0.5)
    # 釋放資源
    cap.release()
    cv2.destroyAllWindows()

? ? ? ? 代碼的功能是在循環(huán)內(nèi),每0.5秒,獲取一幀圖像,然后調(diào)用pyzbar識別二維碼,然后把二維碼信息打印在圖像上, 并將圖像顯示出來。

3. 效果

????????效果圖如下:

樹莓派二維碼掃描,工訓系列,OpenCV,opencv,人工智能,計算機視覺

?不曉得為什么效果不太好,延遲很高。。。

4. 優(yōu)化

優(yōu)化之后的代碼延遲很低,不卡啦文章來源地址http://www.zghlxwxcb.cn/news/detail-621007.html

# coding:utf8

import cv2
import pyzbar.pyzbar as pyzbar


def decodeDisplay(image,image1):
    barcodes = pyzbar.decode(image)
    for barcode in barcodes:
        # 提取條形碼的邊界框的位置
        # 畫出圖像中條形碼的邊界框
        (x, y, w, h) = barcode.rect
        cv2.rectangle(image1, (x, y), (x + w, y + h), (0, 0, 255), 2)

        # 條形碼數(shù)據(jù)為字節(jié)對象,所以如果我們想在輸出圖像上
        # 畫出來,就需要先將它轉(zhuǎn)換成字符串
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type

        # 繪出圖像上條形碼的數(shù)據(jù)和條形碼類型
        text = "{} ({})".format(barcodeData, barcodeType)
        cv2.putText(image1, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,
                    .5, (0, 0, 125), 2)

        # 向終端打印條形碼數(shù)據(jù)和條形碼類型
        print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
    return image1


def detect():
    cap = cv2.VideoCapture(0)

    while True:
        # 讀取當前幀
        ret, img = cap.read()
        # 轉(zhuǎn)為灰度圖像
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        im = decodeDisplay(gray,img)

        key = cv2.waitKey(5)
        cv2.namedWindow('image', 0)
        cv2.resizeWindow('image', 700, 500)
        cv2.imshow("image", im)
        if key == 27:
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    detect()

到了這里,關(guān)于動態(tài)識別二維碼(樹莓派4b + python3 + pyzbar + opencv + 攝像頭)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包