Вывод результата обработки opencv на веб сервер

Компьютерное зрение, OpenCV

Вывод результата обработки opencv на веб сервер

Сообщение businka76 » 09 дек 2014, 00:03

Добрый день.
Хочется вывести результат обработки изображения с веб камеры на raspberry через веб сервер, пока благодаря совету noonv и этому примеру удалось реализовать через mjpg. Но в этом варианте оно может работать только на одного клиента.

Работа с камерой у меня ведется в отдельном процессе, подскажите уважаемые форумчане, как мне вывести результат обработки в поток, который может читать несколько клиентов и возможно менее грузящий проц?

Пример вывода через mjpg на питоне 3.3 и beta opencv
Код: Выделить всё
#!/usr/bin/python
import cv2
from http.server import BaseHTTPRequestHandler, HTTPServer

class CamHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print(self.path)
        if self.path.endswith('.mjpg'):
            self.send_response(200)
            self.send_header('Content-type', 'multipart/x-mixed-replace; boundary=--jpgboundary')
            self.end_headers()
            while True:
                try:
                    rc, img = capture.read()
                    if not rc:
                        continue

                    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                    r, buf = cv2.imencode(".jpg", imgRGB)
                    self.wfile.write("--jpgboundary\r\n".encode("utf-8"))
                    self.send_header('Content-type', 'image/jpeg')
                    self.send_header('Content-length', str(len(buf)))
                    self.end_headers()
                    self.wfile.write(bytearray(buf))
                    self.wfile.write('\r\n'.encode("utf-8"))
                    # time.sleep(0.5)
                except KeyboardInterrupt:
                    break
                    return
        if self.path.endswith('.html'):
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write('<html><head></head><body>'.encode("utf-8"))
            self.wfile.write('<img src="http://127.0.0.1:8888/cam.mjpg"/>'.encode("utf-8"))
            self.wfile.write('</body></html>'.encode("utf-8"))
            return
def main():
    global capture
    # capture = cv2.VideoCapture(0)
    capture = cv2.VideoCapture('d:\\Video\\gopro\\GOPR0026.MP4')
    # capture.set(cv2.CAP_PROP_FRAME_WIDTH, 320);
    # capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 240);
    try:
        server = HTTPServer(('', 8888), CamHandler)
        print("server started")
        server.serve_forever()
    except KeyboardInterrupt:
        capture.release()
        server.socket.close()
if __name__ == '__main__':
    main()
Аватара пользователя
businka76
 
Сообщения: 5
Зарегистрирован: 08 дек 2014, 23:46
programming: python

Re: Вывод результата обработки opencv на веб сервер

Сообщение noonv » 09 дек 2014, 10:48

Остаётся добавить многопоточность - чтобы каждый клиент обрабатывался в отдельном потоке.
Т.е. есть два основных потока:
в первом получаем картинку с камеры,
во втором обрабатывается серверный сокет, который при подключении нового клиента создаёт дополнительный поток в котором идёт отправка картинки (не забудьте защитить данные мьютексом).
Аватара пользователя
noonv
Администратор
 
Сообщения: 557
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Вывод результата обработки opencv на веб сервер

Сообщение businka76 » 09 дек 2014, 15:46

боюсь что это тупиковая ветвь. в таком исполнении даже для одного потока сжираются 40-50% всех ядер i7.

сейчас пытаюсь найти способ отдать из opencv поток. например через opencv.writer отдать через "файл" в сокет или pipe который в свою очередь скормить ffmpeg или сразу какой нить мультиплексор.

если есть мысли буду признателен.

нарыл на тему ссылки, может кому будет полезно
opencv to ffmpeg - есть ли профит по сравнению с mjpg не понятно
как отправить в ffmpeg сразу из питона - судя по отзывам сомнительный вариант но все же
как ffmpeg доставить на webpage
Аватара пользователя
businka76
 
Сообщения: 5
Зарегистрирован: 08 дек 2014, 23:46
programming: python


Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |