我正在尝试为其他Web界面创建中央Web服务器,以与不同的相机/设备交互并从中获取信息。 目前,我正在尝试从设备获取的JSON数据(当前有效)和另一个URL的图像(无效)中获取图像。
在继续之前,这是我的代码:
main.py
from flask import Flask, render_template, url_for, copy_current_request_context
import requests
from flask_socketio import SocketIO, emit
from threading import Thread, Event
from time import sleep
goProPiCamIP = ''
goProPiCamPort = '5000'
iPhoneIP = '192.168.1.26' # Example: 10.15.11.61(ask4)
iPhonePort = '8080' # Example: 8080
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True
socketio = SocketIO(app, async_mode=None, logger=True, engineio_logger=True)
dataThread = Thread()
imgThread = Thread()
thread_stop_event = Event()
def getData():
print("getData()")
while not thread_stop_event.isSet():
data = requests.get("http://"+iPhoneIP+":"+iPhonePort+"/").text
print("\n\n " + str(type(data)) + "\n\n")
print("\n\n" + data + "\n\n")
socketio.emit('newinfo', {'info': data}, namespace='/data')
socketio.sleep(0.4)
def getImg():
print("getImg()")
while not thread_stop_event.isSet():
imgData = requests.get("http://"+iPhoneIP+":"+iPhonePort+"/img")
print("\n\n"+imgData+"\n\n")
if str(imgData).__contains__("200"):
print("emitting...")
socketio.emit('newimg', {'img': imgData.url}, namespace='/img')
socketio.sleep(1)
else:
print(str(imgData))
@app.route("/")
def index():
return render_template('index.html')
@socketio.on('connect', namespace='/data')
def test_connect():
global dataThread
print('Client connected')
if not dataThread.isAlive():
print("Starting data thread")
dataThread = socketio.start_background_task(getData)
else:
print("Data Thread is already alive.")
@socketio.on('connect', namespace='/img')
def img():
global imgThread
print('Img client connected')
if not imgThread.isAlive():
print("starting img thread...")
imgThread = socketio.start_background_task(getImg)
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print('Client Disconnected')
print("Starting server...")
app.run(debug=True, host='0.0.0.0')
print("Server is running.")
main.js
$(document).ready(function () {
//connect to the socket server.
var imgSocket = io.connect('http://' + document.domain + ':' + location.port + '/img');
var infoSocket = io.connect('http://' + document.domain + ':' + location.port + '/data', { 'force new connection': true });
//receive details from server
imgSocket.on('newimg', function (msg) {
console.log("imgurl " + msg)
console.log("ImgReceived" + msg);
img_string = '<img src=' + msg + '>';
$('#img').html(img_string)
});
infoSocket.on('newinfo', function (msg) {
console.log("Received " + msg.info);
info_string = '';
info_string = '<pre>' + msg.info + '</pre>';
$('#info').html(info_string);
});
});
index.html
<!DOCTYPE html>
<html>
<head>
<style>
img {
width: 30%;
height: 30%;
transform: rotate(90)
}
</style>
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script src="static/js/main.js"></script>
</head>
<body>
<div class="container" id="content">
<div class="row">
<h3>iPhone:</h3>
<div id="info">
</div>
<div id="img">
</div>
</div>
</div>
</body>
</html>
在 main.py 中, getData()正在工作,并且每0.4秒异步更新一次网页,但是 getImg() >方法根本不起作用,在控制台输出(JS或Python控制台)中,网页上都没有显示任何内容,甚至没有img。
我正在尝试为其他Web界面创建中央Web服务器,以与不同的相机/设备交互并从中获取信息。 目前,我正在尝试从设备获取的JSON数据(当前有效)和另一个URL的图像(无效)中获取图像。
在继续之前,这是我的代码:
我希望使用 getImg()方法每秒显示和更新img。 我是使用SocketIO的新手,所以我不知道是否没有正确使用语法,因此发现问题很难解决。
我已阅读Flask-SocketIO documentation进行尝试并提供帮助,但是我仍然无法解决问题所在。
任何帮助将不胜感激。谢谢。