1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        使用OpenCV進(jìn)行直播(附代碼)

        共 3157字,需瀏覽 7分鐘

         ·

        2021-11-11 13:33

        點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        生活中我們不止一次地使用過直播,但從未想過如何通過編程實(shí)現(xiàn)。大家好,我們在這里向大家介紹如何使用OpenCV和python的套接字編程。今天,我們將借助OpenCV和socket編程創(chuàng)建一個實(shí)時流媒體應(yīng)用程序,我們將從頭開始為服務(wù)器和客戶端開發(fā)代碼。



        什么是OpenCV?


        Opencv是一個計算機(jī)視覺庫。該庫具有多種功能,因此我們可以使用網(wǎng)絡(luò)攝像頭和編程來處理圖像和視頻。


        什么是socket編程?


        簡單地說,socket編程意味著使用TCP或UDP等互聯(lián)網(wǎng)協(xié)議在端口上的兩個或多個服務(wù)器之間進(jìn)行通信。關(guān)于socket和OpenCV的更多信息,我們將在代碼中討論。


        開發(fā)一個服務(wù)器

        在服務(wù)器上,當(dāng)客戶端連接到服務(wù)器時,應(yīng)用程序?qū)⒁远丝谔柡虸P地址運(yùn)行,然后服務(wù)器接收數(shù)據(jù)并將其轉(zhuǎn)換為流。在運(yùn)行代碼之前,請確保你們已經(jīng)下載了python中的以下庫:
        pip install packagename

        opencv-python,numpy,pickle

        import cv2, socket, numpy, pickles=socket.socket(socket.AF_INET , socket.SOCK_DGRAM)ip="192.168.1.5"port=6666s.bind((ip,port))


        在上面的代碼中,我們已經(jīng)為項(xiàng)目導(dǎo)入了所需的庫。"s"變量將存儲socket的地址,socket.AF_INET用于表示套接字使用ipv4。socket.sock_DGRAM表示UDP協(xié)議,代表用戶數(shù)據(jù)報協(xié)議。有時使用它是有風(fēng)險的,因?yàn)榧僭O(shè)我們的數(shù)據(jù)包沒有發(fā)送給用戶,它不會告訴我們,所以我們有數(shù)據(jù)丟失的風(fēng)險,而不是它易于使用。我們也可以使用TCP,但這會使我們的代碼有點(diǎn)復(fù)雜,因此對于basic,我們使用UDP。


        "ip"變量包含計算機(jī)的ip地址,"port"編號包含運(yùn)行進(jìn)程的端口。你們可以根據(jù)自己的選擇提供任何端口號,因?yàn)樗皇且粋€正在運(yùn)行并暴露于世界的進(jìn)程。s.bind()函數(shù)將綁定"ip"和"端口"號,并將其轉(zhuǎn)換為套接字。簡單地說,就是元組。


        while True:    x=s.recvfrom(1000000)    clientip = x[1][0]    data=x[0]    print(data)    data=pickle.loads(data)    print(type(data))    data = cv2.imdecode(data, cv2.IMREAD_COLOR)    cv2.imshow('server', data) #to open image    if cv2.waitKey(10) == 13:        breakcv2.destroyAllWindows()


        上述函數(shù)將從客戶端接收數(shù)據(jù),并將數(shù)據(jù)臨時存儲到"x"變量中。在"clientip"中,我們使用通過切片數(shù)組檢索的數(shù)據(jù)存儲了客戶端的IP地址,數(shù)據(jù)變量將保存數(shù)據(jù)。現(xiàn)在,我們將使用函數(shù)imdecode對數(shù)據(jù)變量中接收的數(shù)據(jù)進(jìn)行解碼,imshow函數(shù)將顯示一個流窗口。cv2.waitkey(10)將每隔10毫秒單擊/收集數(shù)據(jù),直到你們按enter鍵并輸入數(shù)字13。按enter鍵時,destroyAllWindows()將關(guān)閉應(yīng)用程序。


        配置客戶端

        現(xiàn)在,當(dāng)我們將客戶端連接到給定的服務(wù)器IP和端口號時,它們之間的通信開始。
        import cv2, socket, pickle, os  s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 10000000)serverip="192.168.1.5"serverport=6666


        這里,我們首先導(dǎo)入了socket和OpenCV所需的庫,"s"存儲socket的地址。AF_INET表示IP系列v4和socket.SOCK_DGRAM此關(guān)鍵字用于UDP協(xié)議,第三行將創(chuàng)建一個緩沖區(qū)大小,以便我們可以存儲數(shù)據(jù)緩沖區(qū)以連續(xù)傳輸數(shù)據(jù)。"serveip"和"serverport"保存服務(wù)器的IP地址和端口號。


        cap = cv2.VideoCapture(0)while True:        ret,photo = cap.read()            cv2.imshow('streaming', photo)            ret, buffer = cv2.imencode(".jpg", photo,[int(cv2.IMWRITE_JPEG_QUALITY),30])        x_as_bytes = pickle.dumps(buffer)            s.sendto(x_as_bytes,(serverip , serverport))            if cv2.waitKey(10) == 13:                          break  cv2.destroyAllWindows()cap.release()


        視頻捕獲(0)存儲功能地址和用于存儲網(wǎng)絡(luò)攝像頭的"0"。ret存儲返回值和照片,并存儲cap.read()的輸出。此函數(shù)將讀取圖像。imshow將顯示流媒體窗口。緩沖區(qū)變量將存儲流媒體的數(shù)據(jù)并將其提供給服務(wù)器,這個函數(shù)將把數(shù)據(jù)轉(zhuǎn)儲到一個變量中,發(fā)送到一個函數(shù)將綁定IP和端口號的數(shù)據(jù),以便我們可以發(fā)送它。waitkey將每隔10毫秒收集一次數(shù)據(jù),直到我們按enter鍵,輸入代碼為13。destroyAllWindows()將銷毀windows,cap.release()將關(guān)閉相機(jī)。


        本文GITHUB代碼鏈接:

        https://github.com/abhikesare9/live-streaming-with-opencv



        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計算機(jī)視覺。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 46
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            五月丁香婷婷在线视频 | 日本wwwxxxx | 男女啪啪视频免费网站 | 逼毛网站大全 | 成人免费视频网址 | 国产裸露片段合集在线观看 | 午夜福利理论片A片在线播放 | 欧美精品无码一区二区 | 大香蕉国产纶乱免费阅读 | 国产精品成人a免费观看 |