如何解码从另一个无线电模块(Raspberry Pi 4)接收到的图像文件?

问题描述 投票:0回答:1

我目前正在使用 Raspberry Pi 4 在 Python 中从传感器、DHT22、AS312 等发送和接收数据。我的主要问题是当我在这里收到图像时是抽象的(注意这里看到的路径不是真实的路径)。

  1. 首先,我导入这些库(注意 memory_mangement 只是我创建的一个 bash 脚本,用于跟踪我使用了多少空间,对我的问题并不重要)。
import time
import serial
import pandas as pd
import numpy as np
import threading
from memory_mangment import sensor_data
  1. 我做了一个类初始化函数
class Transceiver:
    def __init__(self,data):
        self.transceive=serial.Serial(port='/dev/tty50',
                                baudrate=9600,
                                parity=serial.Parity_NONE,
                                stopbits=serial.STOPBITS_ONE,
                                bytesize=serial.EIGHTBITS,
                                timeout=1)
        self.message="Hello world! "
        self.data=data
        self.txt_fname="/path/to/txtfile.txt"
        self.png_fnam="/path/to/pngfile.png"
        self.csv_fname=sensor_data().fname
        self.recived=self.transceive.in_waiting
        self.event=threading.Event()
  1. 然后我传输一个 PNG 文件,如下所示:
def Transmit_test_png_file(self):
        """Transmit a PNG file"""
        with open(self.png_fname, 'rb') as f:
            data = f.read()
        self.transceive.write(data)
  1. 然后我就有了接收功能:
def Receive_test_png_file(self):
        "Receive a PNG file"""
        self.transceive.attachInterrupt(self.serial_interrupt)
        if self.event.is_set():
            data_read = self.transceive.readlines()

这是我的主要问题:它将打印“[b'\x89PNG” ', b'\x1a ', b'\x00\x0 ... ” 等等。如果您没有无线电模块,这里是复制我的问题的方法:

import cv2
img_fname=r"/path/to/testfile.png"
with open(img_fname,'rb') as f:
    data=f.readlines()

我想知道是否可以使用

cv2.imdecode
来解码它。我查看了一些标志,只是想知道是否有人对我可以用来解码的标志有任何建议,或者是否有更简单的方法来做到这一点。让我知道(注:我知道一些)。

python raspberry-pi serial-communication lora
1个回答
0
投票

除非您的 PNG 图像总大小低于 240 字节,否则不会完整传输。 LoRa 数据包中可以传输的最大字节数为 256,其中包括开销。

如果您想要进行战斗更改来获取该图像,则需要将其拆分为块,添加标头(xx/yy 块 xx 从 yy 块中取出),然后将它们一一发送,块之间有一个暂停(另请记住合理使用规则,通常为 1% 的通话时间)。

但严重的是,LoRa 不适合传输图像等重负载。

© www.soinside.com 2019 - 2024. All rights reserved.