मैं एक आईपी कैमरा के साथ काम कर रहा हूँ। मैं कैमरे से एक स्थिर छवि को पकड़ने के लिए इस तरह के एक यूआरएल का उपयोग कर सकता हूं:
http://उपयोगकर्ता नाम:पासवर्ड@IP_of_Camera:पोर्ट/स्ट्रीमिंग/चैनल/1/चित्र
मैं जो करना चाहता हूं वह उस यूआरएल से छवि को पाइथन/फ्लास्क डाउनलोड करना है जब क्लाइंट पेज लोड करता है, और छवि को आईएमजी टैग का उपयोग करके पेज में एम्बेड करता है।
अगर मेरे पास ऐसा टेम्पलेट है जो ऐसा कुछ दिखता है:
<html>
<head>
<title>Test</title>
</head>
<body>
<img src="{{ image }}">
</body>
</html>
मैं {{छवि}} को डाउनलोड की गई छवि से कैसे बदलूं?
क्या मैं फ्लास्क के स्थिर फ़ोल्डर में छवि डाउनलोड करने के लिए urllib/अनुरोधों का उपयोग करूंगा, {{छवि}} को {{ url_for('static', filename="temp_image.png") }}
जैसे कुछ के साथ बदल दूंगा, और फिर पृष्ठ लोड होने पर छवि को स्थिर फ़ोल्डर से हटा दूंगा? क्या मैं इसे इसके बजाय कहीं और डाउनलोड करूंगा (स्थिर फ़ोल्डर के अलावा)? या ऐसा करने का कोई और तरीका है जो छवि को स्मृति में रखता है?
पुनश्च. मुझे पता है कि {{छवि}} को सीधे उस URL से बदलना संभव है, लेकिन इससे क्लाइंट को कैमरे का उपयोगकर्ता नाम/पासवर्ड/आईपी/पोर्ट पता चलता है।
2 जवाब
मैं फ्लास्क पर एक मास्किंग मार्ग जोड़ूंगा जो सीधे छवि को प्राप्त करता है और परोसता है। मान लें domain.com/image/user1/cam1
आपका सर्वर आमतौर पर कैमरे के लिए एक http अनुरोध करता है और एक बार जब उसे प्रतिक्रिया मिलती है, तो आप इसे उचित माइमटाइप के साथ सीधे Response
ऑब्जेक्ट के रूप में प्रस्तुत कर सकते हैं।
ऐसे में आपने कैमरे से जो इमेज लाई है वह आपकी रैम में रहती है।
@app.route('image/<userID>/<camID>')
def fun(userID,camID):
# fetch the picture from appropriate cam
pic = requests.get('http://'+
'Username:Password'+ # dynamically replace user id / password/ auth
'@IP_of_Camera:Port'+ #dynamically replace port / IP
'/streaming/channels/1/picture')
# do processing of pic here..
return Response(pic,mimetype="image/png")
हालांकि, अगर इस छवि को बार-बार प्रस्तुत करने की आवश्यकता है, तो आप इसे कैश करना चाहेंगे। इस मामले में, मैं आपके दृष्टिकोण के करीब कुछ चुनूंगा।
यदि आप कैमरा छवियों को स्ट्रीम करना चाहते हैं, तो यह पूरी तरह से अलग बॉलगेम है।
import requests
url = "http://Username:Password@IP_of_Camera:Port/streaming/channels/1/picture"
response = requests.get(url)
if response.status_code == 200:
f = open("/your/static/dir/temp.png", 'wb')
f.write(response.content)
f.close()
{{ url_for('static' filename="temp.png") }}
सुनिश्चित नहीं है कि आपको इसे हटाने की आवश्यकता क्यों होगी, लेकिन मुझे लगता है कि अगर आपको लगता है कि इसकी आवश्यकता थी तो आप ऐसा कर सकते थे
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।