python远程调用摄像头_Python设置Socket代理及实现远程摄像头控制的例子

为python设置socket代理首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-packages中.或者把这个文件复制到程序所在的目录中.

然后就可以再程序中使用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通信实现远程摄像头监控通过python来实现摄像头监控,然后通过socket通信来将数据发送到远程服务器,这样就可以实现远程监控了.大概找了下资料,果然可以,下面贴出实现过程.

这个程序包括一个服务器和一个客户端。需要的库有 VideoCapture 和 pygame,一个用来得到摄像头的视频,一个用来显示.

服务器端,主要实现监听客户端所发送到指令,如果指令是startCam,则打开摄像头,并向客户端发送数据.

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))

# 接收线程类,用于接收客户端发送的消息

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) # 该选项设置后使得主线程退出后子线程同时退出

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()

客户端:

主要功能是像服务器端发送指令,然后接受服务器所发送过来的数据并通过pygame模块来显示出来.

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

import socket, time

import pygame

from pygame.locals import *

from sys import exit

# 服务器地址,初始化socket

ser_address = ('localhost', 10218)

cli_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 设置超时

cli_socket.settimeout(5)

# 向服务器发送消息,并判断接收时是否超时,若超时则重发

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()

# 设置时间,可以用来控制帧率

clock = pygame.time.Clock()

# 主循环,显示视频信息

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)

客户端就是简单地向服务器发送启动消息,接收到回复后开始进入主循环开始接收视频数据并显示。

由于UDP协议不保证信息是否成功到达,因此前面设置了个重发机制,只有当客户端收到服务器的回复后,才停止发送开启消息并进入主循环.具体见注释.

使用时将localhost改成服务器IP即可.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ArcEngine与C#的鹰眼地图实现

鹰眼图是对全局地图的一种概略表达,具有与全局地图的空间参考和空间范围。为了更好起到空间提示和导航作用,有些还具备全局地图中重要地理要素,如主要河流、道路等的概略表达。通过两个axMapControl控件,主控件axMapControl 1和鹰…

LeetCode 1178. 猜字谜(状态压缩+枚举二进制子集+哈希)

文章目录1. 题目2. 解题1. 题目 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底: 单词 word 中包含谜面 …

elasticsearch 工作原理_【154期】面试官:你能说说 Elasticsearch 查询数据的工作原理是什么吗?...

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅阶段汇总集合:一百期面试题汇总面试题ES 写入数据的工…

php另类上传图片的方法(PHP用Socket上传图片)

服务器端&#xff1a; 。 代码如下:<?phpset_time_limit(10);//* 设置不显示任何错误 *///error_reporting(0); function varinfo($str) {echo "<PRe>";var_dump($str);echo "<pre>";} $commonProtocol getprotobyname("tcp");…

java会被淘汰吗_Java不会被淘汰的12个原因

如今&#xff0c;面对曾经在程序员中被各种新技术掩盖直至堙灭的技术值得怀念。犹如COBOL这当年被老程序员们尊为神器的语言如今也基本没有价值。而Java作为现代程序员的中坚力量在这点上或许会成为下一个COBOL。有关JAVA的技术卖出多少本书已经是一个很久远的记忆了。现处中年…

Java 关于类的专题

文章目录1. Object 类2. 内部类3. 覆写 Object 类的 equals 方法4. 接口对象实例化5. this() 调用无参构造方法6. static 属性所有对象共享一份7. static 方法不能调用 非static 属性8. 静态代码块9. final 关键字10. instanceof 关键字1. Object 类 所有的类都是继承于 Objec…

pythonmain是什么意思_Python中if __name__ == __main__详细解释

想必很多初次接触python都会见到这样一个语句&#xff0c;if __name__ "__main__"&#xff1a; 那么这个语句到底是做什么用的呢&#xff1f;在解释之前&#xff0c;首先要声明的是&#xff0c;不管你是多么小白&#xff0c;你一定要知道的是&#xff1a; 1.python文…

java操作redis的操作_Java操作redis简单示例

第一&#xff1a;安装Redis首先我们要安装Redis&#xff0c;就像我们操作数据库一样&#xff0c;在操作之前肯定要先创建好数据库的环境。Redis的下载可以百度一下&#xff0c;或者打开下面的下载链接&#xff1a;https://github.com/MSOpenTech/redis也可以从我的百度网盘下载…

myeclipse启动报JVM terminated. Exit code=1

报错信息如图&#xff1a; 解决办法&#xff1a; 删除当前workspaces下文件夹&#xff0c;路径为&#xff1a;%Workspaces%/.metadata/.plugins/org.eclipse.core.runtime转载于:https://www.cnblogs.com/tancp/p/4102866.html

Java 常用类库

文章目录1. String、StringBuffer2. 基本数据类3. System 类4. Runtime 类5. Date、Calendar、DateFormat 类6. Math、Random 类7. hashCode() 方法8. 对象克隆1. String、StringBuffer public class testString {public static void main(String [] args){String s "Mi…

git如何选择性合并_小姐姐用 10 张动图,教会你 Git 命令使用

优质文章&#xff0c;第一时间送达&#xff01;来源&#xff1a;机器之心git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道这些 git 命令执行的究竟是什么任务吗&#xff1f;如果你还有些分不清楚&#xff0c;那千万不能错过这篇文章…

传智播客java测试题_传智播客Java基础综合测试题

传智播客Java基础综合测试题传智播客Java基础综合测试题第一关1.动手完成 Java 开发包的安装&#xff0c;并设置环境变量 Path 。2.编写一个程序&#xff0c;要求程序运行后在屏幕上输出&#xff1a;***************************This is my first java program!***************…

为何Spark更高效?

learn from 从0开始学大数据&#xff08;极客时间&#xff09; Spark 的计算阶段 Hadoop MapReduce 简单粗暴地根据 shuffle 将大数据计算分成 Map 和 Reduce 两个阶段&#xff0c;然后就算完事了。 而 Spark 更细腻一点&#xff0c;将前一个的 Reduce 和后一个的 Map 连接起来…

iphone个系列尺寸_最值得入手的4款iPhone,都是内行人的最爱,拿出去有面子

现如今手机市场里最受大众欢迎的手机应该就是iPhone了&#xff0c;虽然iPhone的价格都普遍偏高&#xff0c;但是大家依然还是非常青睐于它&#xff0c;主要是因为iPhone的配置和性能确实是比其他机型要好&#xff0c;搭载的A系列仿生芯片和iOS系统都提升了它的性能&#xff0c;…

protocol(协议) 和 delegate(委托)也叫(代理)---辨析

protocol和delegate完全不是一回事。协议(protocol)&#xff0c;&#xff08;名词&#xff09;要求。就是使用了这个协议后就要按照这个协议来办事&#xff0c;协议要求实现的方法就一定要实现。委托(delegate)&#xff0c;&#xff08;动词&#xff09;助手。顾名思义就是委托…

redis 计数 java_redission计数器实现,redisTemplate计数器

在redission 2.9.0版本之前是有BUG&#xff0c;在实现下面代码时&#xff0c;第一次是成功的&#xff0c;但是在第二次就会失败&#xff1a;RedissonClient client;//client参考别的demoRMapCache mapCache client.getMapCache("nameSpace");mapCache.putIfAbsent(&…

天池 在线编程 能否转换

文章目录1. 题目2. 解题1. 题目 给两个字符串 S 和 T, 判断 S 能不能通过删除一些字母(包括0个)变成 T. 样例1 输入: S "lintcode" 和 T "lint" 输出: true样例2 输入: S "lintcode" 和 T "ide" 输出: true样例3 输入: S "…

java对象持久化技术_Java对象持久化技术Hibernate 一

Hibernate是Java应用和关系数据库之间的桥梁&#xff0c;它负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作&#xff0c;向上层应用提供了面向对象的数据访问API。在Java应用中使用Hibernate包含以下步骤。(1)创建Hibernate的配置文件。(2)创建…

SQL获取变量类型以及变量最大长度

DECLARE Temp nvarchar(1050) SELECT CAST(SQL_VARIANT_PROPERTY(Temp, BaseType) AS VARCHAR(50))SELECT CAST(SQL_VARIANT_PROPERTY(Temp, MaxLength) AS VARCHAR(50))转载于:https://www.cnblogs.com/lhmlyx2723356/p/4105322.html

java 析构函数_C++与Java的区别(一)

一&#xff0c;前言网上经常看到编程语言之争&#xff0c;大伙儿皈依到不同门派&#xff0c;各自怀抱信仰&#xff0c;时不时还发生点儿“冲突”。这其中&#xff0c;C和Java的优劣&#xff0c;十多年前就常吵的火热。然而时代在进步&#xff0c;技术在发展&#xff0c;满街早已…