I agree… this does have several JPEG tags on here but it does not decode. I converted and ran many of the downloaded binary files through a massive database of hex file identifiers… while the image dumps could easily be identified as “JPEG Bitmap”, the mystery files yielded “Unknown data”… I wonder whether or not this is a format that the @geoscan team came up with… perhaps @K4KDR or @EA4GPZ have ideas? I’m stumped here! (FYI I used trid for the analysis.)
You’ve certainly got parts of (several) image files in those captures, but it appears that too many packets are missing to allow a valid image file to be assembled. That’s a huge down-side of the JPG file format.
I tried to decode this observation https://network.satnogs.org/observations/6543150/ and after a replay it gave me the following GetKissPlus output: log file
When I try to decode the file, I get the following error:
Raw GEOSCAN mode?y
Characters to remove (16 raw soundmodem, 47 for GetKISS+):47
Traceback (most recent call last):
File "/source/git/radio-satellites/geoscan-tools/geoscan_proc.py", line 44, in <module>
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2284, in save
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 599, in _ensure_mutable
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 592, in _copy
File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 276, in load
File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 71, in raise_oserror
raise OSError(message + " when reading image file")
OSError: broken data stream when reading image file
I run this command on Debian Linux and the python version is 3.10.7
There are a few things wrong here that I didn’t document well enough.
First of all, I didn’t mention this in the readme, but raw geoscan mode should be turned off, since that is to be used with SoundModem log files
Second, it appears that your version of PIL is either outdated or PIL doesn’t work on 3.10… I’m using 3.7 fine. Try running
pip install Pillow --upgrade
If that doesn’t work, try adding
from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
to the beginning of the file (modify the PIL import at the beginning though).
I ran it through my system successfully, however since the signal fades rapidly my the end of the pass, the JPEG is corrupt and doesn’t contain FFD9 tags for example (JPEG end tags). I will implement functionality to write corrupt JPEG files later this afternoon. This does not require PIL.
Unfortunately, it seems like you don’t have enough information to recover a JPEG, even with writing images as raw… does it decode with Scott’s script? Perhaps a non-fixed yagi or a higher gain one would work better?
EDIT: I can confirm the write raw data feature works well, due to it writing images well on a different file with more packets.