欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

基于TCP網(wǎng)絡傳輸協(xié)議和python3 的雙路視頻數(shù)據(jù)和單路指令傳輸顯示系統(tǒng)

系統(tǒng) 2088 0

注意:這個代碼是很早之前的寫的一個小代碼,可能會有一些地方會出現(xiàn)一些小問題,但是我在局域網(wǎng)的情況下已經(jīng)測試過了。 僅僅是局域網(wǎng)

?服務端代碼:

            
              #!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: K_liu
'''
這是一個服務器端程序
可以通過TCP傳輸協(xié)議實現(xiàn)兩路視頻傳輸,一路指令傳輸,本程序采用一個隨機數(shù)來模擬指令
'''
import socket
import struct
import time
import cv2
import numpy
import random

# 設置套接字,本程序采用TCP協(xié)議,當然也可以采用UDP協(xié)議,但是要保證指令傳輸?shù)恼_性,所以采用了TCP協(xié)議。
addr = ("0.0.0.0", 8080)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) #端口可復用
server_socket.bind(addr) # 綁定地址端口
server_socket.listen(True) # 進入監(jiān)聽狀態(tài)

def Package(camera,img, img_resolution, img_param, conn_client, flag):# 注意flag是一個數(shù)據(jù)區(qū)分標志,0和1分別表示兩路數(shù)據(jù)
    '本函數(shù)的主要功能是實現(xiàn)Opencv采集到的視頻數(shù)據(jù)進行轉碼,同時進行數(shù)據(jù)打包傳輸'
    number = random.randint(1,10) # 生成一個1到10的隨機數(shù),模擬指令
    frame = cv2.resize(img, img_resolution) # 對圖像數(shù)據(jù)大小進行設定
    _, frame_encode = cv2.imencode('.jpg', frame, img_param) # 進行編碼,編碼成可以傳輸?shù)膉pg格式,Opencv的數(shù)據(jù)是不能直接傳輸?shù)?    numpy_frame = numpy.array(frame_encode) # 將編碼的圖片轉成numpy的數(shù)組
    data_frame = numpy_frame.tostring() # 轉成字符串,網(wǎng)絡傳輸只能傳輸str格式
    try:
        # 按照相應的格式進行打包發(fā)送圖片
        conn_client.send(struct.pack("lhh", len(numpy_frame), flag, number)
                         + data_frame)
    except:
        camera.release()
        return 0

def Send_image(conn_client):
    img_fps = 30 # 設置幀率
    img_resolution = (640, 480)
    # 初始化攝像頭
    camera1 = cv2.VideoCapture(0)
    camera2 = cv2.VideoCapture(1)
    img_param = [int(cv2.IMWRITE_JPEG_QUALITY), img_fps]  # 設置傳送圖像格式、幀數(shù)
    while(1): # 下面的就不用注釋了吧
        time.sleep(0.1)
        ret1, frame1 = camera1.read()
        ret2, frame2 = camera2.read()
        Package(camera1,frame1,img_resolution,img_param,conn_client,0)
        time.sleep(0.1)
        Package(camera1, frame2, img_resolution, img_param, conn_client, 1)

if __name__ == '__main__':
    print('Waiting the connecting ...')
    conn, addr = server_socket.accept()
    print('connected form the: {}'.format(addr))
    Send_image(conn)



            
          

?客戶端代碼

            
              #!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: K_liu
'''
這是一個客戶端程序,由于需要顯示兩路視頻畫面,所以采用pygame來進行編寫程序,Opencv界面可定制化沒有pygame靈活
當然大家也可以采用python的其他GUI開發(fā)工具。
'''
import socket
import cv2
import struct
import numpy
import pygame
from pygame.locals import *
from sys import exit
global image1
global image2

# Configuration file
pygame.init() # 初始化pygame
window_size = (1280, 480) # 設置顯示界面大小
screen = pygame.display.set_mode(window_size, 0, 32) # pygame顯示設置
pygame.display.set_caption('Two Camera Show') # 設置顯示標題
pygame.display.flip()
clock = pygame.time.Clock()

def Get_image():
    info = struct.unpack("lhh", client_socket.recv(8)) # 進行數(shù)據(jù)包解包操作
    flag = info[1] # flag是為了辨別是那一路信號,采用0和1進行區(qū)分,詳情請見服務器段程序
    print('模擬指令:{}'.format(info[2]))
    buf_size = info[0]  # 獲取讀的圖片總長度
    if buf_size:
        try:
            buf = b""  # 代表bytes類型
            temp_buf = buf
            while (buf_size):  # 讀取每一張圖片的長度
                temp_buf = client_socket.recv(buf_size)
                buf_size -= len(temp_buf)
                buf += temp_buf  # 獲取圖片
                data = numpy.fromstring(buf, dtype='uint8')  # 按uint8轉換為圖像矩陣
                image = cv2.imdecode(data, 1)  # 圖像解碼
                return image, flag
        except:
            pass

def ShowImage():
    while (1):
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
        frame, flag = Get_image()
        if flag == 0:
            image1 = frame
            flag1 = flag
            frame1 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)#將圖片轉換成RGB格式,Opencv采用的是BGR
            frame1 = numpy.rot90(frame1)
            frame1 = cv2.flip(frame1, 0, dst= None)
            frame1 = pygame.surfarray.make_surface(frame1) # 轉換成pygame的背景格式
            screen.blit(frame1, (0, 0)) # 進行背景渲染

        elif flag == 1:
            image2 = frame
            flag2 = flag
            frame2 = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)
            frame2 = numpy.rot90(frame2)
            frame2 = pygame.surfarray.make_surface(frame2)
            screen.blit(frame2, (640,0))
        pygame.display.update() # 刷新背景



if __name__ == '__main__':
    addr_port = ('127.0.0.1', 8080)
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 端口可復用
    client_socket.connect(addr_port)
    print("IP is %s:%d" % (addr_port[0], addr_port[1]))
    ShowImage()



            
          

?


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 三上悠亚2022年最新番号 | 五月综合激情婷婷六月 | 日韩精品网址 | 啪啪激情综合 | 国产高清视频 | 99久久精品免费看国产一区二区 | 青青热久久国产久精品秒播 | 国产精品久久久久久52AVAV | 亚洲www啪成人一区二区 | 欧美日韩不卡 | 青青草免费国产线观720 | 午夜草逼| 日日摸夜夜摸狠狠摸日日碰夜夜做 | 日韩五月| 丁香花婷婷 | 日日操视频 | 欧美第一色 | 欧美一区二区三区gg高清影视 | 国产网红主播chinese | 亚洲欧洲日本天天堂在线观看 | 美国一级欧美三级 | 久在线 | 色婷婷久久久久swag精品 | se999se男人最爱 | 二级黄| 亚洲第一天堂 | 国产精品久久久久久久久久免费 | 97骚碰 | 毛片99| 魔法骑士在线观看免费完整版 | 浮力影院最新网址 | 国产高清在线精品一区免费97 | 国产精品一区欧美激情 | 丁香六月啪 | 麻豆av电影在线观看 | 美腿丝袜中文字幕 | 日韩三级在线播放 | 99久久精品费精品国产一区二区 | 亚洲人jizz日本人处 | 99久久精约久久久久久清纯 | 国产免费av在线 |