我写了一个Python脚本来在端口36296上启动服务器,但是它根本不起作用,这是怎么了?当我尝试连接到端口36296时,它说连接失败:连接被拒绝。请帮助解释为什么它会以这种特殊的方式出现故障。谢谢。 (很长时间以来,我已经以多种方式尝试了多次,因此非常感谢您的帮助。)
import sys, time, logging, os, argparse
import numpy as np
from PIL import Image, ImageGrab
from socketserver import TCPServer, StreamRequestHandler
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
from train import create_model, is_valid_track_code, INPUT_WIDTH,
INPUT_HEIGHT, INPUT_CHANNELS
def prepare_image(im):
im = im.resize((INPUT_WIDTH, INPUT_HEIGHT))
im_arr = np.frombuffer(im.tobytes(), dtype=np.uint8)
im_arr = im_arr.reshape((INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNELS))
im_arr = np.expand_dims(im_arr, axis=0)
return im_arr
class TCPHandler(StreamRequestHandler):
def handle(self):
if args.all:
weights_file = 'weights/all.hdf5'
logger.info("Loading {}...".format(weights_file))
model.load_weights(weights_file)
logger.info("Handling a new connection...")
for line in self.rfile:
message = str(line.strip(),'utf-8')
logger.debug(message)
if message.startswith("COURSE:") and not args.all:
course = message[7:].strip().lower()
weights_file = 'weights/{}.hdf5'.format(course)
logger.info("Loading {}...".format(weights_file))
model.load_weights(weights_file)
if message.startswith("PREDICTFROMCLIPBOARD"):
im = ImageGrab.grabclipboard()
if im != None:
prediction = model.predict(prepare_image(im), batch_size=1)[0]
self.wfile.write((str(prediction[0]) + "\n").encode('utf-8'))
else:
self.wfile.write("PREDICTIONERROR\n".encode('utf-8'))
if message.startswith("PREDICT:"):
im = Image.open(message[8:])
prediction = model.predict(prepare_image(im), batch_size=1)[0]
self.wfile.write((str(prediction[0]) + "\n").encode('utf-8'))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Start a prediction server that other apps will call into.')
parser.add_argument('-a', '--all', action='store_true', help='Use the combined weights for all tracks, rather than selecting the weights file based off of the course code sent by the Play.lua script.', default=False)
parser.add_argument('-p', '--port', type=int, help='Port number', default=36296)
parser.add_argument('-c', '--cpu', action='store_true', help='Force Tensorflow to use the CPU.', default=False)
args = parser.parse_args()
if args.cpu:
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
logger.info("Loading model...")
model = create_model(keep_prob=1)
if args.all:
model.load_weights('weights/all.hdf5')
logger.info("Starting server...")
server = TCPServer(('0.0.0.0', args.port), TCPHandler)
print("Listening on Port: {}".format(server.server_address[1]))
sys.stdout.flush()
server.serve_forever()