Использование потока для запроса и обработки изображения - PullRequest
0 голосов
/ 08 мая 2020

У меня есть камера, которая делает фотографии в двух разных качествах: "cam-lo.jpg": НИЗКОЕ качество, которое всегда следует запрашивать для получения фотографий каждые 0,2 секунды (быстрое получение фотографий дает эффект видео) и "cam -hi.jpg ": ВЫСОКОЕ качество. Если переменная расстояния меньше или равна 40, я должен запросить "http://192.164.1.39/cam-hi.jpg" и прекратить запрашивать изображение низкого качества, пока я не получу изображение высокого качества и не проведу с ним обработку. Для этой цели я пытаюсь остановить другой поток с помощью python -условия, как показано ниже:

if distance<=40:
    while(True):
        **cond.acquire()**
        a="stop"
        for i in range(5):
            response=urllib.request.urlopen("http://192.164.1.39/cam-hi.jpg")
            img=Image.open(BytesIO(response.read(100000)))
            try:
                output=str(i)+".jpg"
                img.save(output)
                img.save('C:/Users/hi/Desktop/savings/'+"high.jpg", 'JPEG')
            except IOError:
                print("cannot convert",infile)
            a="finished"
            print(a)
            # AFTER HERE, THERE İS A LONG CODE FOR IMAGE PROCESSING THAT THE PROGRAM CANT REACH
            #code for image processing.......
            cond.notify()
            cond.release()


def CamRequest():
    global a
    while(True):
        cond.acquire()
        if(a=="stop"):
           print(a)
           cond.wait()
           cond.notify()
           cond.release()
           response=urllib.request.urlopen("http://192.164.1.39/cam-lo.jpg")
           img2=Image.open(BytesIO(response.read(100000)))
           img2.save('C:/Users/hi/Desktop/savings/'+"1.jpg", 'JPEG')
           time.sleep(0.2)
           print(a)

Это работает нормально до тех пор, пока не появится строка, в которой я беру высококачественное изображение, но не могу ничего с ним сделать при обработке смысла. потому что программа останавливается на этом (я имею в виду, что она просто "ждет"). Я также искал «asyn c запросы», но в моем случае мне нужно использовать urllib, поскольку ответ представляет собой только изображение. Было бы замечательно, если бы я мог обрабатывать высококачественные изображения после того, как я их сделал, в то время как изображения низкого качества все еще запрашиваются.

...