Я создаю веб-приложение для интеллектуальной парковки, оно будет иметь две кнопки, которые будут отображать изображение или кадр того, что камера искала в момент нажатия, а другая отобразит сообщение, которое сообщит наличие каждого слота.
Это часть кода, которая отвечает за поиск доступности на парковке, прежде чем я вызвал функцию, которая сделала меня перспективным преобразованием для сохранения кода, но с помощью фляги у меня возникли проблемы при вызове метода.
smartparking.py
def get_Disponibilidad(self):
_, frame = self.cap.read()
frame = cv2.resize(frame,(np.int(frame.shape[1]/2),np.int(frame.shape[0]/2)))
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.circle(frame, (65, 190), 5, (0, 0, 255), -1)
cv2.circle(frame, (490, 200), 5, (0, 0, 255), -1)
cv2.circle(frame, (30, 310), 5, (0, 0, 255), -1)
cv2.circle(frame, (530, 310), 5, (0, 0, 255), -1)
pts1 = np.float32([[65, 190], [490, 200], [30, 310], [530, 310]])
pts2 = np.float32([[0, 0], [600, 0], [0, 500], [600, 500]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(gray, matrix, (600, 500))
v = np.median(result)
lower = int(max(0, (1.0 - 0.33) * v))
upper = int(min(255, (1.0 + 0.33) * v))
## edged = cv2.Canny(image, 50, 100)
edges = cv2.Canny(result, lower, upper)
estado = 0
blancos = cv2.countNonZero(edges)
if (blancos >= 6000):
estado = 1
#estado = disponibilidadPlaza(edges)
return estado
def get_Image(self):
_, frame = self.cap.read()
frame = cv2.resize(frame,(np.int(frame.shape[1]/2),np.int(frame.shape[0]/2)))
cv2.circle(frame, (65, 190), 1, (0, 0, 255), -1)
cv2.circle(frame, (490, 200), 1, (0, 0, 255), -1)
cv2.circle(frame, (30, 310), 1, (0, 0, 255), -1)
cv2.circle(frame, (530, 310), 1, (0, 0, 255), -1)
pts1 = np.float32([[65, 190], [490, 200], [30, 310], [530, 310]])
pts2 = np.float32([[0, 0], [600, 0], [0, 500], [600, 500]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(frame, matrix, (600, 500))
_, jpeg = cv2.imencode('.jpg', frame)
return jpeg.tobytes()
В следующем коде я вызываю функцию get_Availability () smartparking, которая должна возвращать 1 в случае занятости и 0 в противном случае, это значение должно отображаться в html при нажатии кнопки, но оно должно быть в курсе, если человек нажимает кнопку, когда на стоянке обнаруживается машина.
main.py
from flask import Flask, request, redirect, render_template, Response
from SmartParking import VideoCamera
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.htm')
def disponible(parking):
while True:
availability = VideoCamera().get_Disponibilidad()
render_template('index.htm',availability=availability)
def gen(camera):
while True:
frame = camera.get_Image()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video_feed')
def video_feed():
return Response(gen(VideoCamera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(debug=True)
Наконец, HTML, который теперь показывает в реальном времени, что видит камера, но идея состоит в том, чтобы при каждом нажатии кнопки показывать кадр видео, а также статус доступности.
<!DOCTYPE html>
<html>
<head>
<title>Smart-Parking</title>
</head>
<body>
<h1>Smart Parking</h1> <h1 style="color: red;">LIVE STREAM</h1>
<img id="bg" src="{{ url_for('video_feed') }}">
<h1>Slot 1: {{availability}}</h1>
<form method="POST">
<button type="submit" name="Parking">Image</button>
<button type="submit" name="Slots">Availability</button>
</form>
</body>
</html>
Доступность переменной принимает ее так, как если бы она была нулевой, и кнопки также не работают, поскольку я не знаю, как их вызывать в main.py