<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3157字,需瀏覽 7分鐘

           ·

          2021-11-11 13:33

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

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

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



          什么是OpenCV?


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


          什么是socket編程?


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


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

          在服務(wù)器上,當(dāng)客戶端連接到服務(wù)器時(shí),應(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ù)報(bào)協(xié)議。有時(shí)使用它是有風(fēng)險(xiǎn)的,因?yàn)榧僭O(shè)我們的數(shù)據(jù)包沒有發(fā)送給用戶,它不會告訴我們,所以我們有數(shù)據(jù)丟失的風(fēng)險(xiǎn),而不是它易于使用。我們也可以使用TCP,但這會使我們的代碼有點(diǎn)復(fù)雜,因此對于basic,我們使用UDP。


          "ip"變量包含計(jì)算機(jī)的ip地址,"port"編號包含運(yùn)行進(jìn)程的端口。你們可以根據(jù)自己的選擇提供任何端口號,因?yàn)樗皇且粋€(gè)正在運(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ù)臨時(shí)存儲到"x"變量中。在"clientip"中,我們使用通過切片數(shù)組檢索的數(shù)據(jù)存儲了客戶端的IP地址,數(shù)據(jù)變量將保存數(shù)據(jù)。現(xiàn)在,我們將使用函數(shù)imdecode對數(shù)據(jù)變量中接收的數(shù)據(jù)進(jìn)行解碼,imshow函數(shù)將顯示一個(gè)流窗口。cv2.waitkey(10)將每隔10毫秒單擊/收集數(shù)據(jù),直到你們按enter鍵并輸入數(shù)字13。按enter鍵時(shí),destroyAllWindows()將關(guān)閉應(yīng)用程序。


          配置客戶端

          現(xiàn)在,當(dāng)我們將客戶端連接到給定的服務(wù)器IP和端口號時(shí),它們之間的通信開始。
          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)建一個(gè)緩沖區(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ù)器,這個(gè)函數(shù)將把數(shù)據(jù)轉(zhuǎn)儲到一個(gè)變量中,發(fā)送到一個(gè)函數(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)目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

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

          交流群


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


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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黑人巨吊碰碰 | 成人国产精品秘 久久久 | 免费婷婷| 吴梦梦一区二区在线观看 | 亚洲伊人影院 |