最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設(shè)置Socket代理及實現(xiàn)遠程攝像頭控制的例子

 更新時間:2015年11月13日 15:25:38   投稿:goldensun  
這篇文章主要介紹了Python設(shè)置Socket代理及實現(xiàn)遠程攝像頭控制的例子,皆是對socket模塊的實際運用,需要的朋友可以參考下

為python設(shè)置socket代理
首先,你得下載SocksiPy這個.解壓出來之后里面會有一個socks.py文件.然后你可以把這個文件復(fù)制到python安裝目錄里面的Lib\site-packages中.或者把這個文件復(fù)制到程序所在的目錄中.
然后就可以再程序中使用socket代理來編寫程序了.
下面是示例代碼

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1",8088)
socket.socket =socks.socksocket
import urllib2
urllib2.urlopen('http://www.baidu.com').read()


通過socket通信實現(xiàn)遠程攝像頭監(jiān)控
通過python來實現(xiàn)攝像頭監(jiān)控,然后通過socket通信來將數(shù)據(jù)發(fā)送到遠程服務(wù)器,這樣就可以實現(xiàn)遠程監(jiān)控了.大概找了下資料,果然可以,下面貼出實現(xiàn)過程.
這個程序包括一個服務(wù)器和一個客戶端。需要的庫有 VideoCapture 和 pygame,一個用來得到攝像頭的視頻,一個用來顯示.
服務(wù)器端,主要實現(xiàn)監(jiān)聽客戶端所發(fā)送到指令,如果指令是startCam,則打開攝像頭,并向客戶端發(fā)送數(shù)據(jù).

from VideoCapture import Device
import ImageDraw, sys, pygame, time
from pygame.locals import *
import socket
import time
from PIL import ImageEnhance
from threading import Thread
import traceback
import threading

 
 


# 全局變量
is_sending = False
cli_address = ('', 0)

# 主機地址和端口
host = 'localhost'
port = 10218

# 初始化UDP socket
ser_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ser_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ser_socket.bind((host, port))

# 接收線程類,用于接收客戶端發(fā)送的消息
class UdpReceiver(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    self.thread_stop = False
        
  def run(self):
    while not self.thread_stop:
      # 聲明全局變量,接收消息后更改
      global cli_address  
      global is_sending
      try:
        message, address = ser_socket.recvfrom(2048)
      except:
        traceback.print_exc()
        continue
      print message,cli_address
      cli_address = address
      if message == 'startCam':
        print 'start camera',
        is_sending = True
        ser_socket.sendto('startRcv', cli_address)        
      if message == 'quitCam':
        is_sending = False
        print 'quit camera',

  def stop(self):
    self.thread_stop = True


if __name__=='__main__':
  res = (640,480)
  
  cam = Device()
  cam.setResolution(res[0],res[1])
 
  
  brightness = 1.0
  contrast = 1.0
  shots = 0
  
  receiveThread = UdpReceiver()
  receiveThread.setDaemon(True)      # 該選項設(shè)置后使得主線程退出后子線程同時退出
  receiveThread.start()
  

  while 1:
    if is_sending: 
      camshot = ImageEnhance.Brightness(cam.getImage()).enhance(brightness)
      camshot = ImageEnhance.Contrast(camshot).enhance(contrast)
      clock = pygame.time.Clock()
      img = cam.getImage().resize((160,120))
      data = img.tostring()
      ser_socket.sendto(data, cli_address) 
      time.sleep(0.05) 
    else:
      time.sleep(1)
  receiveThread.stop()
  ser_socket.close()    

客戶端:
主要功能是像服務(wù)器端發(fā)送指令,然后接受服務(wù)器所發(fā)送過來的數(shù)據(jù)并通過pygame模塊來顯示出來.

# -*- coding: UTF-8 -*-

import socket, time
import pygame
from pygame.locals import *
from sys import exit

# 服務(wù)器地址,初始化socket
ser_address = ('localhost', 10218)
cli_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 設(shè)置超時
cli_socket.settimeout(5)

# 向服務(wù)器發(fā)送消息,并判斷接收時是否超時,若超時則重發(fā)
while 1:
  cli_socket.sendto('startCam', ser_address)
  try:
    message, address = cli_socket.recvfrom(2048)
    if message == 'startRcv':
      print message
      break
  except socket.timeout:
    continue

cli_socket.recvfrom(65536)

# 初始化視頻窗口
pygame.init()
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption('Web Camera')
pygame.display.flip()

# 設(shè)置時間,可以用來控制幀率
clock = pygame.time.Clock()


# 主循環(huán),顯示視頻信息
while 1:
  try:
    data, address = cli_socket.recvfrom(65536)
  except socket.timeout:
    continue
  camshot = pygame.image.frombuffer(data, (160,120), 'RGB')
  camshot = pygame.transform.scale(camshot, (640, 480))
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      cli_socket.sendto('quitCam', ser_address)
      cli_socket.close()
      pygame.quit()
      exit()
  screen.blit(camshot, (0,0))
  pygame.display.update() 
  clock.tick(20)

客戶端就是簡單地向服務(wù)器發(fā)送啟動消息,接收到回復(fù)后開始進入主循環(huán)開始接收視頻數(shù)據(jù)并顯示。
由于UDP協(xié)議不保證信息是否成功到達,因此前面設(shè)置了個重發(fā)機制,只有當客戶端收到服務(wù)器的回復(fù)后,才停止發(fā)送開啟消息并進入主循環(huán).具體見注釋.
使用時將localhost改成服務(wù)器IP即可.

相關(guān)文章

  • 基于Python的數(shù)據(jù)分析與可視化

    基于Python的數(shù)據(jù)分析與可視化

    在當今數(shù)字化時代,數(shù)據(jù)分析和可視化已經(jīng)成為了企業(yè)和個人必備的技能,Python 作為一種高級編程語言,具有易學易用、高效快捷的特點,在數(shù)據(jù)科學領(lǐng)域中得到了廣泛應(yīng)用,本篇文章將介紹基于 Python 的數(shù)據(jù)分析與可視化
    2023-07-07
  • python實現(xiàn)二叉排序樹

    python實現(xiàn)二叉排序樹

    這篇文章主要介紹了python實現(xiàn)二叉排序樹,
    2022-01-01
  • keras.utils.to_categorical和one hot格式解析

    keras.utils.to_categorical和one hot格式解析

    這篇文章主要介紹了keras.utils.to_categorical和one hot格式解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python代碼實現(xiàn)http/https代理服務(wù)器的腳本

    Python代碼實現(xiàn)http/https代理服務(wù)器的腳本

    這篇文章主要介紹了Python代碼做出http/https代理服務(wù)器,啟動即可做http https透明代理使用,通過幾百行代碼做出http/https代理服務(wù)器代碼片段,需要的朋友可以參考下
    2019-08-08
  • python深度學習tensorflow1.0參數(shù)和特征提取

    python深度學習tensorflow1.0參數(shù)和特征提取

    這篇文章主要為大家介紹了python深度學習tensorflow1.0參數(shù)和特征提取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Python基于pygame模塊播放MP3的方法示例

    Python基于pygame模塊播放MP3的方法示例

    這篇文章主要介紹了Python基于pygame模塊播放MP3的方法,結(jié)合實例形式簡單分析了Python使用pygame模塊播放MP3音頻文件的實現(xiàn)方法以及相關(guān)函數(shù)的功能說明,需要的朋友可以參考下
    2017-09-09
  • Python字典取鍵、值對的方法步驟

    Python字典取鍵、值對的方法步驟

    這篇文章主要介紹了Python字典取鍵、值對的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Django通過json格式收集主機信息

    Django通過json格式收集主機信息

    這篇文章主要介紹了基于Django收集主機信息json格式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情,對文件夾和文件進行屬性判斷,首先對文件夾進行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • python基礎(chǔ)之循環(huán)語句

    python基礎(chǔ)之循環(huán)語句

    這篇文章主要介紹了python的循環(huán)語句,實例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10

最新評論

永清县| 阳信县| 广西| 井陉县| 洞口县| 隆子县| 甘泉县| 密云县| 宜章县| 汉源县| 武鸣县| 邓州市| 枣庄市| 五莲县| 南雄市| 巢湖市| 盘山县| 兴隆县| 吴旗县| 长乐市| 顺平县| 恩施市| 东乌珠穆沁旗| 蓬安县| 鄢陵县| 成都市| 金华市| 石狮市| 成安县| 临颍县| 通海县| 江门市| 黄龙县| 卢氏县| 台中市| 分宜县| 玉屏| 万山特区| 天长市| 宁南县| 石林|