das Projekt steht noch ziemlich am Anfang.
Zum Aufzeichnen der Langwellensender und zum Aufzeichnen von Meteorströmen verwende ich einen Nvidia Jetson Xavier NX. Eine preiswerte Variante, der Nvidia Jetson Nano oder ein Raspberry Pi sollten aber auch ausreichen.
Dieser Kleincomputer ist über einen HDMI zu USB3 Adapter mit dem HDMI Ausgang meines Notebooks verbunden. Der Jetson sieht dann den PC Bildschirm als USB3 Kamera an. Ein Python3 Programm liest die umrandeten Bereiche des Wasserfalls (s. Screenshot) aus und summiert die Werte auf.
Meine Python3 Programme zum loggen und plotten gebe ich gerne weiter. Die momentane Version des SID Aufnahmeprogramm ist angehängt. Es ist noch sehr roh…
# (C) WiSi-Testpilot 2021
import datetime
import numpy as np
import cv2
import time
import math as m
RED = (0, 0, 255)
YELLOW = (0, 255, 255)
light_BLUE = (200, 100, 100)
BLUE = (255, 0, 0)
GREEN = (0, 255, 0,)
MAGENTA = (255, 255, 0)
WHITE = (255, 255, 255)
bg = np.zeros((740, 1500, 3), np.uint8) # Result Screen
bg = cv2.line(bg,(1,1),(1,700),(WHITE),2)
bg = cv2.line(bg,(1,699),(1500,699), WHITE,2) # Skala
for j in range (1,7):
bg = cv2.line(bg,(0, j * 100),(15, j * 100), WHITE,2) # Y- Ticks
cap = cv2.VideoCapture(0) # /dev/video0, Spektrum Lab live Screen Input
cap.set(3,1280) # HD 1280 720
cap.set(4,720)
font = cv2.FONT_HERSHEY_SIMPLEX
counter = 0 # Debug Info
altsek = 0
warda = 0
neunhundert = 110 # 100 Vorschub
#neunhundert = 5
yo = 100 #Positionen der Rahmen
yu = 300
xl = 900
xr = 1150
bxl = 200
bxr = 450
cxl = 520
cxr = 770 #770
teiler = (xr - xl) * (yu - yo)
bteiler = (bxr - bxl) * (yu - yo)
cteiler = (cxr - cxl) * (yu - yo)
print()
print(' Start: ',time.strftime("%T"),' UTC')
print()
while cap.isOpened(): # diese Schleife wird 25 x in der Sekunde durchlaufen
ret, streamout = cap.read() # Einlesen des Frame
save = cv2.cvtColor(streamout, cv2.COLOR_BGR2GRAY)
streamout = cv2.rectangle(streamout, (xl, yo), (xr, yu), GREEN, 2) # plottet grünen Rahmen
streamout = cv2.rectangle(streamout, (bxl, yo), (bxr, yu), YELLOW, 2) # plottet gelben Rahmen
streamout = cv2.rectangle(streamout, (cxl, yo), (cxr, yu), RED, 2) # plottet roten Rahmen
# drei Summierer
signal = 0
for i in range (xl, xr):
for j in range (yo, yu):
bw = save[j,i]
signal = signal + bw
fl = 700 - int (signal / teiler * 6)
# print('Ch1 ',time.strftime("%T"),' ',str(signal).zfill(8))
bsignal = 0
for i in range (bxl, bxr):
for j in range (yo, yu):
bw = save[j,i]
bsignal = bsignal + bw
bfl = 700 - int (bsignal / bteiler * 6)
# print('Ch2 ',time.strftime("%T"),' ',str(bsignal).zfill(8))
csignal = 0
for i in range (cxl, cxr):
for j in range (yo, yu):
bw = save[j,i]
csignal = csignal + bw
cfl = 700 - int (csignal / cteiler * 6)
print(datetime.datetime.now(),' ',str(signal).zfill(9),' ',str(bsignal).zfill(9),' ',str(csignal).zfill(9))
y_t_color = GREEN
y_t_fuellung = -1
dicke = 1
y_t = (int(counter/neunhundert), fl)
bg = cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = YELLOW
y_t = (int(counter/neunhundert), bfl)
bg = cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = RED
y_t = (int(counter/neunhundert), cfl)
bg = cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
Hora = int (time.strftime("%H"))
Minute = int (time.strftime("%M"))
Sekunde = int (time.strftime("%S"))
fontScale = 0.8
fthickness = 1
Timestamp = str(Hora)
Timestr = (Timestamp + 'UTC')
org = (int(counter/neunhundert), 735)
if (Minute == 0) and (Sekunde == 0) and (warda == 0):
bg = cv2.putText(bg, Timestr, org, font, fontScale, WHITE, fthickness)
bg = cv2.line(bg,(int(counter/neunhundert),700),(int(counter/neunhundert), 715), WHITE, 2) # X-Ticks
print('1 TimeTi ',time.strftime("%T"))
warda = 50
if ((Minute == 15) or (Minute == 30) or (Minute == 45)) and (Sekunde == 0) and (warda == 0):
bg = cv2.line(bg,(int(counter/neunhundert),700),(int(counter/neunhundert), 710), WHITE, 2) # X-Ticks
print('1 TimeTi ',time.strftime("%T"))
warda = 50
if (warda > 0):
warda -= 1
cv2.imshow('Output', bg)
cv2.imshow("Auslesebildschirm", streamout)
counter += 1 # zum messen der Framerate und Timing
# print(" Sekunde: ", time.strftime("%S"),"Count:",counter)
# print(' Start: ',time.strftime("%T"),' UTC', ' Signal: ', int (signal / teiler * 5))
keyCode = cv2.waitKey(30) & 0xFF
if keyCode == 27:
cap.release()
cv2.destroyAllWindows()
break
Alles anzeigen