无限循环访问服务器,在Python中运行服务器和无限循环

我有以下代码:

#!/usr/bin/python

import StringIO

import subprocess

import os

import time

from datetime import datetime

from PIL import Image

# Original code written by brainflakes and modified to exit

# image scanning for loop as soon as the sensitivity value is exceeded.

# this can speed taking of larger photo if motion detected early in scan

# Motion detection settings:

# need future changes to read values dynamically via command line parameter or xml file

# --------------------------

# Threshold - (how much a pixel has to change by to be marked as "changed")

# Sensitivity - (how many changed pixels before capturing an image) needs to be higher if noisy view

# ForceCapture - (whether to force an image to be captured every forceCaptureTime seconds)

# filepath - location of folder to save photos

# filenamePrefix - string that prefixes the file name for easier identification of files.

threshold = 10

sensitivity = 180

forceCapture = True

forceCaptureTime = 60 * 60 # Once an hour

filepath = "/home/pi/camera"

filenamePrefix = "capture"

# File photo size settings

saveWidth = 1280

saveHeight = 960

diskSpaceToReserve = 40 * 1024 * 1024 # Keep 40 mb free on disk

# Capture a small test image (for motion detection)

def captureTestImage():

command = "raspistill -w %s -h %s -t 500 -e bmp -o -" % (100, 75)

imageData = StringIO.StringIO()

imageData.write(subprocess.check_output(command, shell=True))

imageData.seek(0)

im = Image.open(imageData)

buffer = im.load()

imageData.close()

return im, buffer

# Save a full size image to disk

def saveImage(width, height, diskSpaceToReserve):

keepDiskSpaceFree(diskSpaceToReserve)

time = datetime.now()

filename = filepath + "/" + filenamePrefix + "-%04d%02d%02d-%02d%02d%02d.jpg" % ( time.year, time.month, time.day, time.hour, time.minute, time.second)

subprocess.call("raspistill -w 1296 -h 972 -t 1000 -e jpg -q 15 -o %s" % filename, shell=True)

print "Captured %s" % filename

# Keep free space above given level

def keepDiskSpaceFree(bytesToReserve):

if (getFreeSpace() < bytesToReserve):

for filename in sorted(os.listdir(filepath + "/")):

if filename.startswith(filenamePrefix) and filename.endswith(".jpg"):

os.remove(filepath + "/" + filename)

print "Deleted %s to avoid filling disk" % filename

if (getFreeSpace() > bytesToReserve):

return

# Get available disk space

def getFreeSpace():

st = os.statvfs(".")

du = st.f_bavail * st.f_frsize

return du

# Get first image

image1, buffer1 = captureTestImage()

# Reset last capture time

lastCapture = time.time()

# added this to give visual feedback of camera motion capture activity. Can be removed as required

os.system('clear')

print " Motion Detection Started"

print " ------------------------"

print "Pixel Threshold (How much) = " + str(threshold)

print "Sensitivity (changed Pixels) = " + str(sensitivity)

print "File Path for Image Save = " + filepath

print "---------- Motion Capture File Activity --------------"

while (True):

# Get comparison image

image2, buffer2 = captureTestImage()

# Count changed pixels

changedPixels = 0

for x in xrange(0, 100):

# Scan one line of image then check sensitivity for movement

for y in xrange(0, 75):

# Just check green channel as it's the highest quality channel

pixdiff = abs(buffer1[x,y][1] - buffer2[x,y][1])

if pixdiff > threshold:

changedPixels += 1

# Changed logic - If movement sensitivity exceeded then

# Save image and Exit before full image scan complete

if changedPixels > sensitivity:

lastCapture = time.time()

saveImage(saveWidth, saveHeight, diskSpaceToReserve)

break

continue

# Check force capture

if forceCapture:

if time.time() - lastCapture > forceCaptureTime:

changedPixels = sensitivity + 1

# Swap comparison buffers

image1 = image2

buffer1 = buffer2

此代码在检测到移动后拍摄照片,并一直这样做,直到我手动停止它为止。 (我应该提一下代码是用于Raspberry Pi计算机)

在Stackoverflow上我也有以下代码由Nathan Jhaveri提供:

import SocketServer

from BaseHTTPServer import BaseHTTPRequestHandler

def some_function():

print "some_function got called"

class MyHandler(BaseHTTPRequestHandler):

def do_GET(self):

if self.path == '/captureImage':

saveImage(saveWidth, saveHeight, diskSpaceToReserve)

self.send_response(200)

httpd = SocketServer.TCPServer(("", 8080), MyHandler)

httpd.serve_forever()

此代码运行一个执行的简单服务器

saveImage(saveWidth, saveHeight, diskSpaceToReserve)

在服务器上访问url / captureImage时起作用。我遇到了这个问题。由于这两段代码都是无限循环,因此它们不能并排运行。我认为我需要做一些多线程,但这是我以前从未在Python中尝试过的东西。如果有人能帮助我重回正轨,我将不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值