Регистрация

Уже есть аккаунт? Вход

Уже есть аккаунт? Sign In Now

Вход

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Зарегистрироваться

Забыли пароль?

Вы не вошли, Зарегистрироваться

Forgot Password

Уже есть аккаунт? Sign In Now

Вы должны войти, чтобы задать вопрос.

Забыли пароль?

Необходима учетная запись, Зарегистрироваться
ВходНовый

Вопросы — CODERIDE.RU

Вопросы — CODERIDE.RU Logo Вопросы — CODERIDE.RU Logo

Вопросы — CODERIDE.RU Navigation

  • Главная
  • О нас
  • Контакты
Поиск
Задать вопрос

Mobile menu

Close
Задать вопрос
  • Главная
  • О нас
  • Контакты
  • Вопросы
    • Новые
    • Рейтинговые
    • Просматриваемые
  • Теги
Главная/ Вопросы/Q 314
  • 0

Правильное преобразование байтов base64 в строку и отображение в cv2.imshow

  • 0

Я изо всех сил пытаюсь найти решение для этого:

Я создаю систему обнаружения шаблонов, используя фреймворк Yolo с Raspberry Pi и компьютером для обработки изображений, и до сих пор я изо всех сил пытаюсь получить соответствующий объект изображения в виде кадров для передачи по моей нейронной сети, даркнет. На самом деле я передаю кадры изображений с помощью библиотеки zeroZMQ, которая работает (малина отправляет изображения на компьютер с помощью нейронной сети), но у меня возникли проблемы с декодированием строки base64, которую я получаю из потока, и не могу показать ее с помощью cv2.imshow.

Функции моего серверного кода, ответственные за преобразование и декодирование base64, описаны ниже:

import argparse
from io import BytesIO, StringIO
import numpy as np
import cv2
from collections import defaultdict
from imutils.video import FPS
import imagezmq
import base64
import darknet
import requests
import os
from PIL import Image as im
from numpy import asarray
from time import sleep

print('[SERVER] - System initialization')

#imagezmq protocol
image_hub = imagezmq.ImageHub() 

 def convertImgBase64(image):
    try:
        imgString = base64.b64encode(image).decode('utf-8')
        print('convertida com sucesso')
        return imgString
    except os.error as err :
        print(f"Erro:'{err}'")

def readb64(base64_string):
    try:
        sbuf = BytesIO()
        sbuf.write(base64.b64decode(str(base64_string)))
        pimg = im.open(sbuf)
        print('leu string b64')
        return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR)
    except os.error as err :
        print(f"Erro:'{err}'")

def capture_img():
    storage = '/home/caio/Desktop/img/'
    #header = 'data:image/jpeg;base64,'
    while True:
        camera, jpg_buffer = image_hub.recv_jpg()
        buffer = np.frombuffer(jpg_buffer, dtype='uint8')
        imagedecoder = cv2.imdecode(buffer, cv2.IMREAD_COLOR)
        print(type(imagedecoder))
        img = im.fromarray(imagedecoder)
        print(type(img))

        try:
            print('Converting...')
            
            string = convertImgBase64(imagedecoder)
            print(string)
            cvimg = readb64(string)
            print(cvimg)
            cv2.imshow(camera, cvimg)
            print('Image read')
            print(cvimg)
            sleep(2)
        except os.error as err :
            print(f"Error:'{err}'")

        #cv2.imshow(camera, imagedecoder)
        cv2.waitKey(1)

        image_hub.send_reply(b'OK')

И клиент (код raspberry pi) приведен ниже:

import sys

import socket
import time
import cv2
from imutils.video import VideoStream
import imagezmq
import argparse

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-s", "--server-ip", required=True,
    help="ip address of the server to which the client will connect")
args = vars(ap.parse_args())
# initialize the ImageSender object with the socket address of the
# server
sender = imagezmq.ImageSender(connect_to="tcp://{}:5555".format(
    args["server_ip"]))
# use either of the formats below to specifiy address of display computer
# sender = imagezmq.ImageSender(connect_to='tcp://192.168.1.190:5555')

rpi_name = socket.gethostname()  # send RPi hostname with each image
vs = VideoStream(usePiCamera=True, resolution=(800, 600)).start()
time.sleep(2.0)  # allow camera sensor to warm up
jpeg_quality = 95  # 0 to 100, higher is better quality, 95 is cv2 default
while True:  # send images as stream until Ctrl-C
    image = vs.read()
    ret_code, jpg_buffer = cv2.imencode(
        ".jpg", image, [int(cv2.IMWRITE_JPEG_QUALITY), jpeg_quality])
    sender.send_jpg(rpi_name, jpg_buffer)

Мой вывод ошибок сейчас выглядит так: Server error

Я пробовал решение здесь и здесь

Я надеюсь, что кто-нибудь сможет дать мне прикурить, мне становится очень грустно в этот момент.

Спасибо!

opencvpythonpython-imaging-libraryzeromq
  • Поделиться
CaioVC 27.06.2021 19:01
  • 0 0 Ответов
  • 9 Просмотров
Ответ

    Похожие вопросы

    • Python и GmailAPI: Как отслеживать входящие сообщения Gmail для получения новых писем?
    • Получить идентификатор пользователя из представления на основе классов
    • как сделать многопользовательскую игру в кости Клинта [дубликат]
    • Просмотр списка в Django
    • Изображения Django не отображаются, когда DEBUG=False на Heroku
    • Пожалуйста, помогите мне понять, почему модель классификации изображений Tensorflow слишком подходит
    • Ошибка значения(“Можно сравнивать только объекты серии с одинаковыми метками”) - набор данных boston.csv
    • Экспорт нескольких моделей Django в один файл
    • Что означает “типизировано=Ложно”?
    • Стратифицированная перекрестная проверка или выборка для разделения тестов на основе нескольких функций в python

    Ответить
    Отменить ответ

    Вы должны авторизоваться, чтобы добавить ответ.

    Забыли пароль?

    Необходима учетная запись, Зарегистрироваться

    Explore

    • Главная
    • Вопросы
      • Новые
      • Просматриваемые
      • Рейтинговые
    • Теги
    • .net
    • android
    • arrays
    • asp-net
    • c
    • c#
    • c++
    • css
    • html
    • ios
    • java
    • javascript
    • jquery
    • mysql
    • node-js
    • php
    • r
    • ruby-on-rails
    • sql

    2021 CODERIDE.RU

    Вставить/изменить ссылку

    Введите адрес назначения (URL)

    Или сделайте ссылку на существующий материал

      Поисковый запрос не задан. Показаны недавние элементы. Воспользуйтесь поиском или клавишами вверх/вниз, чтобы выбрать элемент.