मैं एक आईपी कैमरा के साथ काम कर रहा हूँ। मैं कैमरे से एक स्थिर छवि को पकड़ने के लिए इस तरह के एक यूआरएल का उपयोग कर सकता हूं:

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 से बदलना संभव है, लेकिन इससे क्लाइंट को कैमरे का उपयोगकर्ता नाम/पासवर्ड/आईपी/पोर्ट पता चलता है।

0
Tal 24 अगस्त 2016, 01:51

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")

हालांकि, अगर इस छवि को बार-बार प्रस्तुत करने की आवश्यकता है, तो आप इसे कैश करना चाहेंगे। इस मामले में, मैं आपके दृष्टिकोण के करीब कुछ चुनूंगा।

यदि आप कैमरा छवियों को स्ट्रीम करना चाहते हैं, तो यह पूरी तरह से अलग बॉलगेम है।

6
Vasif 24 अगस्त 2016, 02:08
यह है यदि आप उपयोगकर्ता को छवि को डाउनलोड करने देना चाहते हैं, बजाय इसे टैग में एम्बेड करने के, है ना? या इसे टैग में एम्बेड करने के लिए इसका उपयोग करने का कोई तरीका है?
 – 
Tal
24 अगस्त 2016, 19:12
मुझे पूरा यकीन है कि इसे टैग्स में भी इस्तेमाल करने में सक्षम होना चाहिए। मैं एक त्वरित परीक्षण करूंगा और वापस पोस्ट करूंगा।
 – 
Vasif
24 अगस्त 2016, 22:41
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") }}

सुनिश्चित नहीं है कि आपको इसे हटाने की आवश्यकता क्यों होगी, लेकिन मुझे लगता है कि अगर आपको लगता है कि इसकी आवश्यकता थी तो आप ऐसा कर सकते थे

1
GMarsh 24 अगस्त 2016, 02:06
मैं इसे हटा दूंगा क्योंकि हर बार जब आप पृष्ठ को पुनः लोड करते हैं, तो यह कैमरे से एक नई छवि लेता है - पुरानी छवियों को संग्रहीत करने का कोई कारण नहीं है - वे बस जगह ले लेंगे। कुप्पी के "स्थिर" फ़ोल्डर में गतिशील रूप से बदलने से कुप्पी में कुछ भी टूटने वाला नहीं है?
 – 
Tal
24 अगस्त 2016, 19:15
मुझे लगता है कि हर बार जब आप मार्ग को रीफ्रेश/पुनः लोड करते हैं, तो यह नई छवि को पकड़ लेगा और temp.png को अधिलेखित कर देगा। फ्लास्क एसिंक्स नहीं है, इसलिए इसे तब तक इंतजार करना चाहिए जब तक कि अनुरोध छवि को डाउनलोड न कर ले और इसे परोसने से पहले डिस्क पर लिख दे। मैंने इनमें से किसी का भी परीक्षण नहीं किया है, लेकिन यह मेरी स्याही होगी।
 – 
GMarsh
25 अगस्त 2016, 22:32